Azure Container Apps 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 版本如下:
2024-03-01
(穩定)2024-10-02-preview
(預覽)
若要深入瞭解 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 檢測密鑰。 | 字串 | No |
appLogsConfiguration |
環境的記錄設定。 | Object | No |
peerAuthentication |
如何啟用 mTLS 加密。 | Object | No |
範例
下列範例 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 |
長時間執行作業的狀態,例如,建立新的容器修訂時。 可能的值包括:布建、布建、失敗。 檢查應用程式是否已啟動並執行。 | 字串 | Yes |
environmentId |
容器應用程式的環境標識碼。 這是建立容器應用程式的必要屬性。 如果您使用 YAML,則可以改用 --environment Azure CLI 中的 選項來指定環境識別碼。 |
字串 | No |
latestRevisionName |
最新修訂的名稱。 | 字串 | Yes |
latestRevisionFqdn |
最新的修訂 URL。 | 字串 | Yes |
值 environmentId
採用下列格式:
/subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/environmentId/<ENVIRONMENT_NAME>
在此範例中,您會將值放在佔位符標記中,並 <>
括住方括弧。
properties.configuration
資源的 properties.configuration
物件包含下列屬性:
屬性 | 說明 | 資料類型 |
---|---|---|
activeRevisionsMode |
設定為 single 會自動停用舊的修訂,且只會讓最新的修訂保持作用中。 設定為 multiple 可讓您維護多個修訂。 |
字串 |
secrets |
定義容器應用程式中的秘密值。 | object |
ingress |
對象,定義容器應用程式的公用輔助功能組態。 | object |
registries |
參考私人容器登錄認證的組態物件。 以 secretref 參考秘密組態物件定義的專案。 |
object |
dapr |
定義容器應用程式的 Dapr 設定的組態物件。 | object |
對 configuration
區段所做的變更是 應用程式範圍變更,不會觸發新的修訂。
properties.template
資源的 properties.template
物件包含下列屬性:
屬性 | 說明 | 資料類型 |
---|---|---|
revisionSuffix |
修訂的易記名稱。 這個值必須是唯一的,因為運行時間會拒絕與現有修訂名稱後綴值的任何衝突。 | 字串 |
containers |
定義容器應用程式中包含哪些容器映像的組態物件。 | object |
scale |
定義容器應用程式的調整規則的組態物件。 | object |
對 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
},
"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"
}
]
}
],
"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"
]
}
],
"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 中的 選項來指定環境識別碼。 |
字串 | No |
值 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 |
定義作業中包含哪些容器映像的組態物件。 | object |
scale |
定義作業縮放規則的組態物件。 | object |
範例
下列範例 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"
}
]
}
]
}
}
}