共用方式為


Azure 容器應用程式 ARM 和 YAML 範本規格

Azure Container Apps 部署是由 Azure Resource Manager (ARM) 範本所提供。 某些 Container Apps CLI 命令也支援使用 YAML 範本來指定資源。

本文包含適用於常用容器應用程式資源的 ARM 和 YAML 設定範例。 如需容器應用程式資源的完整清單,請參閱 Container Apps 的 Azure Resource Manager 範本。 本文所列的程序代碼僅供範例之用。 如需完整的架構和類型資訊,請參閱必要 API 版本的 JSON 定義。

API 版本

Azure Container Apps 的最新管理 API 版本如下:

若要深入瞭解 API 版本之間的差異,請參閱 Microsoft.App 變更記錄

更新 API 版本

若要在 ARM 或 Bicep 中使用特定 API 版本,請更新範本中參考的版本。 若要在 Azure CLI 或 Azure PowerShell 中使用最新的 API 版本,請將它們更新為最新版本。

執行下列命令來更新 Azure CLI 和 Azure Container Apps 擴充功能:

az upgrade
az extension add -n containerapp --upgrade

若要更新 Azure PowerShell,請參閱 如何安裝 Azure PowerShell

若要以程序設計方式使用最新的 API 版本管理 Azure Container Apps,請使用最新版的管理 SDK:

容器應用程式環境

下表描述 Container Apps 環境資源中常用的屬性。 如需屬性的完整清單,請參閱 Azure Container Apps REST API 參考

資源

Container Apps 環境資源包含下列屬性:

屬性 說明 資料類型 唯讀
daprAIInstrumentationKey Dapr 所使用的 Application Insights 檢測密鑰。 字串
appLogsConfiguration 環境的記錄設定。 物體
peerAuthentication 如何啟用 mTLS 加密。 物體

範例

下列範例 ARM 範本代碼段會部署 Container Apps 環境。

注意

建立容器應用程式環境的命令不支援 YAML 組態輸入。

{
  "location": "East US",
  "properties": {
    "appLogsConfiguration": {
      "logAnalyticsConfiguration": {
        "customerId": "string",
        "sharedKey": "string"
      }
    },
    "zoneRedundant": true,
    "vnetConfiguration": {
      "infrastructureSubnetId": "/subscriptions/<subscription_id>/resourceGroups/RGName/providers/Microsoft.Network/virtualNetworks/VNetName/subnets/subnetName1"
    },
    "customDomainConfiguration": {
      "dnsSuffix": "www.my-name.com",
      "certificateValue": "Y2VydA==",
      "certificatePassword": "1234"
    },
    "workloadProfiles": [
      {
        "name": "My-GP-01",
        "workloadProfileType": "GeneralPurpose",
        "minimumCount": 3,
        "maximumCount": 12
      },
      {
        "name": "My-MO-01",
        "workloadProfileType": "MemoryOptimized",
        "minimumCount": 3,
        "maximumCount": 6
      },
      {
        "name": "My-CO-01",
        "workloadProfileType": "ComputeOptimized",
        "minimumCount": 3,
        "maximumCount": 6
      },
      {
        "name": "My-consumption-01",
        "workloadProfileType": "Consumption"
      }
    ],
    "infrastructureResourceGroup": "myInfrastructureRgName"
  }
}

容器應用程式

下表描述容器應用程式資源中常用的屬性。 如需屬性的完整清單,請參閱 Azure Container Apps REST API 參考

資源

容器應用程式資源的 properties 物件包含下列屬性:

屬性 說明 資料類型 唯讀
provisioningState 長時間執行作業的狀態,例如,建立新的容器修訂時。 可能的值包括:布建、布建、失敗。 檢查應用程式是否已啟動並執行。 字串 是的
environmentId 容器應用程式的環境標識碼。 這是建立容器應用程式的必要屬性。 如果您使用 YAML,則可以改用 --environment Azure CLI 中的 選項來指定環境識別碼。 字串
latestRevisionName 最新修訂的名稱。 字串 是的
latestRevisionFqdn 最新的修訂 URL。 字串 是的

environmentId 採用下列格式:

/subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/environmentId/<ENVIRONMENT_NAME>

在此範例中,您會將值放在佔位符標記中,並 <> 括住方括弧。

properties.configuration

資源的 properties.configuration 物件包含下列屬性:

屬性 說明 資料類型
activeRevisionsMode 設定為 single 會自動停用舊的修訂,且只會讓最新的修訂保持作用中。 設定為 multiple 可讓您維護多個修訂。 字串
secrets 定義容器應用程式中的秘密值。 物體
ingress 對象,定義容器應用程式的公用輔助功能組態。 物體
registries 參考私人容器登錄認證的組態物件。 以 secretref 參考秘密組態物件定義的專案。 物體
dapr 定義 容器應用程式的 Dapr 設定的組態物件。 物體

