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
Las versiones más recientes de la API de administración para Azure Container Apps son:
2023-05-01
(estable)2023-08-01-preview
(versión preliminar)
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.
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 | Sí |
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 | Sí |
latestRevisionFqdn |
Dirección URL de la revisión más reciente. | string | Sí |
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. | 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 de la aplicación de contenedor. | 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. | string |
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/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. | 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"
}
]
}
]
}
}
}