Öğ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:
Önkoşullar
- Azure CLI'yi yükleme
- Git'i yükleme
- Etkin aboneliği olan bir Azure hesabı gereklidir. Henüz bir hesabınız yoksa ücretsiz olarak bir hesap oluşturabilirsiniz.
- GitHub Hesabı. Henüz yoksa ücretsiz kaydolun.
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ışantargetPort: 3000
ve şu kullanılarak yapılandırılan"appId": "nodeapp"
"appPort": 3000
uygulama 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ızpythonapp
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.
Tarayıcınızda Azure portalını açın.
Kaynak grubunuzda yeni oluşturulan depolama hesabına gidin.
Sol taraftaki menüden Kapsayıcılar'ı seçin.
Oluşturulan kapsayıcıyı seçin.
Adlı
order
dosyayı kapsayıcıda görebildiğinizi doğrulayın.Dosyayı seçin.
Düzenle sekmesini seçin.
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.