Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Развертывания Контейнеров приложений Azure выполняются на основе шаблона Azure Resource Manager (ARM). Некоторые команды CLI для Контейнеров приложений также поддерживают использование шаблона YAML для указания ресурса.
В этой статье приведены примеры конфигураций ARM и YAML для часто используемых ресурсов контейнеров. Полный список ресурсов контейнерных приложений см . в шаблонах Azure Resource Manager для контейнерных приложений. Код, указанный в этой статье, предназначен только для примера. Полные сведения о схеме и типе см. в определениях JSON для требуемой версии API.
Версии API
Проверьте последние стабильные и предварительные версии API в документации по API Resource Manager , чтобы убедиться, что вы используете самые up-toверсии -date.
Дополнительные сведения о различиях между версиями 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.
Ресурс
Ресурс среды "Приложения-контейнеры" включает следующие свойства:
| Свойство | Описание | Тип данных | Только чтение |
|---|---|---|---|
daprAIInstrumentationKey |
Ключ инструментирования Application Insights, используемый Dapr. | строка | Нет |
appLogsConfiguration |
Конфигурация ведения журнала среды. | Объект | Нет |
peerAuthentication |
Включение шифрования mTLS. | Объект | Нет |
Примеры
В следующем примере фрагмент шаблона 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.
Ресурс
Конфигурация приложения-контейнера включает свойство верхнего уровня kind , которое является необязательной строкой, используемой для создания приложения функций или рабочего процесса.
| Свойство | Описание | Тип данных | Только чтение |
|---|---|---|---|
kind |
Тип создаваемого приложения. В настоящее время поддерживается functionapp и workflowapp. Дополнительные значения могут поддерживаться в будущем. Если опущено, по умолчанию создается стандартное приложение контейнера. |
строка | Нет |
Объект ресурса 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.
В следующем примере фрагмент шаблона ARM развертывает приложение контейнера.
{
"identity": {
"userAssignedIdentities": {
"/subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RESOURCE_GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER_NAME>": {}
},
"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"
}
]
}
}
}
В следующем примере шаблона ARM показано, как развернуть приложение Функций Azure в контейнерных приложениях.
{
"kind": "functionapp",
"identity": {
"userAssignedIdentities": {
"/subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RESOURCE_GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER_NAME>": {}
},
"type": "UserAssigned"
},
"properties": {
// same as regular container app properties
}
}
Задание "Приложения-контейнеры"
В следующих таблицах описываются часто используемые свойства в ресурсе задания "Приложения контейнеров". Полный список свойств см . в справочнике по REST API для приложений контейнеров Azure.
Ресурс
Объект ресурса properties задания "Приложения контейнеров" содержит следующие свойства:
| Свойство | Описание | Тип данных | Только чтение |
|---|---|---|---|
environmentId |
Идентификатор среды для задания "Приложения контейнеров". Это свойство необходимо для создания задания "Приложения контейнеров". Если вы используете YAML, можно указать идентификатор среды с помощью --environment параметра в Azure CLI. |
строка | Нет |
Значение environmentId принимает следующий вид:
/subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/environmentId/<ENVIRONMENT_NAME>
В этом примере значения помещаются вместо маркеров заполнителя, окруженных квадратными скобками <>.
properties.configuration
Объект ресурса properties.configuration содержит следующие свойства:
| Свойство | Описание | Тип данных |
|---|---|---|
triggerType |
Тип триггера для задания "Приложения контейнеров". Сведения о конкретной конфигурации для каждого типа триггера см. в разделе "Типы триггеров заданий" | строка |
replicaTimeout |
Время ожидания в секундах для задания "Приложения контейнеров". | целое число |
replicaRetryLimit |
Количество повторных попыток задания "Приложения контейнеров". | целое число |
properties.template
Объект ресурса properties.template содержит следующие свойства:
| Свойство | Описание | Тип данных |
|---|---|---|
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"
}
]
}
]
}
}
}