configuration 區段所做的變更是 應用程式範圍變更,不會觸發新的修訂。

properties.template

資源的 properties.template 物件包含下列屬性:

屬性 說明 資料類型
revisionSuffix 修訂的易記名稱。 這個值必須是唯一的,因為運行時間會拒絕與現有修訂名稱後綴值的任何衝突。 字串
containers 定義容器應用程式中包含哪些容器映像的組態物件。 物體
scale 定義容器應用程式的調整規則的組態物件。 物體

template 區段所做的變更是 修訂範圍變更,這會觸發新的修訂。

範例

如需健康情況探查的詳細資訊,請參閱 Azure Container Apps 中的健康情況探查。

下列範例 ARM 範本代碼段會部署容器應用程式。

{
  "identity": {
    "userAssignedIdentities": {
      "/subscriptions/<subscription_id>/resourcegroups/my-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-user": {
      }
    },
    "type": "UserAssigned"
  },
  "properties": {
    "environmentId": "/subscriptions/<subscription_id>/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube",
    "workloadProfileName": "My-GP-01",
    "configuration": {
      "ingress": {
        "external": true,
        "targetPort": 3000,
        "customDomains": [
          {
            "name": "www.my-name.com",
            "bindingType": "SniEnabled",
            "certificateId": "/subscriptions/<subscription_id>/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube/certificates/my-certificate-for-my-name-dot-com"
          },
          {
            "name": "www.my-other-name.com",
            "bindingType": "SniEnabled",
            "certificateId": "/subscriptions/<subscription_id>/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube/certificates/my-certificate-for-my-other-name-dot-com"
          }
        ],
        "traffic": [
          {
            "weight": 100,
            "revisionName": "testcontainerApp0-ab1234",
            "label": "production"
          }
        ],
        "ipSecurityRestrictions": [
          {
            "name": "Allow work IP A subnet",
            "description": "Allowing all IP's within the subnet below to access containerapp",
            "ipAddressRange": "192.168.1.1/32",
            "action": "Allow"
          },
          {
            "name": "Allow work IP B subnet",
            "description": "Allowing all IP's within the subnet below to access containerapp",
            "ipAddressRange": "192.168.1.1/8",
            "action": "Allow"
          }
        ],
        "stickySessions": {
          "affinity": "sticky"
        },
        "clientCertificateMode": "accept",
        "corsPolicy": {
          "allowedOrigins": [
            "https://a.test.com",
            "https://b.test.com"
          ],
          "allowedMethods": [
            "GET",
            "POST"
          ],
          "allowedHeaders": [
            "HEADER1",
            "HEADER2"
          ],
          "exposeHeaders": [
            "HEADER3",
            "HEADER4"
          ],
          "maxAge": 1234,
          "allowCredentials": true
        }
      },
      "dapr": {
        "enabled": true,
        "appPort": 3000,
        "appProtocol": "http",
        "httpReadBufferSize": 30,
        "httpMaxRequestSize": 10,
        "logLevel": "debug",
        "enableApiLogging": true,
        "appHealth": {
          "enabled": true,
          "path": "/health",
          "probeIntervalSeconds": 3,
          "probeTimeoutMilliseconds": 1000,
          "threshold": 3,
        },
        "maxConcurrency": 10
      },
      "maxInactiveRevisions": 10,
      "service": {
        "type": "redis"
      }
    },
    "template": {
      "containers": [
        {
          "image": "repo/testcontainerApp0:v1",
          "name": "testcontainerApp0",
          "probes": [
            {
              "type": "Liveness",
              "httpGet": {
                "path": "/health",
                "port": 8080,
                "httpHeaders": [
                  {
                    "name": "Custom-Header",
                    "value": "Awesome"
                  }
                ]
              },
              "initialDelaySeconds": 3,
              "periodSeconds": 3
            }
          ],
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            },
            {
              "mountPath": "/myfiles",
              "volumeName": "azure-files-volume"
            },
            {
              "mountPath": "/mysecrets",
              "volumeName": "mysecrets"
            }
          ],
          "env": [
            {
              "name": "non-secret-env-var",
              "value": "non-secret env var value"
            },
            {
              "name": "secret-env-var",
              "secretRef": "mysecret"
            }
          ]
        }
      ],
      "initContainers": [
        {
          "image": "repo/testcontainerApp0:v4",
          "name": "testinitcontainerApp0",
          "resources": {
            "cpu": 0.2,
            "memory": "100Mi"
          },
          "command": [
            "/bin/sh"
          ],
          "args": [
            "-c",
            "while true; do echo hello; sleep 10;done"
          ],
          "env": [
            {
              "name": "non-secret-env-var",
              "value": "non-secret env var value"
            },
            {
              "name": "secret-env-var",
              "secretRef": "mysecret"
            }
          ]
        }
      ],
      "scale": {
        "minReplicas": 1,
        "maxReplicas": 5,
        "rules": [
          {
            "name": "httpscalingrule",
            "custom": {
              "type": "http",
              "metadata": {
                "concurrentRequests": "50"
              }
            }
          }
        ]
      },
      "volumes": [
        {
          "name": "myempty",
          "storageType": "EmptyDir"
        },
        {
          "name": "azure-files-volume",
          "storageType": "AzureFile",
          "storageName": "myazurefiles"
        },
        {
          "name": "mysecrets",
          "storageType": "Secret",
          "secrets": [
            {
              "secretRef": "mysecret",
              "path": "mysecret.txt"
            }
          ]
        }
      ],
      "serviceBinds": [
        {
          "serviceId": "/subscriptions/<subscription_id>/resourceGroups/rg/providers/Microsoft.App/containerApps/redisService",
          "name": "redisService"
        }
      ]
    }
  }
}

