Compartir a través de


Las 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 incluyen ejemplos de 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. El código que se muestra en este artículo es solo para fines de ejemplo. Para obtener información completa sobre el esquema y el tipo, consulte las definiciones JSON de la versión de API necesaria.

Versiones de API

Consulte las versiones más recientes de api estables y en versión preliminar en la documentación de la API de Resource Manager para asegurarse de que usa la mayoría de las versiones de up-to-date.

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

Actualización de las 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.

Recurso

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. cuerda / cadena No
appLogsConfiguration Configuración de registro del entorno. Objeto No
peerAuthentication Cómo habilitar el cifrado mTLS. Objeto 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": {
    "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.

Recurso

Una configuración de aplicación de contenedor incluye una propiedad de nivel kind superior, que es una cadena opcional que se usa para crear una aplicación de functions o de flujo de trabajo.

Propiedad Descripción Tipo de datos Solo lectura
kind Tipo de aplicación que se va a crear. Actualmente admite functionapp y workflowapp. Es posible que se admita valores adicionales en el futuro. Si se omite, se crea una aplicación de contenedor estándar de forma predeterminada. cuerda / cadena No

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. cuerda / cadena
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. cuerda / cadena No
latestRevisionName Nombre de la revisión más reciente. cuerda / cadena
latestRevisionFqdn Dirección URL de la revisión más reciente. cuerda / cadena

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. cuerda / cadena
secrets Define los valores secretos de la aplicación de contenedor. objeto
ingress Objeto que define la configuración de accesibilidad pública de una aplicación de contenedor. objeto
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. objeto
dapr Objeto de configuración que define la configuración de Dapr para la aplicación contenedora. objeto

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. cuerda / cadena
containers Objeto de configuración que define qué imágenes de contenedor se incluyen en la aplicación de contenedor. objeto
scale Objeto de configuración que define las reglas de escalado de la aplicación de contenedor. objeto

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

En el ejemplo siguiente de plantilla de ARM se muestra cómo implementar una aplicación de Azure Functions en Container Apps.

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

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.

Recurso

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. cuerda / cadena 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. cuerda / cadena
replicaTimeout Tiempo de espera en segundos para un trabajo de Container Apps. entero
replicaRetryLimit Número de veces que se reintenta un trabajo de Container Apps. entero

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. objeto
scale Objeto de configuración que define reglas de escalado para el trabajo. objeto

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