Mulai cepat: Menyebarkan aplikasi Dapr ke Azure Container Apps dengan menggunakan Azure CLI

Distributed Application Runtime (Dapr) membantu pengembang membangun layanan mikro yang tangguh dan andal. Dalam panduan cepat ini, Anda mempelajari cara mengaktifkan sidecar Dapr untuk berjalan bersama aplikasi kontainer mikroservis Anda. Anda akan:

  • Buat lingkungan Aplikasi Kontainer dan penyimpanan status Azure Blog Storage untuk aplikasi kontainer Anda.
  • Sebarkan aplikasi kontainer Python yang menerbitkan pesan.
  • Sebarkan aplikasi kontainer Node.js yang berlangganan pesan dan mempertahankannya di penyimpanan status.
  • Verifikasi interaksi antara dua layanan mikro menggunakan portal Azure.

Diagram arsitektur untuk layanan mikro Dapr Hello World di Azure Container Apps

Panduan memulai cepat ini mencerminkan aplikasi yang Anda sebarkan dalam panduan memulai cepat Dapr sumber terbuka Hello World.

Prasyarat

Siapkan

Untuk masuk ke Azure dari CLI, jalankan perintah berikut dan ikuti perintah untuk menyelesaikan proses autentikasi.

az login

Untuk memastikan Anda menjalankan CLI versi terbaru, jalankan perintah peningkatan.

az upgrade

Selanjutnya, instal atau perbarui ekstensi Azure Container Apps untuk CLI.

Jika Anda menerima kesalahan tentang parameter yang hilang saat menjalankan az containerapp commands di Azure CLI atau cmdlet dari modul Az.App di PowerShell, pastikan Anda telah menginstal versi terbaru dari ekstensi Azure Container Apps.

az extension add --name containerapp --upgrade

Catatan

Mulai Mei 2024, ekstensi Azure CLI tidak lagi mengaktifkan fitur pratinjau secara default. Untuk mengakses fitur pratinjau Container Apps, instal ekstensi Container Apps dengan --allow-preview true.

az extension add --name containerapp --upgrade --allow-preview true

Sekarang setelah ekstensi atau modul yang sedang digunakan diinstal, daftarkan namespace Microsoft.App dan Microsoft.OperationalInsights.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Atur variabel lingkungan

Atur variabel lingkungan berikut. <placeholders> Ganti dengan nilai Anda.

RESOURCE_GROUP="<new-resource-group>"
LOCATION="<location>"
CONTAINERAPPS_ENVIRONMENT="<containerapps-environment>"

Membuat Grup Sumber Daya Azure

Buat grup sumber daya untuk mengatur layanan yang terkait dengan penyebaran aplikasi kontainer Anda.

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

Membuat lingkungan

Lingkungan di Aplikasi Kontainer Azure menciptakan batas aman di sekitar sekelompok aplikasi kontainer. Aplikasi Kontainer yang disebarkan ke lingkungan yang sama disebarkan di jaringan virtual yang sama dan menulis log ke ruang kerja Log Analytics yang sama.

Untuk membuat lingkungan, jalankan perintah berikut:

az containerapp env create \
  --name $CONTAINERAPPS_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION"

Menyiapkan penyimpanan status

Membuat akun Azure Blob Storage

Dengan lingkungan yang disebarkan, sebarkan akun Azure Blob Storage yang digunakan oleh aplikasi kontainer Node.js untuk menyimpan data. Sebelum menyebarkan layanan, pilih nama untuk akun penyimpanan.

Nama akun penyimpanan harus unik dalam Azure dan panjangnya antara 3 hingga 24 karakter dan harus hanya boleh berisi angka dan huruf kecil.

STORAGE_ACCOUNT_NAME="<storage-account-name>"

Gunakan perintah berikut untuk membuat akun Azure Storage.

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

Mengonfigurasi identitas yang ditetapkan pengguna untuk aplikasi simpul

