Menyebarkan ke Azure Container Apps menggunakan Azure Developer CLI

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:

  1. Dalam main.parameters.json, tentukan parameter yang merujuk pada variabel SERVICE_{NAME}_RESOURCE_EXISTS yang disediakan oleh azd. Variabel ini ditetapkan secara otomatis oleh azd pada 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}"
        }
      }
    }
    
  2. Dalam file Bicep Anda, referensikan exists parameter untuk mengontrol apakah aplikasi kontainer harus dibuat atau diperbarui. Modul container-app-upsert merangkum 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 apiVersion dalam azure.yaml selaras dengan modul apiVersion Bicep 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

  1. 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'
        }
      }
    }
    
  2. 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_NAME diatur 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 provision sebagai parameter ke azd deploy jika 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:

  1. Membangun dan mengunggah citra Docker ke Azure Container Registry (sama dengan Container Apps).
  2. Memperbarui image kontainer pekerjaan dengan menggunakan Container App Jobs API alih-alih Container Apps API.
  3. Karena tugas tidak memiliki ingress, mengembalikan titik akhir kosong.

Mengonfigurasi penyebaran Pekerjaan Aplikasi Kontainer

  1. Tentukan file azure.yaml untuk layanan pekerjaan Anda. Gunakan host: containerapp dan language: docker:

    name: myapp
    services:
      job:
        host: containerapp
        language: docker
        project: ./src/job
        docker:
          path: ./Dockerfile
          context: .
    
  2. Buat modul Bicep yang menyediakan Microsoft.App/jobs sumber daya. Beri tag sumber daya dengan azd-service-name sehingga azd dapat 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-name tag harus cocok dengan nama layanan dalam file Anda azure.yaml . Tag ini adalah cara azd mengaitkan sumber daya yang disediakan dengan layanan Anda.

  3. Jalankan azd up untuk 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