Öğ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:

Azure Container Apps'te Dapr Merhaba Dünya mikro hizmetler için mimari diyagramı

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 trueContainer 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.

  1. 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 \")
  1. 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.

  1. Tarayıcınızda Azure portalını açın ve depolama hesabınıza gidin.

  2. Kapsayıcılar sol taraftaki menüyü seçin.

  3. Mycontainer öğesini seçin.

  4. adlı order dosyayı kapsayıcıda görebildiğinizi doğrulayın.

  5. Dosyayı seçin.

  6. Düzenle sekmesini seçin.

  7. 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.

Sonraki adımlar