Спецификации шаблонов AZURE Container Apps ARM и YAML

Развертывания Контейнеров приложений Azure выполняются на основе шаблона Azure Resource Manager (ARM). Некоторые команды CLI для Контейнеров приложений также поддерживают использование шаблона YAML для указания ресурса.

В этой статье описываются конфигурации ARM и YAML для часто используемых ресурсов контейнерных приложений. Полный список ресурсов контейнерных приложений см . в шаблонах Azure Resource Manager для контейнерных приложений.

Версии API

Последние версии API управления для приложений контейнеров Azure:

Дополнительные сведения о различиях между версиями 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": {
    "daprAIConnectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://northcentralus-0.in.applicationinsights.azure.com/",
    "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"
            }
          ]
        }
      ]
    }
  }
}