容器應用程式作業

下表描述 Container Apps 作業資源中常用的屬性。 如需屬性的完整清單,請參閱 Azure Container Apps REST API 參考

資源

Container Apps 作業資源的 properties 物件包含下列屬性:

屬性 說明 資料類型 唯讀
environmentId 容器應用程式作業的環境標識碼。 建立 Container Apps 作業需要這個屬性。 如果您使用 YAML,則可以改用 --environment Azure CLI 中的 選項來指定環境識別碼。 字串

environmentId 採用下列格式:

/subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/environmentId/<ENVIRONMENT_NAME>

在此範例中,您會將值放在佔位符標記中,並 <> 括住方括弧。

properties.configuration

資源的 properties.configuration 物件包含下列屬性:

屬性 說明 資料類型
triggerType Container Apps 作業的觸發程序類型。 如需每個觸發程式類型的特定組態,請參閱 作業觸發程序類型 字串
replicaTimeout Container Apps 作業的逾時以秒為單位。 整數
replicaRetryLimit 重試 Container Apps 作業的次數。 整數

properties.template

資源的 properties.template 物件包含下列屬性:

屬性 說明 資料類型
containers 定義作業中包含哪些容器映像的組態物件。 物體
scale 定義作業縮放規則的組態物件。 物體

範例

下列範例 ARM 範本代碼段會部署 Container Apps 作業。

{
  "identity": {
    "userAssignedIdentities": {
      "/subscriptions/<subscription_id>/resourcegroups/my-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-user": {
      }
    },
    "type": "UserAssigned"
  },
  "properties": {
    "environmentId": "/subscriptions/<subscription_id>/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube",
    "configuration": {
      "replicaTimeout": 10,
      "replicaRetryLimit": 10,
      "manualTriggerConfig": {
        "replicaCompletionCount": 1,
        "parallelism": 4
      },
      "triggerType": "Manual"
    },
    "template": {
      "containers": [
        {
          "image": "repo/testcontainerAppsJob0:v1",
          "name": "testcontainerAppsJob0",
          "probes": [
            {
              "type": "Liveness",
              "httpGet": {
                "path": "/health",
                "port": 8080,
                "httpHeaders": [
                  {
                    "name": "Custom-Header",
                    "value": "Awesome"
                  }
                ]
              },
              "initialDelaySeconds": 5,
              "periodSeconds": 3
            }
          ],
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            },
            {
              "mountPath": "/myfiles",
              "volumeName": "azure-files-volume"
            },
            {
              "mountPath": "/mysecrets",
              "volumeName": "mysecrets"
            }
          ]
        }
      ],
      "initContainers": [
        {
          "image": "repo/testcontainerAppsJob0:v4",
          "name": "testinitcontainerAppsJob0",
          "resources": {
            "cpu": 0.2,
            "memory": "100Mi"
          },
          "command": [
            "/bin/sh"
          ],
          "args": [
            "-c",
            "while true; do echo hello; sleep 10;done"
          ]
        }
      ],
      "volumes": [
        {
          "name": "myempty",
          "storageType": "EmptyDir"
        },
        {
          "name": "azure-files-volume",
          "storageType": "AzureFile",
          "storageName": "myazurefiles"
        },
        {
          "name": "mysecrets",
          "storageType": "Secret",
          "secrets": [
            {
              "secretRef": "mysecret",
              "path": "mysecret.txt"
            }
          ]
        }
      ]
    }
  }
}