Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Azure Developer CLI (azd) mendukung penyebaran Azure Container Apps dan Azure Container App Jobs. Untuk Azure Container Apps, azd menawarkan dua strategi penyebaran:
- Strategi berbasis gambar. Memisahkan pembaruan konfigurasi aplikasi kontainer dari penyebaran gambar.
- Strategi berbasis revisi. Menggabungkan keduanya ke dalam satu penerapan dan mendukung pola penerapan tingkat lanjut.
Bagian berikut menjelaskan kedua strategi, bersama dengan cara mengimplementasikan Container App Jobs.
Strategi penyebaran berbasis gambar
Dalam strategi ini, konfigurasi aplikasi kontainer dibuat dan diperbarui selama azd provision, sementara gambar kontainer diperbarui selama azd deploy.
- Definisi aplikasi kontainer (sumber daya, variabel lingkungan, pemeriksaan kesehatan, dan sebagainya) berada dalam modul Bicep yang diterapkan selama penyediaan.
- Hanya referensi gambar kontainer (
containers[0].image) yang berubah selama penyebaran.
Tingkah laku revisi
Setiap perubahan pada konfigurasi atau gambar aplikasi memicu revisi baru:
| Step | Command | Menerapkan perubahan pada | Catatan |
|---|---|---|---|
| 1 | azd provision |
Variabel lingkungan, sumber daya, pemasangan, pemeriksaan, load balancer | Membuat revisi baru |
| 2 | azd deploy |
Gambar kontainer | Membuat revisi lain |
Setiap revisi mengalokasikan replika tambahan di lingkungan Container Apps, yang dapat meningkatkan penggunaan dan biaya sumber daya untuk sementara.
Nota
Pola peluncuran tingkat lanjut, seperti biru-hijau atau kenari, tidak didukung dalam strategi ini.
Mengonfigurasi penyebaran berbasis gambar
Untuk memastikan bahwa azd provision memperbarui aplikasi kontainer yang ada tanpa menimpa citra terbaru yang disebarkan, lakukan operasi upsert. Pola ini diimplementasikan oleh modul AVM container-app-upsert dan terdiri dari dua langkah:
Dalam
main.parameters.json, tentukan parameter yang merujuk pada variabelSERVICE_{NAME}_RESOURCE_EXISTSyang disediakan oleh azd. Variabel ini ditetapkan secara otomatis olehazdpada saat penyediaan untuk menunjukkan apakah sumber daya sudah ada.{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "environmentName": { "value": "${AZURE_ENV_NAME}" }, "location": { "value": "${AZURE_LOCATION}" }, // ... other parameters "apiExists": { "value": "${SERVICE_API_RESOURCE_EXISTS}" } } }Dalam file Bicep Anda, referensikan
existsparameter untuk mengontrol apakah aplikasi kontainer harus dibuat atau diperbarui. Modulcontainer-app-upsertmerangkum logika ini secara internal.@description('Indicates whether the container app resource already exists.') param apiExists bool module api 'br/public:avm/ptn/azd/container-app-upsert:0.1.2' = { name: 'api' params: { name: 'my-api' location: location containerAppsEnvironmentName: containerAppsEnvironment.name containerRegistryName: containerRegistry.name imageName: !empty(apiImageName) ? apiImageName : '' exists: apiExists env: [ { name: 'MONGODB_CONNECTION_STRING' value: mongodb.outputs.connectionString } ] targetPort: 3100 } }Pendekatan ini memungkinkan
azd provisionmelakukan upsert (memperbarui jika sudah ada, membuat jika belum) sumber daya aplikasi kontainer dengan aman tanpa pemeriksaan manual.Petunjuk / Saran
Jaga agar
apiVersiondalamazure.yamlselaras dengan modulapiVersionBicep untuk menghindari ketidakcocokan.
Strategi penyebaran berbasis revisi
Dalam strategi ini, definisi aplikasi kontainer dan citra disebarkan secara bersamaan selama .
Konfigurasi aplikasi kontainer berada dalam modul Bicep khusus yang diterapkan selama penyebaran.
Perubahan pada variabel lingkungan, gambar, sumber daya, dan pengaturan penyeimbangan beban diluncurkan sebagai satu revisi.
Petunjuk / Saran
Strategi ini mendukung pola peluncuran biru-hijau, canary, dan pola peluncuran lanjutan lainnya.
Mengonfigurasi penyebaran berbasis revisi
Tentukan penyebaran aplikasi kontainer dengan membuat file infra untuk layanan Anda, seperti
infra/api.bicep. Anda dapat menentukan aplikasi kontainer dengan menggunakan modul berbasis AVM atau dengan menentukan sumber daya secara langsung:@description('Unique environment name used for resource naming.') param environmentName string @description('Primary location for all resources.') param location string param containerRegistryName string param containerAppsEnvironmentName string param imageName string param identityId string resource containerRegistry 'Microsoft.ContainerRegistry/registries@2023-01-01-preview' existing = { name: containerRegistryName } resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2022-03-01' existing = { name: containerAppsEnvironmentName } module api 'br/public:avm/res/app/container-app:0.8.0' = { name: 'api' params: { name: 'api' ingressTargetPort: 80 scaleMinReplicas: 1 scaleMaxReplicas: 10 containers: [ { name: 'main' image: imageName resources: { cpu: json('0.5') memory: '1.0Gi' } } ] managedIdentities: { systemAssigned: false userAssignedResourceIds: [identityId] } registries: [ { server: containerRegistry.properties.loginServer identity: identityId } ] environmentResourceId: containerAppsEnvironment.id location: location tags: { 'azd-env-name': environmentName 'azd-service-name': 'api' } } }Berikan parameter pada waktu penyebaran dengan membuat file parameter (misalnya
api.parameters.json):{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "environmentName": { "value": "${AZURE_ENV_NAME}" }, "location": { "value": "${AZURE_LOCATION}" }, "containerRegistryName": { "value": "${AZURE_CONTAINER_REGISTRY_NAME}" }, "containerAppsEnvironmentName": { "value": "${AZURE_CONTAINER_ENVIRONMENT_NAME}" }, "imageName": { "value": "${SERVICE_API_IMAGE_NAME}" }, "identityId": { "value": "${SERVICE_API_IDENTITY_ID}" } } }Nota
SERVICE_API_IMAGE_NAMEdiatur secara dinamis selama penyebaran dan bukan bagian dari output provisi.Saat Anda menjalankan
azd deploy, revisi aplikasi kontainer diterapkan menggunakan definisi sumber daya di atas.Petunjuk / Saran
Teruskan output tambahan dari
azd provisionsebagai parameter keazd deployjika aplikasi kontainer Anda mereferensikan sumber daya lain yang disediakan.
Ringkasan perbandingan
| Aspek | Berbasis gambar | Berbasis revisi |
|---|---|---|
| Perintah Pembaruan | azd provision + azd deploy |
azd deploy hanya |
| Jenis peluncuran | Dua revisi | Revisi tunggal |
| Kontrol pendistribusian | Dikelola oleh azd |
Dapat dikonfigurasi (biru-hijau, kenari) |
| Skenario penggunaan | Lingkungan sederhana | Penyebaran tingkat lanjut |
| Lokasi definisi aplikasi kontainer | Bicep pada saat provisi | Penyebaran saat Bicep |
Menyebarkan Pekerjaan Aplikasi Kontainer
Selain Container Apps, azd mendukung penyebaran Azure Container App Jobs (Microsoft.App/jobs). Pekerjaan Aplikasi Kontainer dirancang untuk tugas yang berjalan hingga selesai, seperti pemrosesan batch, tugas terjadwal, atau pekerjaan berbasis peristiwa.
Nota
Pekerjaan pada Aplikasi Kontainer menggunakan pengaturan yang sama di host: containerappazure.yaml. Tidak diperlukan jenis host baru. Templat Bicep menentukan apakah azd menyediakan Aplikasi Kontainer atau Pekerjaan Aplikasi Kontainer berdasarkan jenis sumber daya yang Anda tentukan.
Cara kerjanya
Saat azd menemukan sumber daya pekerjaan yang ditandai dengan azd-service-name, itu melakukan langkah berikut:
- Membangun dan mengunggah citra Docker ke Azure Container Registry (sama dengan Container Apps).
- Memperbarui image kontainer pekerjaan dengan menggunakan Container App Jobs API alih-alih Container Apps API.
- Karena tugas tidak memiliki ingress, mengembalikan titik akhir kosong.
Mengonfigurasi penyebaran Pekerjaan Aplikasi Kontainer
Tentukan file
azure.yamluntuk layanan pekerjaan Anda. Gunakanhost: containerappdanlanguage: docker:name: myapp services: job: host: containerapp language: docker project: ./src/job docker: path: ./Dockerfile context: .Buat modul Bicep yang menyediakan
Microsoft.App/jobssumber daya. Beri tag sumber daya denganazd-service-namesehinggaazddapat menemukannya. Parameter dan referensi sumber daya yang ada (registri kontainer, lingkungan terkelola, identitas) mengikuti pola yang sama dengan contoh Aplikasi Kontainer di atas:resource job 'Microsoft.App/jobs@2025-02-02-preview' = { name: 'job' location: location tags: { 'azd-env-name': environmentName 'azd-service-name': 'job' } properties: { environmentId: containerAppsEnvironment.id configuration: { replicaTimeout: 300 replicaRetryLimit: 1 triggerType: 'Manual' registries: [ { server: containerRegistry.properties.loginServer identity: identityId } ] } template: { containers: [ { image: imageName name: 'main' resources: { cpu: json('0.5') memory: '1.0Gi' } } ] } } identity: { type: 'UserAssigned' userAssignedIdentities: { '${identityId}': {} } } }Penting
Nilai
azd-service-nametag harus cocok dengan nama layanan dalam file Andaazure.yaml. Tag ini adalah caraazdmengaitkan sumber daya yang disediakan dengan layanan Anda.Jalankan
azd upuntuk memprovisikan dan menyebarkan. CLI secara otomatis mendeteksi bahwa sumber daya yang ditandai adalah tugas Aplikasi Kontainer dan menangani proses penerapan sesuai.
Perbedaan utama dari Container Apps
| Aspek | Container Apps | Tugas Aplikasi Container |
|---|---|---|
| Jenis sumber daya | Microsoft.App/containerApps |
Microsoft.App/jobs |
| Ingress/titik akhir | Mendukung HTTP ingress | Tidak ada ingress (titik akhir kosong) |
| Model Pelaksanaan | Layanan yang berjalan lama | Tugas yang harus diselesaikan tanpa interupsi |
| Jenis pemicu | Berbasis permintaan | Manual, terjadwal, atau berbasis peristiwa |
Pengaturan host di azure.yaml |
host: containerapp |
host: containerapp |
Sumber daya tambahan
- Gambaran umum Azure Container Apps
- Gambaran umum Pekerjaan Azure Container Apps
- Referensi Azure Container Apps Bicep
- Referensi Pekerjaan untuk Aplikasi Kontainer Azure Bicep
- Gambaran umum .NET Aspire
- Templat aplikasi Todo (menggunakan berbasis gambar)