Especificaciones de plantilla de ARM y YAML de Azure Container Apps

Las implementaciones de Azure Container Apps se basan en una plantilla de Azure Resource Manager (ARM). Algunos comandos de la CLI de Container Apps también admiten el uso de una plantilla YAML para especificar un recurso.

En este artículo se describen las configuraciones de ARM y YAML para los recursos de Container Apps usados con frecuencia. Para obtener una lista completa de los recursos de Container Apps, consulte Plantillas de Azure Resource Manager para Container Apps.

Versiones de API

Las versiones más recientes de la API de administración para Azure Container Apps son:

Para más información sobre las diferencias entre las versiones de API, consulte Microsoft.App registro de cambios.

Actualización de versiones de API

Para usar una versión de API específica en ARM o Bicep, actualice la versión a la que se hace referencia en las plantillas. Para usar la versión más reciente de la API en la CLI de Azure o Azure PowerShell, actualícelas a la versión más reciente.

Actualice la CLI de Azure y la extensión Azure Container Apps mediante la ejecución de los siguientes comandos:

az upgrade
az extension add -n containerapp --upgrade

Para actualizar Azure PowerShell, consulte Instalación de Azure PowerShell.

Para administrar Mediante programación Azure Container Apps con la versión de API más reciente, use las versiones más recientes del SDK de administración:

Entorno de Container Apps

En las tablas siguientes se describen las propiedades usadas habitualmente disponibles en el recurso de entorno de Container Apps. Para obtener una lista completa de las propiedades, consulte Referencia de la API REST de Azure Container Apps.

Resource

Un recurso de entorno de Container Apps incluye las siguientes propiedades:

Propiedad Descripción Tipo de datos Solo lectura
daprAIInstrumentationKey Clave de instrumentación de Application Insights usada por Dapr. string No
appLogsConfiguration Configuración de registro del entorno. Object No
peerAuthentication Cómo habilitar el cifrado mTLS. Object No

Ejemplos

El siguiente fragmento de código de plantilla de ARM de ejemplo implementa un entorno de Container Apps.

Nota:

Los comandos para crear entornos de aplicaciones de contenedor no admiten la entrada de configuración de 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"
  }
}

Aplicación de contenedor

En las tablas siguientes se describen las propiedades usadas habitualmente en el recurso de aplicación de contenedor. Para obtener una lista completa de las propiedades, consulte Referencia de la API REST de Azure Container Apps.

Resource

El objeto de un recurso de properties aplicación contenedor incluye las siguientes propiedades:

Propiedad Descripción Tipo de datos Solo lectura
provisioningState Estado de una operación de larga duración, por ejemplo, cuando se crea una revisión de contenedor. Los valores posibles son "aprovisionando", "aprovisionado" y "error". Compruebe si la aplicación está en funcionamiento. string
environmentId Identificador de entorno de la aplicación de contenedor. Se trata de una propiedad necesaria para crear una aplicación contenedora. Si usa YAML, puede especificar el identificador de entorno mediante la --environment opción en la CLI de Azure en su lugar. string No
latestRevisionName Nombre de la revisión más reciente. string
latestRevisionFqdn Dirección URL de la revisión más reciente. string

El valor environmentId toma la forma siguiente:

/subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/environmentId/<ENVIRONMENT_NAME>

En este ejemplo, colocará los valores en lugar de los tokens de marcador de posición entre corchetes <>.

properties.configuration

El objeto de properties.configuration un recurso incluye las siguientes propiedades:

Propiedad Descripción Tipo de datos
activeRevisionsMode Si se establece en single, se desactivan automáticamente las revisiones antiguas y solo se conserva la última revisión activa. Si se establece en multiple, permite conservar varias revisiones. string
secrets Define los valores secretos de la aplicación de contenedor. object
ingress Objeto que define la configuración de accesibilidad pública de una aplicación de contenedor. object
registries Objeto de configuración que hace referencia a las credenciales de los registros de contenedores privados. Las entradas definidas con secretref hacen referencia al objeto de configuración de secretos. object
dapr Objeto de configuración que define la configuración de Dapr de la aplicación de contenedor. object

Los cambios realizados en la sección configuration son cambios en el ámbito de la aplicación, lo que no desencadena una nueva revisión.

properties.template

El objeto de properties.template un recurso incluye las siguientes propiedades:

Propiedad Descripción Tipo de datos
revisionSuffix Nombre descriptivo de una revisión. Este valor debe ser único, ya que el runtime rechaza los conflictos con los valores de sufijo de nombre de revisión existentes. string
containers Objeto de configuración que define qué imágenes de contenedor se incluyen en la aplicación de contenedor. object
scale Objeto de configuración que define las reglas de escalado de la aplicación de contenedor. object

Los cambios realizados en la sección template son cambios en el ámbito de la revisión, lo que sí desencadena una nueva revisión.

Ejemplos

Para más información sobre los sondeos de estado, consulte Sondeos de estado en Azure Container Apps.

El siguiente fragmento de código de plantilla de ARM de ejemplo implementa una aplicación de contenedor.

{
  "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"
        }
      ]
    }
  }
}

Trabajo de Container Apps

En las tablas siguientes se describen las propiedades usadas habitualmente en el recurso de trabajo de Container Apps. Para obtener una lista completa de las propiedades, consulte Referencia de la API REST de Azure Container Apps.

Resource

El objeto de un recurso de properties trabajo de Container Apps incluye las siguientes propiedades:

Propiedad Descripción Tipo de datos Solo lectura
environmentId El identificador de entorno del trabajo de Container Apps. Esta propiedad es necesaria para crear un trabajo de Container Apps. Si usa YAML, puede especificar el identificador de entorno mediante la --environment opción en la CLI de Azure en su lugar. string No

El valor environmentId toma la forma siguiente:

/subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/environmentId/<ENVIRONMENT_NAME>

En este ejemplo, colocará los valores en lugar de los tokens de marcador de posición entre corchetes <>.

properties.configuration

El objeto de properties.configuration un recurso incluye las siguientes propiedades:

Propiedad Descripción Tipo de datos
triggerType Tipo de desencadenador para un trabajo de Container Apps. Para obtener una configuración específica para cada tipo de desencadenador, consulte Tipos de desencadenador de trabajos. string
replicaTimeout Tiempo de espera en segundos para un trabajo de Container Apps. integer
replicaRetryLimit Número de veces que se reintenta un trabajo de Container Apps. integer

properties.template

El objeto de properties.template un recurso incluye las siguientes propiedades:

Propiedad Descripción Tipo de datos
containers Objeto de configuración que define qué imágenes de contenedor se incluyen en el trabajo. object
scale Objeto de configuración que define reglas de escalado para el trabajo. object

Ejemplos

El siguiente fragmento de código de plantilla de ARM de ejemplo implementa un trabajo de Container Apps.

{
  "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"
            }
          ]
        }
      ]
    }
  }
}