Azure Developer CLI (azd) 支援部署 Azure 容器應用程式 和 Azure Container App Jobs。 對於 Azure 容器應用程式, azd 提供兩種部署策略:
- 基於圖像的策略。 將容器應用程式設定更新與映像部署分開。
- 版本管理策略。 將兩者合併為單一部署,並支援進階推出模式。
以下章節將說明這兩種策略,以及如何部署容器應用程式工作。
Deploy to Container Apps express (preview)
azd支援基於映像的部署至 Azure 容器應用程式 express(預覽版)。 在azure.yaml中使用現有的containerapp主機;你不需要為 Express 另建一個主機類型:
這很重要
Container Apps express support 需要 azd 1.35.0-beta.1 或更新版本。
services:
web:
host: containerapp
image: mcr.microsoft.com/azuredocs/containerapps-helloworld:latest
docker:
imagePassthrough: true
在你的基礎設施中,建立一個受管理環境,設定 properties.environmentMode 為 Express。 容器應用程式必須參照該環境,並包含與 azure.yaml 中服務名稱相符的 azd-service-name 標籤:
resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2026-07-01' = {
name: 'cae-${environmentName}'
location: location
properties: {
environmentMode: 'Express'
}
}
定義 Microsoft.App/containerApps 資源,設 environmentId 為 containerAppsEnvironment.id。 新增值為web的azd-service-name標籤,使其與在azure.yaml中的服務名稱相符。
在 azd deploy 期間,azd 會偵測父環境的 Express 模式,並更新容器映像檔,無需設定自訂修訂後綴或流量權重。 Express 會自動執行單一修訂版本的滾動更新。
針對 express 使用以映像為基礎的部署策略。 基於修訂的策略不會讓你的部署 Bicep 適用於 express,而 express 也不支援多個修訂或流量分割。 在定義基礎架構前,先檢視 目前 Express 功能可用性與限制。
映像型部署策略
在此策略中,容器應用程式 組態 會在 期間 azd provision建立和更新,而 容器映像 會在 期間更新 azd deploy。
- 容器應用程式定義 (資源、環境變數、健康情況探查等等) 位於布建期間套用的 Bicep 模組 中。
- 只有容器映像檔參照 (
containers[0].image) 在部署期間變更。
修訂行為
對應用程式設定或映像的每次變更都會觸發新的修訂:
| Step | Command | 將變更套用至 | 註釋 |
|---|---|---|---|
| 1 | azd provision |
環境變數、資源、掛載、探測器、負載平衡器 | 建立新版本 |
| 2 | azd deploy |
容器映像 | 建立另一個修訂 |
每個修訂都會在 Container Apps 環境中配置額外的複本,這可能會暫時增加資源使用量和成本。
備註
此策略不支援進階推出模式,例如藍綠或金絲雀。
設定映像型部署
若要確保 azd provision 更新現有的容器應用程式,而不會覆寫最新部署的映像,請執行 更新插入 作業。 此模式由 AVM container-app-upsert 模組實作,包含兩個步驟:
在您的
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}" } } }在 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安全地 更新插入 容器應用程式資源 (如果存在則更新,如果沒有則建立) ,而不需要手動檢查。小提示
請確保
apiVersion在azure.yaml內與 Bicep 模組的apiVersion對齊以避免不符。
修訂型部署策略
在此策略中,容器應用程式定義和映像會在azd deploy期間一起部署。
容器應用程式設定位於部署期間套用的 專用 Bicep 模組 中。
環境變數、映像、資源和負載平衡設定的變更會以 單一修訂的形式推出。
小提示
此策略支援藍綠、金絲雀和其他進階推出模式。
設定修訂型部署
建立基礎設施檔案以規劃您的服務容器應用程式的部署,例如
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' } } }在部署時建立參數檔案(例如
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 |
部署容器應用程式作業
除了容器應用程式外, azd 還支援部署 Azure 容器應用程式工作(Microsoft.App/jobs)。 容器應用程式工作設計用於執行至完成的任務,如批次處理、排程任務或事件驅動工作。
備註
容器應用程式工作使用與host: containerapp中的azure.yaml相同的設定。 不需要新的主機類型。 Bicep 範本會根據你定義的資源類型,決定是 azd 配置容器應用程式還是容器應用程式工作。
運作方式
當 azd 發現一個標籤為 azd-service-name的作業資源時,它:
- 它會建置並推送 Docker 映像到 Azure 容器登錄檔(與容器應用相同)。
- 透過呼叫容器應用程式工作 API 而非容器應用程式 API,更新該工作的容器映像檔。
- 回傳空端點,因為作業沒有流量入口。
配置容器應用程式工作部署
定義你的工作服務檔案
azure.yaml。 使用host: containerapp和language: docker:name: myapp services: job: host: containerapp language: docker project: ./src/job docker: path: ./Dockerfile context: .建立一個 Bicep 模組來配置
Microsoft.App/jobs資源。 用標籤標記資源azd-service-name,這樣azd才能發現它。 參數與現有資源參考(容器登錄、管理環境、身份)遵循 上述容器應用程式範例的模式: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}': {} } } }這很重要
azd-service-name標籤值必須與你azure.yaml檔案中的服務名稱相符。 這個標籤是如何azd將已配置的資源與你的服務關聯起來。執行
azd up配置並部署。 CLI 會自動偵測標籤資源為容器應用程式作業,並相應地處理部署。
與容器應用程式的主要差異
| 層面 | 容器應用程式 | 容器應用工作 |
|---|---|---|
| 資源類型 | Microsoft.App/containerApps |
Microsoft.App/jobs |
| 入口/端點 | 支援 HTTP 入口 | 無入口(端點空) |
| 執行模型 | 長期營運的服務 | 運行至完成的任務 |
| 觸發類型 | 請求導向 | 手動、排程或事件驅動 |
主機設定 azure.yaml |
host: containerapp |
host: containerapp |