Öğretici: Azure CLı kullanarak Azure Container Apps 'e bir Davpr uygulaması dağıtma

Davpr (dağıtılmış uygulama çalışma zamanı), dayanıklı, durumsuz ve durum bilgisi olmayan mikro hizmetler oluşturmaya yardımcı olan bir çalışma zamanı. Bu öğreticide, Azure Container Apps 'e bir örnek Davpr uygulaması dağıtılır.

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

  • Kapsayıcı uygulamalarınız için bir kapsayıcı uygulamalar ortamı oluşturma
  • kapsayıcı uygulaması için bir Azure Blob Depolama durum deposu oluşturma
  • İleti üreten ve kullanan iki uygulama dağıtın ve durum depolama alanını kullanarak bunları kalıcı hale getirin
  • İki mikro hizmet arasındaki etkileşimi doğrulayın.

Azure Container Apps, mikro hizmetler derlerken bir Davpr API 'lerinin tam olarak yönetilen bir sürümünü sunmaktadır. Azure Container Apps 'te Davpr kullandığınızda, nesnelerin zengin bir özellik kümesi sağlayan mikro hizmetlerinizin yanında çalışmasına imkan sağlayabilirsiniz. Kullanılabilir Davpr API 'Leri hizmet çağrıları, Yayımlama/alt, olay bağlamaları, durum depolarıve aktörleri için hizmetiçerir.

Bu öğreticide, aynı uygulamaları, ileti üreten bir istemci (Python) uygulamasından ve yapılandırılmış bir durum deposunda bu iletileri tüketen ve sürdüren bir hizmet (düğüm) uygulamadan oluşan Davpr Merhaba Dünya hızlı başlangıçsından dağıtırsınız. Aşağıdaki mimari diyagram, bu öğreticiyi oluşturan bileşenleri göstermektedir:

Azure Kapsayıcı uygulamalarında mikro hizmet Merhaba Dünya mikro hizmetleri için mimari diyagramı

Önkoşullar

Başlamadan önce

Bu kılavuz, aşağıdaki ortam değişkenlerini kullanır:

RESOURCE_GROUP="my-containerapps"
LOCATION="canadacentral"
CONTAINERAPPS_ENVIRONMENT="containerapps-env"
LOG_ANALYTICS_WORKSPACE="containerapps-logs"
STORAGE_ACCOUNT_CONTAINER="mycontainer"

Yukarıdaki kod parçacığı, Bash, ZSH veya PowerShell kullanarak ortam değişkenlerini ayarlamak için kullanılabilir.

STORAGE_ACCOUNT="<storage account name>"

İçin bir ad seçin STORAGE_ACCOUNT . Bu, aşağıdaki adımda oluşturulacaktır. Depolama hesap adları Azure içinde benzersiz olmalıdır ve 3 ila 24 karakter uzunluğunda olmalı ve yalnızca rakamlar ve küçük harfler içerebilir.

Kurulum

CLı 'dan Azure 'da oturum açarak başlayın.

Aşağıdaki komutu çalıştırın ve kimlik doğrulama işlemini gerçekleştirmek için istemleri izleyin.

az login

Upgrade komutu aracılığıyla CLı 'nın en son sürümünü kullandığınızdan emin olun.

az upgrade

Ardından, CLı 'ya Azure Container Apps uzantısını yükler.

az extension add \
  --source https://workerappscliextension.blob.core.windows.net/azure-cli-extension/containerapp-0.2.0-py2.py3-none-any.whl 

Artık uzantı yüklü olduğuna göre, Microsoft.Web ad alanını kaydedin.

az provider register --namespace Microsoft.Web

Yeni kapsayıcı uygulamanızla ilgili hizmetleri düzenlemek için bir kaynak grubu oluşturun.

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

CLı yükseltildi ve yeni bir kaynak grubu kullanılabilir olduğunda bir kapsayıcı uygulamaları ortamı oluşturabilir ve kapsayıcı uygulamanızı dağıtabilirsiniz.

Ortam oluşturma

Azure Container Apps ortamları, bir kapsayıcı uygulamaları grubu arasında yalıtım sınırları görevi görür. Aynı ortama dağıtılan kapsayıcı uygulamaları aynı sanal ağa dağıtılır ve günlükleri aynı Log Analytics çalışma alanına yazar.

Azure Log Analytics, kapsayıcı uygulamanızı izlemek için kullanılır ve bir kapsayıcı uygulamaları ortamı oluştururken gereklidir.

Aşağıdaki komutla yeni bir Log Analytics çalışma alanı oluşturun:

az monitor log-analytics workspace create \
  --resource-group $RESOURCE_GROUP \
  --workspace-name $LOG_ANALYTICS_WORKSPACE

Sonra, Log Analytics Istemci KIMLIĞINI ve istemci gizli anahtarını alın.

İsteğin tamamlanabilmesi için yeterli zaman sunmak üzere her bir sorguyu ayrı olarak çalıştırmayı unutmayın.

LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az monitor log-analytics workspace show --query customerId -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --out tsv`
LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET=`az monitor log-analytics workspace get-shared-keys --query primarySharedKey -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --out tsv`

Bağımsız 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 \
  --logs-workspace-id $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
  --logs-workspace-key $LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET \
  --location "$LOCATION"

Bir durum deposu ayarlama

Azure Blob Depolama hesabı oluşturma

yeni bir Azure Depolama hesabı oluşturmak için aşağıdaki komutu kullanın.

az storage account create \
  --name $STORAGE_ACCOUNT \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --sku Standard_RAGRS \
  --kind StorageV2

Azure Blob Depolama hesabınız oluşturulduktan sonra, bu öğreticideki sonraki adımlar için aşağıdaki değerler gereklidir.

  • storage_account_name , STORAGE_ACCOUNT yukarıda seçtiğiniz değişkenin değeridir.

  • storage_container_name , STORAGE_ACCOUNT_CONTAINER yukarıda tanımlanan değerdir (örneğin, mycontainer ). Azure Depolama hesabınızda zaten mevcut değilse, davpr bu adı taşıyan bir kapsayıcı oluşturur.

Aşağıdaki komutla depolama hesabı anahtarını alın.

STORAGE_ACCOUNT_KEY=`az storage account keys list --resource-group $RESOURCE_GROUP --account-name $STORAGE_ACCOUNT --query '[0].value' --out tsv`
echo $STORAGE_ACCOUNT_KEY

Durum depolama bileşenini yapılandırma

Yukarıdaki adımlardan oluşturduğunuz özellikleri kullanarak, Components. YAML adlı bir yapılandırma dosyası oluşturun. Bu dosya, Davpr uygulamanızın durum deponuza erişmesine olanak sağlar. aşağıdaki örnek, bileşenlerinizin. yaml dosyasının Azure Blob Depolama hesabınız için yapılandırıldığında nasıl görüneceğini gösterir:

# components.yaml for Azure Blob storage component
- name: statestore
  type: state.azure.blobstorage
  version: v1
  metadata:
  # Note that in a production scenario, account keys and secrets 
  # should be securely stored. For more information, see
  # https://docs.dapr.io/operations/components/component-secrets
  - name: accountName
    value: <YOUR_STORAGE_ACCOUNT_NAME>
  - name: accountKey
    value: <YOUR_STORAGE_ACCOUNT_KEY>
  - name: containerName
    value: <YOUR_STORAGE_CONTAINER_NAME>

Bu dosyayı kullanmak için, köşeli ayraçlar arasındaki yer tutucu değerlerini <> kendi değerlerinizle değiştirdiğinizden emin olun.

Not

Kapsayıcı uygulamalar şu anda yerel Davpr bileşenleri şemasınıdesteklemiyor. Yukarıdaki örnek desteklenen şemayı kullanır.

Üretim sınıfı bir uygulamada, gizli dizileri güvenli bir şekilde yönetmek için gizli yönetim yönergelerini izleyin.

Hizmet uygulamasını dağıtma (HTTP Web sunucusu)

Components. YAML dosyasını depoladığınız dizine gidin ve hizmet kapsayıcısı uygulamasını dağıtmak için aşağıdaki komutu çalıştırın.

az containerapp create \
  --name nodeapp \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --image dapriosamples/hello-k8s-node:latest \
  --target-port 3000 \
  --ingress 'external' \
  --min-replicas 1 \
  --max-replicas 1 \
  --enable-dapr \
  --dapr-app-port 3000 \
  --dapr-app-id nodeapp \
  --dapr-components ./components.yaml

Bu komut, Service (node) App Server 'ı --target-port 3000 (uygulamanın bağlantı noktası) üzerinde ile yapılandırılmış olan --dapr-app-id nodeapp ve --dapr-app-port 3000 hizmet bulma ve çağırma için birlikte yapılandırılmış olan davpr sepet ile birlikte dağıtır. Durum depettir kullanılarak yapılandırılır --dapr-components ./components.yaml ve bu da sepet durumunun kalıcı olmasını sağlar.

İstemci uygulamasını dağıtma (gözetimsiz 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

Bu komut pythonapp , için de davpr sepet 'yi aramak ve güvenli bir şekilde çağırmak için kullanılan bir davpr sepet ile de çalışır nodeapp . Bu uygulama gözetimsiz olduğundan --target-port , bir sunucu başlatmaya gerek yoktur, ya da giriş sağlamak için bir sorun yoktur.

Sonucu doğrulama

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

Azure Depolama hesabınızdaki verileri görüntüleyerek hizmetlerin doğru çalıştığını doğrulayabilirsiniz.

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

  2. Sol taraftaki kapsayıcıları seçin.

  3. MyContainer seçin.

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

  5. Dosyaya tıklayın.

  6. Düzenle sekmesine tıklayın.

  7. Verilerin nasıl otomatik olarak güncelleşdiğini gözlemlemek için Yenile düğmesine tıklayın.

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

Bir kapsayıcı uygulaması aracılığıyla günlüğe kaydedilen veriler, ContainerAppConsoleLogs_CL Log Analytics çalışma alanındaki özel tabloda depolanır. Günlükleri Azure portal veya CLı ile görüntüleyebilirsiniz. Günlüğe kaydedilen verileri sorgulayabilmeniz için önce analiz işleminin ilk kez gelmesi için birkaç dakika beklemeniz gerekebilir.

Komut satırında günlükleri görüntülemek için aşağıdaki CLı komutunu kullanın.

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 çıktı, CLı komutundan beklenen yanıtın 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

İpucu

Sorun mu yaşıyorsunuz? Azure Container Appsdeposunda bir sorun açarak GitHub konusunda bize bilgi verin.

Kaynakları temizleme

İşiniz bittiğinde, kaynak grubunuzu silmek için aşağıdaki komutu çalıştırarak kapsayıcı uygulama kaynaklarınızı temizleyin.

az group delete \
    --resource-group $RESOURCE_GROUP

Bu komut, hem kapsayıcı uygulamalarını, hem de depolama hesabını, kapsayıcı uygulamaları ortamını ve kaynak grubundaki diğer kaynakları siler.

Not

pythonapp nodeapp , Yapılandırılmış durum deponuza kalıcı olarak gelen iletilerle sürekli olarak çağrılar yaptığından, devam eden faturalanabilir işlemleri önlemek için bu temizleme adımlarının tamamlanmasını önemlidir.

Sonraki adımlar