Öğ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:
Ö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_ACCOUNTyukarıda seçtiğiniz değişkenin değeridir.storage_container_name,STORAGE_ACCOUNT_CONTAINERyukarı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.
Tarayıcınızda Azure Portal açın ve depolama hesabınıza gidin.
Sol taraftaki kapsayıcıları seçin.
MyContainer seçin.
Kapsayıcıda adlı dosyayı görebildiğinizi doğrulayın
order.Dosyaya tıklayın.
Düzenle sekmesine tıklayın.
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.