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

Architecture diagram for Dapr Hello World microservices on Azure Container Apps

Kurulum

Başlamak için Azure'da oturum açın. Aşağıdaki komutu çalıştırın ve kimlik doğrulama işlemini tamamlamak için istemleri izleyin.

az login

Ardından CLI için Azure Container Apps uzantısını yükleyin.

az extension add --name containerapp --upgrade

Geçerli uzantı veya modül yüklendikten sonra ad alanını Microsoft.App kaydedin.

Dekont

Azure Container Apps kaynakları ad alanından Microsoft.Web ad alanına Microsoft.App geçirildi. Daha fazla ayrıntı için Microsoft.Web'den Mart 2022'de Microsoft.App ad alanı geçişi bölümüne bakın.

az provider register --namespace Microsoft.App

Daha önce kullanmadıysanız sağlayıcıyı Microsoft.OperationalInsights Azure İzleyici Log Analytics çalışma alanına kaydedin.

az provider register --namespace Microsoft.OperationalInsights

Ardından aşağıdaki ortam değişkenlerini ayarlayın:

RESOURCE_GROUP="my-container-apps"
LOCATION="canadacentral"
CONTAINERAPPS_ENVIRONMENT="my-environment"

Bu değişkenler tanımlandığında, yeni kapsayıcı uygulamanızla ilgili hizmetleri düzenlemek için bir kaynak grubu oluşturabilirsiniz.

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION

CLI yükseltildi ve yeni bir kaynak grubu kullanıma sunuldu. Bir Container Apps ortamı oluşturabilir ve kapsayıcı uygulamanızı dağıtabilirsiniz.

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.


Tek tek kapsayıcı uygulamaları bir Azure Container Apps ortamına dağıtılır. 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 hesap adlarının Azure'da 3 ile 24 karakter arasında benzersiz olması ve yalnızca sayı ve küçük harf içermesi gerekir.

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'

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

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

Dekont

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.

Bahşiş

Sorun mu yaşıyorsunuz? Azure Container Apps deposunda bir sorun açarak GitHub'da bize bildirin.

Sonraki adımlar