Öğretici: Azure CLI kullanarak Azure Container Apps'e Dapr uygulaması dağıtma
Dapr (Dağıtılmış Uygulama Çalışma Zamanı), geliştiricilerin dayanıklı, güvenilir mikro hizmetler oluşturmalarına yardımcı olur. Bu öğreticide Azure Container Apps'e örnek bir Dapr uygulaması dağıtılır.
Şunları yapmayı öğreneceksiniz:
- Kapsayıcı uygulamalarınız için bir Container Apps ortamı oluşturma
- Kapsayıcı uygulaması için Azure Blob Depolama durum deposu oluşturma
- İleti oluşturup kullanan ve bunları durum deposunda kalıcı hale getiren iki uygulama dağıtma
- İki mikro hizmet arasındaki etkileşimi doğrulayın.
Azure Container Apps ile mikro hizmetler oluştururken Dapr API'lerinin tam olarak yönetilen bir sürümünü elde edersiniz. Azure Container Apps'te Dapr kullandığınızda, sepetlerin zengin bir özellik kümesi sağlayan mikro hizmetlerinizin yanında çalışmasını sağlayabilirsiniz. Kullanılabilir Dapr API'leri Hizmet çağrıları, Pub/Sub, Olay Bağlamaları, Durum Depoları ve Aktörler'i içerir.
Bu öğreticide, Dapr Merhaba Dünya hızlı başlangıcından aynı uygulamaları dağıtacaksınız.
Uygulama şunlardan oluşur:
- İleti oluşturmak için bir istemci (Python) kapsayıcı uygulaması.
- Bu iletileri bir durum deposunda kullanmak ve kalıcı hale getirmek için bir hizmet (Node) kapsayıcı uygulaması
Aşağıdaki mimari diyagramında bu öğreticiyi oluşturan bileşenler gösterilmektedir:
Ayarlama
CLI'dan Azure'da oturum açmak için aşağıdaki komutu çalıştırın ve istemleri izleyerek kimlik doğrulama işlemini tamamlayın.
az login
CLI'nın en son sürümünü çalıştırdığınızdan emin olmak için yükseltme komutunu çalıştırın.
az upgrade
Ardından CLI için Azure Container Apps uzantısını yükleyin veya güncelleştirin.
Azure CLI'da komutları veya Azure PowerShell'deki modülden Az.App
cmdlet'leri çalıştırdığınızda az containerapp
eksik parametrelerle ilgili hatalar alırsanız, Azure Container Apps uzantısının en son sürümünü yüklediğinizden emin olun.
az extension add --name containerapp --upgrade
Not
Mayıs 2024'den itibaren Azure CLI uzantıları artık önizleme özelliklerini varsayılan olarak etkinleştirmez. Container Apps önizleme özelliklerine erişmek için ile --allow-preview true
Container Apps uzantısını yükleyin.
az extension add --name containerapp --upgrade --allow-preview true
Geçerli uzantı veya modül yüklendikten sonra ve Microsoft.OperationalInsights
ad alanlarını kaydedinMicrosoft.App
.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Ortam değişkenlerini belirleme
Aşağıdaki ortam değişkenlerini ayarlayın. PLACEHOLDERS> değerini değerlerinizle değiştirin<:
RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"
Azure kaynak grubu oluşturma
Kapsayıcı uygulaması dağıtımınızla ilgili hizmetleri düzenlemek için bir kaynak grubu oluşturun.
az group create \
--name $RESOURCE_GROUP \
--location "$LOCATION"
Ortam oluşturun
Azure Container Apps'teki bir ortam, bir grup kapsayıcı uygulaması çevresinde güvenli bir sınır oluşturur. Aynı ortama dağıtılan Container Apps aynı sanal ağa dağıtılır ve günlükleri aynı Log Analytics çalışma alanına yazar.
Ortamı oluşturmak için aşağıdaki komutu çalıştırın:
az containerapp env create \
--name $CONTAINERAPPS_ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION"
Durum deposu ayarlama
Azure Blob Depolama hesabı oluşturma
Ortam dağıtıldığında, bir sonraki adım mikro hizmetlerden biri tarafından verileri depolamak için kullanılan bir Azure Blob Depolama hesabı dağıtmaktır. Hizmeti dağıtmadan önce depolama hesabı için bir ad seçmeniz gerekir. Depolama hesabı adları Azure'da 3 ila 24 karakter uzunluğunda benzersiz olmalı ve yalnızca sayı ve küçük harf içermelidir.
STORAGE_ACCOUNT_NAME="<storage account name>"
Azure Depolama hesabını oluşturmak için aşağıdaki komutu kullanın.
az storage account create \
--name $STORAGE_ACCOUNT_NAME \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION" \
--sku Standard_RAGRS \
--kind StorageV2
Düğüm uygulaması için kullanıcı tarafından atanan bir kimlik yapılandırma
Container Apps hem kullanıcı tarafından atanan hem de sistem tarafından atanan yönetilen kimliği desteklese de, kullanıcı tarafından atanan kimlik Dapr özellikli düğüm uygulamasına blob depolama hesabına erişim izinleri sağlar.
- Kullanıcı tarafından atanan bir kimlik oluşturun.
az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output json
principalId
ve id
özelliklerini alın ve değişkenlerde depolayın.
PRINCIPAL_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query principalId | tr -d \")
IDENTITY_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query id | tr -d \")
CLIENT_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query clientId | tr -d \")
Storage Blob Data Contributor
Rolü kullanıcı tarafından atanan kimliğe atama
Geçerli aboneliğinizin abonelik kimliğini alın.
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
az role assignment create --assignee $PRINCIPAL_ID \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Storage/storageAccounts/$STORAGE_ACCOUNT_NAME"
Durum deposu bileşenini yapılandırma
Dapr aracılığıyla dış kaynaklarda kimlik doğrulaması yapmanın birden çok yolu vardır. Bu örnek çalışma zamanında Dapr Gizli Dizileri API'sini kullanmaz ancak Azure tabanlı bir durum deposu kullanır. Bu nedenle, bir gizli dizi deposu bileşeni oluşturmayı tercih edebilir ve bunun yerine Yönetilen Kimlik kullanarak düğüm uygulamasından blob deposuna doğrudan erişim sağlayabilirsiniz. Çalışma zamanında Azure dışı bir durum deposu veya Dapr Gizli Dizileri API'sini kullanmak istiyorsanız bir gizli dizi deposu bileşeni oluşturabilirsiniz. Bu bileşen çalışma zamanında başvurabilmeniz için çalışma zamanı gizli dizilerini yükler.
Bir metin düzenleyicisi açın ve önceki adımlardan kaynakladığınız özelliklerle statestore.yaml adlı bir yapılandırma dosyası oluşturun. Bu dosya, Dapr uygulamanızın durum deponuza erişmesine yardımcı olur. Aşağıdaki örnekte, Azure Blob Depolama hesabınız için yapılandırıldığında statestore.yaml dosyanızın nasıl görünmesi gerektiği gösterilmektedir:
# statestore.yaml for Azure Blob storage component
componentType: state.azure.blobstorage
version: v1
metadata:
- name: accountName
value: "<STORAGE_ACCOUNT_NAME>"
- name: containerName
value: mycontainer
- name: azureClientId
value: "<MANAGED_IDENTITY_CLIENT_ID>"
scopes:
- nodeapp
Bu dosyayı kullanmak için yer tutucuları güncelleştirin:
- değerini, tanımladığınız değişkenin
STORAGE_ACCOUNT_NAME
değeriyle değiştirin<STORAGE_ACCOUNT_NAME>
. Değerini almak için aşağıdaki komutu çalıştırın:
echo $STORAGE_ACCOUNT_NAME
- değerini, tanımladığınız değişkenin
CLIENT_ID
değeriyle değiştirin<MANAGED_IDENTITY_CLIENT_ID>
. Değerini almak için aşağıdaki komutu çalıştırın:
echo $CLIENT_ID
Bileşen yaml dosyasını depoladığınız dizine gidin ve Container Apps ortamında Dapr bileşenini yapılandırmak için aşağıdaki komutu çalıştırın. Dapr bileşenlerini yapılandırma hakkında daha fazla bilgi için bkz . Dapr bileşenlerini yapılandırma.
az containerapp env dapr-component set \
--name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \
--dapr-component-name statestore \
--yaml statestore.yaml
Hizmet uygulamasını dağıtma (HTTP web sunucusu)
az containerapp create \
--name nodeapp \
--resource-group $RESOURCE_GROUP \
--user-assigned $IDENTITY_ID \
--environment $CONTAINERAPPS_ENVIRONMENT \
--image dapriosamples/hello-k8s-node:latest \
--min-replicas 1 \
--max-replicas 1 \
--enable-dapr \
--dapr-app-id nodeapp \
--dapr-app-port 3000 \
--env-vars 'APP_PORT=3000'
Azure Container Registry kullanıyorsanız komutuna bayrağını --registry-server <REGISTRY_NAME>.azurecr.io
ekleyin.
Varsayılan olarak, görüntü Docker Hub'dan çekilir.
İstemci uygulamasını dağıtma (başsız istemci)
İstemci kapsayıcı uygulamasını dağıtmak için aşağıdaki komutu çalıştırın.
az containerapp create \
--name pythonapp \
--resource-group $RESOURCE_GROUP \
--environment $CONTAINERAPPS_ENVIRONMENT \
--image dapriosamples/hello-k8s-python:latest \
--min-replicas 1 \
--max-replicas 1 \
--enable-dapr \
--dapr-app-id pythonapp
Azure Container Registry kullanıyorsanız komutuna bayrağını --registry-server <REGISTRY_NAME>.azurecr.io
ekleyin.
Sonuçları doğrulama
Başarılı durum kalıcılığını onaylama
Azure Depolama hesabınızdaki verileri görüntüleyerek hizmetlerin düzgün çalıştığını onaylayabilirsiniz.
Tarayıcınızda Azure portalını açın ve depolama hesabınıza gidin.
Kapsayıcılar sol taraftaki menüyü seçin.
Mycontainer öğesini seçin.
adlı
order
dosyayı kapsayıcıda görebildiğinizi doğrulayın.Dosyayı seçin.
Düzenle sekmesini seçin.
Verilerin otomatik olarak nasıl güncelleştirlendiğini görmek için Yenile düğmesini seçin.
Günlükleri Görüntüle
Kapsayıcı uygulamalarındaki günlükler Log Analytics çalışma alanında özel tabloda depolanır ContainerAppConsoleLogs_CL
. Günlükleri Azure portalından veya CLI üzerinden görüntüleyebilirsiniz. Tablonun çalışma alanında görünmesi başlangıçta küçük bir gecikme olabilir.
Komut satırını kullanarak günlükleri görüntülemek için aşağıdaki CLI komutunu kullanın.
LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az containerapp env show --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`
az monitor log-analytics query \
--workspace $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
--analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'nodeapp' and (Log_s contains 'persisted' or Log_s contains 'order') | project ContainerAppName_s, Log_s, TimeGenerated | sort by TimeGenerated | take 5" \
--out table
Aşağıdaki çıkış, CLI komutundan bekleyebileceğiniz yanıt türünü gösterir.
ContainerAppName_s Log_s TableName TimeGenerated
-------------------- ------------------------------- ------------- ------------------------
nodeapp Got a new order! Order ID: 61 PrimaryResult 2021-10-22T21:31:46.184Z
nodeapp Successfully persisted state. PrimaryResult 2021-10-22T21:31:46.184Z
nodeapp Got a new order! Order ID: 62 PrimaryResult 2021-10-22T22:01:57.174Z
nodeapp Successfully persisted state. PrimaryResult 2021-10-22T22:01:57.174Z
nodeapp Got a new order! Order ID: 63 PrimaryResult 2021-10-22T22:45:44.618Z
Kaynakları temizleme
Tebrikler! Bu öğreticiyi tamamladınız. Bu kılavuzun bir parçası olarak oluşturulan kaynakları silmek isterseniz aşağıdaki komutu çalıştırın.
Dikkat
Bu komut, belirtilen kaynak grubunu ve içindeki tüm kaynakları siler. Bu öğreticinin kapsamı dışındaki kaynaklar belirtilen kaynak grubunda varsa, bunlar da silinir.
az group delete --resource-group $RESOURCE_GROUP
Not
pythonapp
Yapılandırılmış durum deponuzda kalıcı hale gelen iletilerle sürekli olarak çağrısı nodeapp
yaptığından, devam eden faturalanabilir işlemlerden kaçınmak için bu temizleme adımlarını tamamlamak önemlidir.
İpucu
Sorun mu yaşıyorsunuz? Azure Container Apps deposunda bir sorun açarak GitHub'da bize bildirin.