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.
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 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. 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.
Kullanıcı tarafından atanan bir kimlik oluşturun.
az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output json
principalId
veid
ö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 \")
Geçerli aboneliğinizin abonelik kimliğini alın.
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
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.
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.
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.
Tarayıcınızda Azure portalını açın ve depolama hesabınıza gidin.
Sol taraftaki menüden Veri Depolama>Kapsayıcıları'nı seçin.
Kapsayıcı uygulamasını 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.
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.