Partilhar via


Especificações de modelo ARM e YAML dos Aplicativos de Contêiner do Azure

As implantações de Aplicativos de Contêiner do Azure são alimentadas por um modelo do Azure Resource Manager (ARM). Alguns comandos da CLI de Aplicativos de Contêiner também suportam o uso de um modelo YAML para especificar um recurso.

Este artigo inclui exemplos das configurações ARM e YAML para recursos de Aplicativos de Contêiner usados com freqüência. Para obter uma lista completa dos 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 sobre esquema e tipo, consulte as definições JSON para sua versão de API necessária.

Versões da API

As versões mais recentes da API de gerenciamento para Aplicativos de Contêiner do Azure são:

Para saber mais sobre as diferenças entre as versões da API, consulte Microsoft.App log de alterações.

Atualizando versões da API

Para usar uma versão específica da API no ARM ou 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-as para a versão mais recente.

Atualize a CLI do Azure e a extensão 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:

Property Descrição Tipo de dados Só de Leitura
daprAIInstrumentationKey A chave de instrumentação do Application Insights usada pelo Dapr. string Não
appLogsConfiguration A configuração de log do ambiente. Object Não
peerAuthentication Como ativar a criptografia mTLS. Object Não

Exemplos

O trecho de modelo ARM de exemplo a seguir implanta um ambiente de Aplicativos de Contêiner.

Nota

Os comandos para criar ambientes de aplicativos de contêiner não suportam a 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 contêiner inclui as seguintes propriedades:

Property Descrição Tipo de dados Só de Leitura
provisioningState O estado de uma operação de longa duração, por exemplo, quando uma nova revisão de contêiner é criada. Os valores possíveis incluem: provisionamento, provisionado, falha. Verifique se o aplicativo está em execução. string Sim
environmentId A ID do ambiente para seu aplicativo de contêiner. Esta é uma propriedade necessária para criar um aplicativo de contêiner. Se você estiver usando 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 URL da última revisão. string Sim

O environmentId valor 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:

Property Descrição Tipo de dados
activeRevisionsMode A configuração para single desativar automaticamente as revisões antigas e mantém ativa apenas a revisão mais recente. Configuração para multiple permitir que você mantenha várias revisões. string
secrets Define valores secretos em seu aplicativo de contêiner. objeto
ingress Objeto que define a configuração de acessibilidade pública de um aplicativo de contêiner. objeto
registries Objeto de configuração que faz referência a credenciais para registros de contêiner privado. Entradas definidas com secretref referência ao objeto de configuração secrets. objeto
dapr Objeto de configuração que define as configurações de Dapr para o aplicativo de contêiner. objeto

As alterações feitas na seção são alterações no escopo do configuration aplicativo, que não acionam uma nova revisão.

properties.template

O objeto de properties.template um recurso inclui as seguintes propriedades:

Property Descrição Tipo de dados
revisionSuffix Um nome amigável para uma revisão. Esse valor deve ser exclusivo, pois o tempo de execução rejeita quaisquer conflitos com valores de sufixo de nome de revisão existentes. string
containers Objeto de configuração que define quais imagens de contêiner são incluídas no aplicativo de contêiner. objeto
scale Objeto de configuração que define regras de escala para o aplicativo contêiner. objeto

As alterações feitas na seção são alterações de escopo de revisão, o template que desencadeia uma nova revisão.

Exemplos

Para obter detalhes sobre testes de integridade, consulte Sondas de integridade em Aplicativos de Contêiner do Azure.

O trecho de modelo 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 Container Apps inclui as seguintes propriedades:

Property Descrição Tipo de dados Só de Leitura
environmentId A ID do ambiente para seu trabalho de Aplicativos de Contêiner. Essa propriedade é necessária para criar um trabalho de Aplicativos de Contêiner. Se você estiver usando YAML, poderá especificar a ID do ambiente usando a --environment opção na CLI do Azure. string Não

O environmentId valor 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:

Property 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. integer
replicaRetryLimit O número de vezes para tentar novamente um trabalho de Aplicativos de Contêiner. integer

properties.template

O objeto de properties.template um recurso inclui as seguintes propriedades:

Property 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 trecho de modelo 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"
            }
          ]
        }
      ]
    }
  }
}