Especificações do modelo ARM e YAML dos Aplicativos de Contêiner do Azure
As implantações dos Aplicativos de Contêiner do Azure são desenvolvidas por um modelo do ARM (Azure Resource Manager). Alguns comandos da CLI de Aplicativos de Contêiner também dão suporte ao uso de um modelo YAML para especificar um recurso.
Este artigo inclui exemplos das configurações do ARM e do YAML para recursos de Aplicativos de Contêiner usados com frequência. Para obter uma lista completa de recursos de Aplicativos de Contêiner, consulte Modelos do Azure Resource Manager para Aplicativos de Contêiner. O código listado neste artigo é apenas para fins de exemplo. Para obter informações completas de esquema e tipo, consulte as definições JSON para a versão de API necessária.
Versões de API
As versões mais recentes da API de gerenciamento para Aplicativos de Contêiner do Azure são:
2024-03-01
(estável)2024-10-02-preview
(versão prévia)
Para saber mais sobre as diferenças entre as versões da API, consulte Microsoft.App log de alterações.
Atualização de versões de API
Para usar uma versão específica da API no ARM ou no Bicep, atualize a versão referenciada em seus modelos. Para usar a versão mais recente da API na CLI do Azure ou no Azure PowerShell, atualize-os para a versão mais recente.
Atualize a CLI do Azure e a extensão dos Aplicativos de Contêiner do Azure executando os seguintes comandos:
az upgrade
az extension add -n containerapp --upgrade
Para atualizar o Azure PowerShell, consulte Como instalar o Azure PowerShell.
Para gerenciar programaticamente os Aplicativos de Contêiner do Azure com a versão mais recente da API, use as versões mais recentes do SDK de gerenciamento:
Ambiente de Aplicativos de Contêiner
As tabelas a seguir descrevem as propriedades comumente usadas disponíveis no recurso de ambiente Aplicativos de Contêiner. Para obter uma lista completa de propriedades, consulte Referência da API REST dos Aplicativos de Contêiner do Azure.
Recurso
Um recurso de ambiente de Aplicativos de Contêiner inclui as seguintes propriedades:
Propriedade | Descrição | Tipo de dados | Somente leitura |
---|---|---|---|
daprAIInstrumentationKey |
A chave de instrumentação do Application Insights usada pelo Dapr. | string | Não |
appLogsConfiguration |
A configuração de registro em log do ambiente. | Objeto | Não |
peerAuthentication |
Como habilitar a criptografia mTLS. | Objeto | Não |
Exemplos
O snippet de modelo do ARM de exemplo a seguir implanta um ambiente de Aplicativos de Contêiner.
Observação
Os comandos para criar ambientes de aplicativo de contêiner não dão suporte à entrada de configuração 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"
}
}
Aplicativo de contêiner
As tabelas a seguir descrevem as propriedades comumente usadas no recurso de aplicativo de contêiner. Para obter uma lista completa de propriedades, consulte Referência da API REST dos Aplicativos de Contêiner do Azure.
Recurso
O objeto de um recurso de properties
aplicativo de contêiner inclui as seguintes propriedades:
Propriedade | Descrição | Tipo de dados | Somente leitura |
---|---|---|---|
provisioningState |
O estado de uma operação de execução prolongada, por exemplo, quando a revisão de contêiner é criada. Os valores possíveis incluem: provisionamento, provisionado, com falha. Verifique se o aplicativo está em execução. | string | Sim |
environmentId |
A ID do ambiente do seu aplicativo de contêiner. Essa é uma propriedade necessária para criar um aplicativo de contêiner. Se você estiver usando o YAML, poderá especificar a ID do ambiente usando a --environment opção na CLI do Azure. |
string | Não |
latestRevisionName |
O nome da última revisão. | string | Sim |
latestRevisionFqdn |
A URL da última revisão. | string | Sim |
O valor environmentId
assume a seguinte forma:
/subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/environmentId/<ENVIRONMENT_NAME>
Neste exemplo, você coloca seus valores no lugar dos tokens de espaço reservado entre colchetes <>
.
properties.configuration
O objeto de properties.configuration
um recurso inclui as seguintes propriedades:
Propriedade | Descrição | Tipo de dados |
---|---|---|
activeRevisionsMode |
Configurá-lo como single desativa automaticamente revisões antigas e mantém apenas a última revisão ativa. Configurá-lo como multiple permite que você mantenha várias revisões. |
string |
secrets |
Define valores secretos no seu aplicativo de contêiner. | objeto |
ingress |
O objeto que define a configuração de acessibilidade pública de um aplicativo de contêiner. | objeto |
registries |
O objeto de configuração que faz referência a credenciais de registros de contêiner privado. Entradas definidas com o secretref fazem referência ao objeto de configuração de segredos. |
objeto |
dapr |
O objeto de configuração que define as configurações do Dapr para o aplicativo de contêiner. | objeto |
As alterações feitas na seção configuration
são alterações no escopo do aplicativo, que não disparam uma nova revisão.
properties.template
O objeto de properties.template
um recurso inclui as seguintes propriedades:
Propriedade | Descrição | Tipo de dados |
---|---|---|
revisionSuffix |
Um nome amigável para uma revisão. Esse valor precisa ser exclusivo, pois o runtime rejeita todos os conflitos com os valores de sufixo de nome de revisão existentes. | string |
containers |
O objeto de configuração que define quais imagens de contêiner estão inclusas no aplicativo de contêiner. | objeto |
scale |
O objeto de configuração que define as regras de escala do aplicativo de contêiner. | objeto |
As alterações feitas na seção template
são alterações no escopo da revisão, o que dispara uma nova revisão.
Exemplos
Para obter detalhes sobre investigações de integridade, consulte Investigações de integridade nos Aplicativos de Contêiner do Azure.
O snippet de modelo do ARM de exemplo a seguir implanta um aplicativo de contêiner.
{
"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"
}
]
}
}
}
Trabalho de Aplicativos de Contêiner
As tabelas a seguir descrevem as propriedades comumente usadas no recurso de trabalho Aplicativos de Contêiner. Para obter uma lista completa de propriedades, consulte Referência da API REST dos Aplicativos de Contêiner do Azure.
Recurso
O objeto de um recurso de properties
trabalho de Aplicativos de Contêiner inclui as seguintes propriedades:
Propriedade | Descrição | Tipo de dados | Somente leitura |
---|---|---|---|
environmentId |
A ID do ambiente para o trabalho dos Aplicativos de Contêiner. Essa propriedade é necessária para criar um trabalho de Aplicativos de Contêiner. Se você estiver usando o YAML, poderá especificar a ID do ambiente usando a --environment opção na CLI do Azure. |
string | Não |
O valor environmentId
assume a seguinte forma:
/subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/environmentId/<ENVIRONMENT_NAME>
Neste exemplo, você coloca seus valores no lugar dos tokens de espaço reservado entre colchetes <>
.
properties.configuration
O objeto de properties.configuration
um recurso inclui as seguintes propriedades:
Propriedade | Descrição | Tipo de dados |
---|---|---|
triggerType |
O tipo de gatilho para um trabalho de Aplicativos de Contêiner. Para obter uma configuração específica para cada tipo de gatilho, consulte Tipos de gatilho de trabalhos | string |
replicaTimeout |
O tempo limite em segundos para um trabalho de Aplicativos de Contêiner. | Número inteiro |
replicaRetryLimit |
O número de vezes para repetir um trabalho de Aplicativos de Contêiner. | Número inteiro |
properties.template
O objeto de properties.template
um recurso inclui as seguintes propriedades:
Propriedade | Descrição | Tipo de dados |
---|---|---|
containers |
Objeto de configuração que define quais imagens de contêiner são incluídas no trabalho. | objeto |
scale |
Objeto de configuração que define regras de escala para o trabalho. | objeto |
Exemplos
O snippet de modelo do ARM de exemplo a seguir implanta um trabalho de Aplicativos de Contêiner.
{
"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"
}
]
}
]
}
}
}