Hızlı Başlangıç: Azure CLI kullanarak Azure Container Apps'e Bir 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 hızlı başlangıçta, Dapr sepetlerinin mikro hizmetler kapsayıcı uygulamalarınızla birlikte çalışmasını nasıl etkinleştireceğinizi öğreneceksiniz. Şunu yapacaksınız:

  • Kapsayıcı uygulamalarınız için bir Container Apps ortamı ve Azure Blog Depolama durum deposu oluşturun.
  • İletileri yayımlayan bir Python kapsayıcı uygulaması dağıtın.
  • İletilere abone olan ve bunları bir durum deposunda kalıcı hale getiren bir Node.js kapsayıcı uygulaması dağıtın.
  • Azure portalını kullanarak iki mikro hizmet arasındaki etkileşimi doğrulayın.

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

Bu hızlı başlangıç, açık kaynak Dapr Merhaba Dünya hızlı başlangıçta dağıttığınız uygulamaları yansıtır.

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. değerini <PLACEHOLDERS> 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, verileri depolamak için Node.js kapsayıcı uygulaması tarafından kullanılan bir Azure Blob Depolama hesabı dağıtın. Hizmeti dağıtmadan önce depolama hesabı için bir ad seçin. 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 Node.js 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
    
  2. 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 \")
    
  3. Geçerli aboneliğinizin abonelik kimliğini alın.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  4. Storage Blob Data Contributor Rolü kullanıcı tarafından atanan kimliğe atayın.

    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ı yapmak için birden çok seçeneğiniz olsa da. Bu örnekte Azure tabanlı bir durum deposu kullanılır, böylece Yönetilen Kimlik kullanarak Node.js uygulamasından Blob deposuna doğrudan erişim sağlayabilirsiniz.

  1. Metin düzenleyicisinde, önceki adımlardan kaynakladığınız özelliklerle statestore.yaml adlı bir dosya oluşturun.

    # 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 dosya, Dapr uygulamanızın durum deponuza erişmesine yardımcı olur.

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

    az containerapp env dapr-component set \
        --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --dapr-component-name statestore \
        --yaml statestore.yaml
    

Node.js uygulamasını dağıtma

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.

Python uygulamasını dağıtma

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. Sol taraftaki menüden Veri Depolama>Kapsayıcıları'nı seçin.

  3. Kapsayıcı uygulamasını 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.

Aşağıdaki CLI komutunu kullanarak komut satırını kullanarak günlükleri görüntüleyin.

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

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.

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

İpucu

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

Sonraki adımlar