Tutorial: Menyebarkan pekerjaan berbasis peristiwa dengan Azure Container Apps
Pekerjaan Azure Container Apps memungkinkan Anda menjalankan tugas kontainer yang dijalankan selama durasi dan keluar yang terbatas. 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.
- Buat lingkungan Container Apps untuk menyebarkan aplikasi kontainer Anda
- Buat Antrean Azure Storage untuk mengirim pesan ke aplikasi kontainer
- Membuat gambar kontainer yang menjalankan pekerjaan
- Menyebarkan pekerjaan ke lingkungan Aplikasi Kontainer
- 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:
- Mendapatkan satu pesan dari antrean.
- Mencatat pesan ke log eksekusi pekerjaan.
- Menghapus pesan dari antrean.
- Keluar.
Penting
Scaler memantau panjang antrean untuk menentukan berapa banyak pekerjaan yang akan dimulai. Untuk penskalaan yang akurat, jangan hapus pesan dari antrean hingga eksekusi pekerjaan selesai memprosesnya.
Kode sumber untuk pekerjaan yang Anda jalankan dalam tutorial ini tersedia di repositori GitHub Sampel Azure.
Prasyarat
- Akun Azure dengan langganan aktif.
- Jika Anda tidak memilikinya, Anda dapat membuatnya secara gratis.
- Instal Azure CLI.
- Lihat batasan pekerjaan untuk daftar batasan.
Siapkan
Untuk masuk ke Azure dari CLI, jalankan perintah berikut dan ikuti perintah untuk menyelesaikan proses autentikasi.
az login
Pastikan Anda menjalankan CLI versi terbaru melalui perintah peningkatan.
az upgrade
Instal versi terbaru ekstensi CLI Azure Container Apps.
az extension add --name containerapp --upgrade
Microsoft.App
Daftarkan namespace ,Microsoft.OperationalInsights
, danMicrosoft.Storage
jika Anda belum mendaftarkannya di langganan Azure Anda.az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights az provider register --namespace Microsoft.Storage
Setelah penyiapan Azure CLI selesai, Anda dapat menentukan 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 Azure Container Apps bertindak sebagai batas aman di sekitar aplikasi dan pekerjaan kontainer sehingga mereka dapat berbagi jaringan yang sama dan berkomunikasi satu sama lain.
Buat grup sumber daya menggunakan perintah berikut.
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"
Buat lingkungan Container Apps 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.
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 dan terdiri dari 3 hingga 24 karakter yang hanya berisi angka dan huruf kecil.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:
(SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found. Code: SubscriptionNotFound Message: Subscription <SUBSCRIPTION_ID> was not found.
Pastikan Anda telah mendaftarkan
Microsoft.Storage
namespace layanan di langganan Azure Anda.az provider register --namespace Microsoft.Storage
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)
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 Microsoft Azure Container Registry menggunakan identitas terkelola untuk autentikasi. Jika memungkinkan, gunakan identitas terkelola yang ditetapkan pengguna untuk menarik gambar.
Buat identitas terkelola yang ditetapkan pengguna. Sebelum Anda menjalankan perintah berikut, pilih nama untuk identitas terkelola
\<PLACEHOLDER\>
Anda dan ganti dengan nama.IDENTITY="<YOUR_IDENTITY_NAME>"
az identity create \ --name $IDENTITY \ --resource-group $RESOURCE_GROUP
Dapatkan ID sumber daya identitas.
IDENTITY_ID=$(az identity show \ --name $IDENTITY \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Membangun dan menyebarkan pekerjaan
Untuk menyebarkan pekerjaan, Anda harus terlebih dahulu membangun gambar kontainer untuk pekerjaan dan mendorongnya ke registri. Kemudian, Anda dapat menyebarkan pekerjaan ke lingkungan Container Apps.
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 dan panjangnya 5 hingga 50 karakter yang berisi angka dan huruf kecil saja.Buat registri kontainer.
az acr create \ --name "$CONTAINER_REGISTRY_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku Basic
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 Azure Container Registry (ACR) Anda.
az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"
Jika token ARM diizinkan, perintah akan menghasilkan yang berikut.
{ "status": "enabled" }
status
Jika adalahdisabled
, izinkan token ARM dengan perintah berikut.az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabled
Kode sumber untuk pekerjaan tersedia di GitHub. Jalankan perintah berikut untuk mengkloning repositori dan membangun gambar kontainer di cloud menggunakan
az acr build
perintah .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.
Buat pekerjaan di lingkungan Aplikasi Kontainer.
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 .
Parameter Deskripsi --replica-timeout
Durasi maksimum yang dapat dijalankan replika. --min-executions
Jumlah minimum eksekusi pekerjaan yang akan dijalankan per interval polling. --max-executions
Jumlah maksimum eksekusi pekerjaan yang akan dijalankan per interval polling. --polling-interval
Interval polling untuk mengevaluasi aturan skala. --scale-rule-name
Nama 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 Azure Container Registry, 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, penetapan peran 'acrpull' dibuat untuk identitas secara otomatis. --env-vars
Variabel lingkungan yang digunakan untuk pekerjaan tersebut. Konfigurasi aturan skala menentukan sumber peristiwa untuk dipantau. Ini dievaluasi pada setiap interval polling dan menentukan berapa banyak eksekusi pekerjaan yang akan dipicu. Untuk mempelajari selengkapnya, lihat Mengatur aturan penskalakan.
Pekerjaan berbasis peristiwa sekarang dibuat di lingkungan Aplikasi Kontainer.
Verifikasi penyebaran
Pekerjaan dikonfigurasi untuk mengevaluasi aturan skala setiap 60 detik, yang memeriksa jumlah pesan dalam antrean. Untuk setiap periode evaluasi, ini memulai eksekusi pekerjaan baru untuk setiap pesan dalam antrean, hingga maksimum 10 eksekusi.
Untuk memverifikasi bahwa pekerjaan telah dikonfigurasi dengan benar, Anda dapat mengirim beberapa pesan ke antrean, mengonfirmasi bahwa eksekusi pekerjaan dimulai, dan pesan dicatat ke log eksekusi pekerjaan.
Kirim pesan ke antrean.
az storage message put \ --content "Hello Queue Reader Job" \ --queue-name "$QUEUE_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
Mencantumkan 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 eksekusi pekerjaan dan statusnya adalah
Succeeded
.Jalankan perintah berikut untuk melihat pesan yang dicatat. Perintah ini memerlukan ekstensi Analitik log, jadi terima perintah untuk menginstal ekstensi saat diminta.
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.
Tip
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 sumber daya di luar lingkup artikel ini ada di grup sumber daya yang ditentukan, sumber daya tersebut juga akan dihapus.
az group delete \
--resource-group $RESOURCE_GROUP