共用方式為


使用 Azure 開發人員 CLI 部署至 Azure 容器應用程式

Azure 開發人員 CLI (azd) 支援 Azure 容器應用程式的兩種部署策略:

  • 基於圖像的策略。 將容器應用程式設定更新與映像部署分開。
  • 版本管理策略。 將兩者合併為單一部署,並支援進階推出模式。

以下各節說明這兩種策略。

映像型部署策略

在此策略中,容器應用程式 組態 會在 期間 azd provision建立和更新,而 容器映像 會在 期間更新 azd deploy

  • 容器應用程式定義 (資源、環境變數、健康情況探查等等) 位於布建期間套用的 Bicep 模組 中。
  • 只有容器映像檔參照 (containers[0].image) 在部署期間變更。

修訂行為

對應用程式設定或映像的每次變更都會觸發新的修訂:

Step Command 將變更套用至 註釋
1 azd provision 環境變數、資源、掛載、探測器、負載平衡器 建立新版本
2 azd deploy 容器映像 建立另一個修訂

每個修訂都會在 Container Apps 環境中配置額外的複本,這可能會暫時增加資源使用量和成本。

備註

此策略不支援進階推出模式,例如藍綠或金絲雀。

設定映像型部署

若要確保 azd provision 更新現有的容器應用程式,而不會覆寫最新部署的映像,請執行 更新插入 作業。 此模式由 AVM container-app-upsert 模組實作,包含兩個步驟:

  1. 在您的 main.parameters.json中,定義參考 azd 提供的變數 SERVICE_{NAME}_RESOURCE_EXISTS的參數。 此變數會在佈建時由 azd 自動設定,以指出資源是否已存在。

    {
      "$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. 在 Bicep 檔案中,參考參數 exists 來控制是否應該建立或更新容器應用程式。 該 container-app-upsert 模塊在內部封裝了這個邏輯。

    @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
      }
    }
    

    此方法可讓您 azd provision 安全地 更新插入 容器應用程式資源 (如果存在則更新,如果沒有則建立) ,而不需要手動檢查。

    小提示

    請確保 apiVersionazure.yaml 內與 Bicep 模組的 apiVersion 對齊以避免不符。

修訂型部署策略

在此策略中,容器應用程式定義映像會在azd deploy期間一起部署。

  • 容器應用程式設定位於部署期間套用的 專用 Bicep 模組 中。

  • 環境變數、映像、資源和負載平衡設定的變更會以 單一修訂的形式推出。

    小提示

    此策略支援藍綠、金絲雀和其他進階推出模式。

設定修訂型部署

  1. 建立基礎設施檔案以規劃您的服務容器應用程式的部署,例如 infra/api.bicep。 您可以使用 AVM 型模組直接定義資源來定義容器應用程式:

    @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. 在部署時建立參數檔案(例如 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}" }
      }
    }
    

    備註

    SERVICE_API_IMAGE_NAME 在部署期間動態設定,而且不是佈建輸出的一部分。

    當您執行 azd deploy時,會使用上述資源定義套用容器應用程式修訂。

    小提示

    將任何其他輸出作為參數從 azd provision 傳遞至 azd deploy 如果您的容器應用程式有參考其他佈建的資源。

比較總結

層面 基於圖像 修訂為基礎
更新命令 azd provision + azd deploy 僅限 azd deploy
發佈類型 兩次修訂 單一修訂
轉出控制項 管理單位 azd 可設定 (藍綠、金絲雀)
用例 簡單的環境 進階部署
容器應用程式定義位置 部署時間 Bicep 部署時間 Bicep

其他資源