Bagikan melalui


Tutorial: Menyebarkan pekerjaan berbasis peristiwa dengan menggunakan Azure Container Apps

Pekerjaan Azure Container Apps memungkinkan Anda menjalankan tugas kontainer yang berjalan selama durasi terbatas lalu berhenti. Anda dapat memicu eksekusi pekerjaan secara manual, sesuai jadwal, atau berdasarkan peristiwa. Pekerjaan paling cocok untuk tugas-tugas seperti pemrosesan data, pembelajaran mesin, pembersihan sumber daya, atau skenario apa pun yang memerlukan sumber daya komputasi sementara tanpa server.

Dalam tutorial ini, Anda mempelajari cara bekerja dengan pekerjaan berbasis peristiwa.

  • Membuat lingkungan Container Apps untuk menyebarkan aplikasi kontainer Anda
  • Membuat antrean Azure Storage untuk mengirim pesan ke aplikasi kontainer
  • Membangun citra kontainer yang menjalankan tugas
  • Memasang tugas ke lingkungan Container Apps
  • Verifikasi bahwa pesan antrean diproses oleh aplikasi kontainer

Pekerjaan yang Anda buat memulai eksekusi untuk setiap pesan yang dikirim ke antrean Azure Storage. Setiap eksekusi pekerjaan menjalankan kontainer yang melakukan langkah-langkah berikut:

  1. Mendapatkan satu pesan dari antrian.
  2. Mencatat pesan ke log eksekusi pekerjaan.
  3. Menghapus pesan dari antrean.
  4. Berhenti.

Penting

Scaler memantau panjang antrean untuk menentukan berapa banyak pekerjaan yang akan dimulai. Untuk penskalaan yang akurat, jangan hapus pesan dari antrean hingga pekerjaan selesai diproses.

Kode sumber untuk pekerjaan yang Anda jalankan dalam tutorial ini tersedia di repositori GitHub Sampel Azure.

Prasyarat

Untuk informasi tentang fitur yang tidak didukung pekerjaan Container Apps, lihat Pembatasan pekerjaan.

Menyiapkan lingkungan

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

    az login
    
  2. Pastikan Anda menjalankan versi terbaru Azure CLI melalui az upgrade perintah .

    az upgrade
    
  3. Instal versi terbaru ekstensi CLI Container Apps.

    az extension add --name containerapp --upgrade
    
  4. Microsoft.AppDaftarkan namespace , Microsoft.OperationalInsights, dan Microsoft.Storage jika belum terdaftar di langganan Azure Anda.

    az provider register --namespace Microsoft.App
    az provider register --namespace Microsoft.OperationalInsights
    az provider register --namespace Microsoft.Storage
    
  5. Tentukan variabel lingkungan yang digunakan di seluruh artikel ini.

    RESOURCE_GROUP="jobs-quickstart"
    LOCATION="northcentralus"
    ENVIRONMENT="env-jobs-quickstart"
    JOB_NAME="my-job"
    

Membuat lingkungan Aplikasi Kontainer

Lingkungan Container Apps bertindak sebagai batas isolasi di sekitar aplikasi kontainer dan pekerjaan sehingga mereka dapat berbagi jaringan yang sama dan berkomunikasi satu sama lain.

  1. Buat grup sumber daya dengan menggunakan perintah berikut.

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. Buat lingkungan Container Apps dengan menggunakan perintah berikut.

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

Menyiapkan antrean penyimpanan

