Спецификации шаблонов AZURE Container Apps ARM и YAML
Развертывания Контейнеров приложений Azure выполняются на основе шаблона Azure Resource Manager (ARM). Некоторые команды CLI для Контейнеров приложений также поддерживают использование шаблона YAML для указания ресурса.
В этой статье приведены примеры конфигураций ARM и YAML для часто используемых ресурсов контейнеров. Полный список ресурсов контейнерных приложений см . в шаблонах Azure Resource Manager для контейнерных приложений. Код, указанный в этой статье, предназначен только для примера. Полные сведения о схеме и типе см. в определениях JSON для требуемой версии API.
Версии API
Последние версии API управления для приложений контейнеров Azure:
2023-05-01
(стабильная)2023-08-01-preview
(предварительная версия)
Дополнительные сведения о различиях между версиями API см. в журнале изменений Microsoft.App.
Обновление версий API
Чтобы использовать определенную версию API в ARM или Bicep, обновите версию, указанную в шаблонах. Чтобы использовать последнюю версию API в Azure CLI или Azure PowerShell, обновите их до последней версии.
Обновите Azure CLI и расширение приложений контейнеров Azure, выполнив следующие команды:
az upgrade
az extension add -n containerapp --upgrade
Сведения об обновлении Azure PowerShell см. в статье "Установка Azure PowerShell".
Для программного управления приложениями контейнеров Azure с последней версией API используйте последние версии пакета SDK для управления:
Среда Контейнеров приложений
В следующих таблицах описываются часто используемые свойства, доступные в ресурсе среды "Приложения контейнеров". Полный список свойств см . в справочнике по REST API для приложений контейнеров Azure.
Ресурс
Ресурс среды "Приложения-контейнеры" включает следующие свойства:
Свойство | Description | Тип данных | Только чтение |
---|---|---|---|
daprAIInstrumentationKey |
Ключ инструментирования Application Insights, используемый Dapr. | строка | Нет |
appLogsConfiguration |
Конфигурация ведения журнала среды. | Object | No |
peerAuthentication |
Включение шифрования mTLS. | Object | No |
Примеры
В следующем примере фрагмент шаблона ARM развертывает среду приложений контейнеров.
Примечание.
Команды для создания сред приложений-контейнеров не поддерживают входные данные конфигурации 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"
}
}
Контейнерное приложение
В следующих таблицах описываются часто используемые свойства в ресурсе приложения контейнера. Полный список свойств см . в справочнике по REST API для приложений контейнеров Azure.
Ресурс
Объект ресурса properties
приложения контейнера содержит следующие свойства:
Свойство | Description | Тип данных | Только чтение |
---|---|---|---|
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
содержит следующие свойства:
Свойство | Description | Тип данных |
---|---|---|
activeRevisionsMode |
Если задано single , происходит автоматическая деактивация старых редакций. Остается активной только последняя версия. Если задано multiple , поддерживается несколько редакций. |
строка |
secrets |
Определяет значения секретов в приложении-контейнере. | объект |
ingress |
Объект, определяющий конфигурацию общей доступности приложения-контейнера. | объект |
registries |
Объект конфигурации, который ссылается на учетные данные для частных реестров контейнеров. Записи, определенные с secretref , ссылаются на объект конфигурации секретов. |
объект |
dapr |
Объект конфигурации, определяющий параметры Dapr для приложения-контейнера. | объект |
Изменения, внесенные в раздел configuration
, являются изменениями области приложения, которые не активируют новую редакцию.
properties.template
Объект ресурса properties.template
содержит следующие свойства:
Свойство | Description | Тип данных |
---|---|---|
revisionSuffix |
Понятное имя для редакции. Это значение должно быть уникальным, так как среда выполнения отклоняет любые конфликты с существующими значениями суффикса имени редакции. | строка |
containers |
Объект конфигурации, определяющий, какие образы контейнеров включаются в приложение-контейнер. | объект |
scale |
Объект конфигурации, определяющий правила масштабирования для приложения-контейнера. | объект |
Изменения, внесенные в template
раздел, — это изменения области редакции, которые активируют новую редакцию.
Примеры
Дополнительные сведения о пробах работоспособности см. в пробах работоспособности в приложениях контейнеров Azure.
В следующем примере фрагмент шаблона 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"
}
]
}
}
}
Задание "Приложения-контейнеры"
В следующих таблицах описываются часто используемые свойства в ресурсе задания "Приложения контейнеров". Полный список свойств см . в справочнике по REST API для приложений контейнеров Azure.
Ресурс
Объект ресурса properties
задания "Приложения контейнеров" содержит следующие свойства:
Свойство | Description | Тип данных | Только чтение |
---|---|---|---|
environmentId |
Идентификатор среды для задания "Приложения контейнеров". Это свойство необходимо для создания задания "Приложения контейнеров". Если вы используете YAML, можно указать идентификатор среды с помощью --environment параметра в Azure CLI. |
строка | Нет |
Значение environmentId
принимает следующий вид:
/subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/environmentId/<ENVIRONMENT_NAME>
В этом примере значения помещаются вместо маркеров заполнителя, окруженных квадратными скобками <>
.
properties.configuration
Объект ресурса properties.configuration
содержит следующие свойства:
Свойство | Description | Тип данных |
---|---|---|
triggerType |
Тип триггера для задания "Приложения контейнеров". Сведения о конкретной конфигурации для каждого типа триггера см. в разделе "Типы триггеров заданий" | строка |
replicaTimeout |
Время ожидания в секундах для задания "Приложения контейнеров". | integer |
replicaRetryLimit |
Количество повторных попыток задания "Приложения контейнеров". | integer |
properties.template
Объект ресурса properties.template
содержит следующие свойства:
Свойство | Description | Тип данных |
---|---|---|
containers |
Объект конфигурации, определяющий, какие образы контейнеров включены в задание. | объект |
scale |
Объект конфигурации, определяющий правила масштабирования для задания. | объект |
Примеры
В следующем примере фрагмент шаблона 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",
"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"
}
]
}
]
}
}
}