Meskipun Container Apps mendukung identitas terkelola yang ditetapkan pengguna dan ditetapkan sistem, identitas yang ditetapkan pengguna menyediakan aplikasi Node.js yang mendukung Dapr dengan izin untuk mengakses akun penyimpanan blob.

  1. Membuat identitas yang ditetapkan pengguna.

    az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output json
    
  2. Ambil properti principalId dan id, lalu simpan dalam variabel.

    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 \")
    
  3. Ambil ID langganan untuk langganan Anda saat ini.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  4. Tetapkan Storage Blob Data Contributor peran untuk identitas yang ditetapkan pengguna.

    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"
    

Konfigurasikan komponen penyimpanan status

Meskipun Anda memiliki beberapa opsi untuk mengautentikasi ke sumber daya eksternal melalui Dapr. Contoh ini menggunakan penyimpanan status berbasis Azure, sehingga Anda dapat menyediakan akses langsung dari aplikasi Node.js ke penyimpanan Blob menggunakan Identitas Terkelola.

  1. Di editor teks, buat file bernama statestore.yaml dengan properti yang Anda sumber dari langkah sebelumnya. <placeholders> Ganti dengan nilai Anda.

    # 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
    

    File ini membantu mengaktifkan aplikasi Dapr Anda untuk mengakses penyimpanan status Anda.

  2. Navigasikan ke direktori tempat Anda menyimpan file yaml dan jalankan perintah berikut untuk mengonfigurasi komponen Dapr di lingkungan Container Apps.

    az containerapp env dapr-component set \
        --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --dapr-component-name statestore \
        --yaml statestore.yaml
    

Menyebarkan aplikasi Node.js

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'

Jika Anda menggunakan Azure Container Registry, sertakan --registry-server <registry-name>.azurecr.io flag dalam perintah.

Secara default, gambar ditarik dari Docker Hub.

Menyebarkan aplikasi Python

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

Jika Anda menggunakan Azure Container Registry, sertakan --registry-server <registry-name>.azurecr.io flag dalam perintah.

Memverifikasi hasil

Konfirmasikan persistensi status yang berhasil

Anda dapat mengonfirmasi bahwa layanan berfungsi dengan benar dengan melihat data di akun Microsoft Azure Storage Anda.

  1. Buka portal Microsoft Azure di browser Anda dan navigasikan ke akun penyimpanan Anda.

  2. Pilih Penyimpanan Data>Kontainer di menu bilah samping.

  3. Pilih aplikasi kontainer.

  4. Verifikasi bahwa Anda dapat melihat file bernama order dalam kontainer.

  5. Pilih file.

  6. Pilih tab Edit.

  7. Pilih tombol Refresh untuk melihat bagaimana data diperbarui secara otomatis.

Lihat log

Log dari aplikasi kontainer disimpan dalam ContainerAppConsoleLogs_CL tabel kustom di ruang kerja Analitik Log. Anda dapat melihat log melalui portal Azure atau melalui CLI. Mungkin ada penundaan kecil pada awalnya agar tabel muncul di ruang kerja.

Lihat log menggunakan baris perintah menggunakan perintah CLI berikut.

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

Output berikut menunjukkan jenis respons yang diharapkan dari perintah CLI.

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

Membersihkan sumber daya

Karena pythonapp terus melakukan panggilan ke nodeapp dengan pesan yang dipertahankan di penyimpanan status yang dikonfigurasi, penting untuk menyelesaikan langkah-langkah pembersihan ini untuk menghindari operasi berbiaya yang terus terjadi.

Jika Anda ingin menghapus sumber daya yang dibuat sebagai bagian dari panduan ini, jalankan perintah berikut.

Perhatian

Perintah ini menghapus grup sumber daya yang ditentukan dan semua sumber daya yang terkandung di dalamnya. Jika ada sumber daya di luar lingkup tutorial ini yang terdapat dalam grup sumber daya yang ditentukan, mereka juga akan dihapus.

az group delete --resource-group $RESOURCE_GROUP

Petunjuk

Mengalami masalah? Beri tahu kami di GitHub dengan membuka masalah di repositori Azure Container Apps.

Langkah selanjutnya