Pekerjaan menggunakan antrean Azure Storage untuk menerima pesan. Di bagian ini, Anda membuat akun penyimpanan dan antrean.

  1. Tentukan nama untuk akun penyimpanan Anda.

    STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"
    QUEUE_NAME="myqueue"
    

    Ganti <STORAGE_ACCOUNT_NAME> dengan nama unik untuk akun penyimpanan Anda. Nama akun penyimpanan harus unik dalam Azure. Panjangnya harus antara 3 dan 24 karakter dan hanya berisi angka dan huruf kecil.

  2. Membuat akun Azure Storage.

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

    Jika perintah ini mengembalikan kesalahan berikut, pastikan Anda telah mendaftarkan namespace Microsoft.Storage di langganan Azure Anda.

    (SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found.
    Code: SubscriptionNotFound
    Message: Subscription <SUBSCRIPTION_ID> was not found.
    

    Gunakan perintah ini untuk mendaftarkan namespace:

    az provider register --namespace Microsoft.Storage
    
  3. Simpan string koneksi antrean ke dalam variabel:

    QUEUE_CONNECTION_STRING=$(az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv)
    
  4. Buat antrean pesan:

    az storage queue create \
        --name "$QUEUE_NAME" \
        --account-name "$STORAGE_ACCOUNT_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    

Membuat identitas terkelola yang ditetapkan pengguna

Untuk menghindari penggunaan kredensial administratif, tarik gambar dari repositori privat di Azure Container Registry. Gunakan identitas terkelola untuk autentikasi. Jika memungkinkan, gunakan identitas terkelola yang ditetapkan pengguna untuk menarik gambar.

  1. Buat identitas terkelola yang ditetapkan pengguna. Sebelum Anda menjalankan perintah berikut, pilih nama untuk identitas terkelola Anda dan buat variabel berikut:

    IDENTITY="<YOUR_IDENTITY_NAME>"
    
    az identity create \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP
    
  2. Dapatkan ID sumber daya identitas:

    IDENTITY_ID=$(az identity show \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    

Membangun dan menerapkan tugas

Untuk menyebarkan pekerjaan, Anda harus terlebih dahulu membangun image kontainer dan mengunggahnya ke registry. Anda kemudian dapat menyebarkan pekerjaan ke lingkungan Aplikasi Kontainer.

  1. Tentukan nama untuk gambar dan registri kontainer Anda:

    CONTAINER_IMAGE_NAME="queue-reader-job:1.0"
    CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
    

    Ganti <CONTAINER_REGISTRY_NAME> dengan nama unik untuk registri kontainer Anda. Nama registri kontainer harus unik dalam Azure. Panjangnya harus antara 5 dan 50 karakter dan hanya berisi angka dan huruf kecil.

  2. Buat registri kontainer:

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic
    
  3. Registri kontainer Anda harus mengizinkan token audiens Azure Resource Manager (ARM) untuk autentikasi agar dapat menggunakan identitas terkelola untuk menarik gambar.

    Gunakan perintah berikut untuk memeriksa apakah token ARM diizinkan untuk mengakses registri kontainer Azure Anda:

    az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"
    

    Jika token ARM diizinkan, Anda akan melihat output berikut:

    {
      "status": "enabled"
    }
    

    Jika status adalah disabled, izinkan token ARM dengan menggunakan perintah berikut:

    az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabled
    
  4. Kode sumber untuk pekerjaan tersedia di GitHub. Jalankan perintah berikut untuk mengkloning repositori dan membangun gambar kontainer di cloud:

    az acr build \
        --registry "$CONTAINER_REGISTRY_NAME" \
        --image "$CONTAINER_IMAGE_NAME" \
        "https://github.com/Azure-Samples/container-apps-event-driven-jobs-tutorial.git"
    

    Gambar sekarang tersedia di registri kontainer.

  5. Buat pekerjaan di lingkungan Container Apps:

    az containerapp job create \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --environment "$ENVIRONMENT" \
        --trigger-type "Event" \
        --replica-timeout "1800" \
        --min-executions "0" \
        --max-executions "10" \
        --polling-interval "60" \
        --scale-rule-name "queue" \
        --scale-rule-type "azure-queue" \
        --scale-rule-metadata "accountName=$STORAGE_ACCOUNT_NAME" "queueName=$QUEUE_NAME" "queueLength=1" \
        --scale-rule-auth "connection=connection-string-secret" \
        --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
        --cpu "0.5" \
        --memory "1Gi" \
        --secrets "connection-string-secret=$QUEUE_CONNECTION_STRING" \
        --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io" \
        --mi-user-assigned "$IDENTITY_ID" \
        --registry-identity "$IDENTITY_ID" \
        --env-vars "AZURE_STORAGE_QUEUE_NAME=$QUEUE_NAME" "AZURE_STORAGE_CONNECTION_STRING=secretref:connection-string-secret"
    

    Tabel berikut ini menjelaskan parameter kunci yang digunakan dalam perintah sebelumnya.

    Parameter Deskripsi
    --replica-timeout Durasi maksimum yang dapat dijalankan replika.
    --min-executions Jumlah minimum eksekusi pekerjaan yang akan dijalankan per interval pemantauan.
    --max-executions Jumlah maksimum eksekusi tugas yang akan dijalankan per interval pemungutan.
    --polling-interval Interval polling yang digunakan untuk mengevaluasi aturan skala.
    --scale-rule-name Nama dari aturan skala.
    --scale-rule-type Jenis aturan skala yang akan digunakan.
    --scale-rule-metadata Metadata untuk aturan skala.
    --scale-rule-auth Autentikasi untuk aturan skala.
    --secrets Rahasia yang digunakan untuk pekerjaan tersebut.
    --registry-server Server registri kontainer yang akan digunakan untuk pekerjaan tersebut. Untuk registri kontainer Azure, perintah secara otomatis mengonfigurasi autentikasi.
    --mi-user-assigned ID sumber daya identitas terkelola yang ditetapkan pengguna untuk ditetapkan ke pekerjaan.
    --registry-identity ID sumber daya identitas terkelola untuk mengautentikasi dengan server registri alih-alih menggunakan nama pengguna dan kata sandi. Jika memungkinkan, penugasan peran acrpull secara otomatis dibuat untuk identitas.
    --env-vars Variabel lingkungan yang digunakan untuk pekerjaan tersebut.

    Konfigurasi aturan skala menentukan sumber peristiwa untuk dipantau. Penilaian dilakukan pada setiap interval polling untuk menentukan berapa banyak pelaksanaan tugas yang akan dipicu. Untuk informasi selengkapnya, lihat Mengatur aturan penskalaan.

Pekerjaan berbasis peristiwa sekarang dibuat di lingkungan Aplikasi Kontainer.

Verifikasi penerapan

Tugas dikonfigurasi untuk mengevaluasi aturan skala setiap 60 detik. Evaluasi ini memeriksa jumlah pesan dalam antrean. Untuk setiap periode evaluasi, sistem memulai pelaksanaan tugas baru untuk setiap pesan dalam antrean, sampai dengan maksimum 10 pelaksanaan.

Untuk memverifikasi bahwa pekerjaan dikonfigurasi dengan benar, Anda dapat mengirim beberapa pesan ke antrean dan mengonfirmasi bahwa eksekusi pekerjaan dimulai dan bahwa pesan dicatat ke log eksekusi pekerjaan.

  1. Kirim pesan ke antrean:

    az storage message put \
        --content "Hello Queue Reader Job" \
        --queue-name "$QUEUE_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    
  2. Cantumkan eksekusi pekerjaan:

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output json
    

    Karena pekerjaan dikonfigurasi untuk mengevaluasi aturan skala setiap 60 detik, mungkin perlu waktu hingga satu menit penuh agar eksekusi pekerjaan dimulai. Ulangi perintah hingga Anda melihat pelaksanaan pekerjaan dan statusnya adalah Succeeded.

  3. Jalankan perintah berikut untuk melihat pesan yang dicatat. Perintah ini memerlukan ekstensi Analitik log, jadi terima perintah untuk menginstal ekstensi.

    LOG_ANALYTICS_WORKSPACE_ID=$(az containerapp env show --name $ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --output tsv)
    
    az monitor log-analytics query \
        --workspace "$LOG_ANALYTICS_WORKSPACE_ID" \
        --analytics-query "ContainerAppConsoleLogs_CL | where ContainerJobName_s == '$JOB_NAME' | order by _timestamp_d asc"
    

    ContainerAppConsoleLogs_CL Hingga tabel siap, perintah mengembalikan kesalahan: BadArgumentError: The request had some invalid properties. Silakan tunggu beberapa menit, lalu coba kembali.

Tips

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

Membersihkan sumber daya

Setelah selesai, jalankan perintah berikut untuk menghapus grup sumber daya yang berisi sumber daya Container Apps Anda.

Perhatian

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

az group delete \
    --resource-group $RESOURCE_GROUP

Langkah selanjutnya