Öğretici: Azure Resource Manager veya Bicep şablonuyla Bir Dapr uygulamasını Azure Container Apps'e dağıtma

Dapr (Dağıtılmış Uygulama Çalışma Zamanı), durum bilgisi olmayan ve durum bilgisi olan dayanıklı mikro hizmetler oluşturmanıza yardımcı olan bir çalışma zamanıdır. Bu öğreticide, azure Resource Manager (ARM) veya Bicep şablonu aracılığıyla Azure Container Apps'e örnek bir Dapr çözümü dağıtılır.

Aşağıdakileri nasıl yapacağınızı öğrenirsiniz:

  • Dapr durum deposu olarak kullanmak üzere bir Azure Blob Depolama oluşturma
  • Kapsayıcı uygulamalarını barındırmak için Container Apps ortamı dağıtma
  • İki dapr özellikli kapsayıcı uygulaması dağıtma: biri sipariş üreten, diğeri de siparişleri kullanan ve depolayan
  • Kapsayıcı uygulamasına kullanıcı tarafından atanan bir kimlik atayın ve Dapr durum deposunda kimlik doğrulaması yapmak için bu kimliği yaklaşık rol atamasıyla sağlayın
  • İ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.

Bu öğreticide, çözümü Dapr Merhaba Dünya hızlı başlangıcından 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 hizmetleri için mimari diyagramı

Önkoşullar

Kurulum

İlk olarak Azure'da oturum açın.

az login

Yükseltme komutuyla CLI'nin en son sürümünü çalıştırdığınızdan emin olun ve ardından Azure CLI için Azure Container Apps uzantısını yükleyin.

az upgrade

az extension add --name containerapp --upgrade

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

az provider register --namespace Microsoft.App

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

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

Bu değişkenler tanımlandığında, bu öğretici için gereken hizmetleri düzenlemek üzere bir kaynak grubu oluşturabilirsiniz.

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

GitHub deposunu hazırlama

Çözümü dağıtmak için kullanılan ARM ve Bicep şablonlarını içeren depoya gidin.

Deponun üst kısmındaki Çatal düğmesini seçerek deponun çatalını hesabınıza oluşturun.

Artık çatalınızı kopyalayabilir ve bu çatalla yerel olarak çalışabilirsiniz.

Çatallanmış deponuzu acadapr-templates dizinine kopyalamak için aşağıdaki git komutunu kullanın.

git clone https://github.com/$GITHUB_USERNAME/Tutorial-Deploy-Dapr-Microservices-ACA.git acadapr-templates

Dağıtma

Şablon dağıtılır:

  • Container Apps ortamı
  • Container Apps ortamıyla ilişkilendirilmiş log analytics çalışma alanı
  • dağıtılmış izleme için Application Insights kaynağı
  • blob depolama hesabı ve varsayılan depolama kapsayıcısı
  • blob depolama hesabı için bir Dapr bileşeni
  • kullanıcı tarafından atanan yönetilen kimliğe sahip Dapr özellikli kapsayıcı uygulaması: hello-k8s-node
  • Python, Dapr özellikli kapsayıcı uygulaması: hello-k8s-python
  • Blob depolamaya bağlantı kurmak için Dapr bileşeni tarafından kullanılan düğüm uygulaması için bir Active Directory rol ataması

acadapr-templates dizinine gidin ve aşağıdaki komutu çalıştırın:

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file ./azuredeploy.json \
  --parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"

Bir uyarı (BCP081) görüntülenebilir. Bu uyarının uygulamanın başarılı dağıtımı üzerinde hiçbir etkisi yoktur.

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file ./azuredeploy.bicep \
  --parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"

Bu komut şunu dağıtır:

  • Hello world Dapr çözümünü barındırmak için Container Apps ortamı ve ilişkili Log Analytics çalışma alanı
  • Dapr dağıtılmış izleme için Application Insights örneği
  • nodeapp Dapr etkinken üzerinde çalışan targetPort: 3000 ve şu kullanılarak yapılandırılan "appId": "nodeapp""appPort": 3000uygulama sunucusu ve Depolama Verileri Katkıda Bulunanı rol ataması aracılığıyla Azure Blob depolamaya erişimi olan kullanıcı tarafından atanan bir kimlik
  • Durumu depolamak için tarafından nodeapp kullanılmak üzere kapsamı belirlenmiş bir Dapr bileşeni "type": "state.azure.blobstorage"
  • Dapr hizmeti çağırma kullanarak hizmeti çağıran nodeapp Dapr etkin, başsız pythonapp

Sonucu doğrulama

Başarılı durum kalıcılığını onaylayın

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.

  2. Kaynak grubunuzda yeni oluşturulan depolama hesabına gidin.

  3. Sol taraftaki menüden Kapsayıcılar'ı seçin.

  4. Oluşturulan kapsayıcıyı seçin.

  5. Adlı order dosyayı kapsayıcıda görebildiğinizi doğrulayın.

  6. Dosyayı seçin.

  7. Düzenle sekmesini seçin.

  8. Güncelleştirmeleri gözlemlemek için Yenile düğmesini seçin.

Günlükleri Görüntüle

Kapsayıcı uygulaması aracılığıyla günlüğe kaydedilen veriler Log Analytics çalışma alanında özel tabloda depolanır ContainerAppConsoleLogs_CL . Günlükleri Azure portal veya komut satırından görüntüleyebilirsiniz. Günlüğe kaydedilen verileri sorgulamadan önce analizin ilk kez ulaşması için birkaç dakika bekleyin.

Bash veya PowerShell'de günlükleri görüntülemek için aşağıdaki komutu 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 | take 5" \
  --out table

Aşağıdaki çıkış, 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

İşiniz bittiğinde aşağıdaki komutu çalıştırarak kaynak grubunuzu ve bu öğreticide oluşturduğunuz tüm kaynakları silin.

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