Spécifications des modèles ARM et YAML pour Azure Container Apps

Les déploiements des applications Azure Container sont alimentés par un modèle Azure Resource Manager (ARM). Certaines commandes CLI de Container Apps prennent également en charge l’utilisation d’un modèle YAML pour spécifier une ressource.

Cet article inclut des exemples de configurations ARM et YAML pour les ressources Container Apps fréquemment utilisées. Pour obtenir la liste complète des ressources Container Apps, consultez les modèles Azure Resource Manager pour Container Apps. Le code répertorié dans cet article est destiné à des fins d’exemple uniquement. Pour obtenir des informations complètes sur le schéma et le type, consultez les définitions JSON de votre version d’API requise.

Versions d’API

Les dernières versions de l’API de gestion pour Azure Container Apps sont les suivantes :

Pour en savoir plus sur les différences entre les versions d’API, consultez Microsoft.App journal des modifications.

Mise à jour des versions d’API

Pour utiliser une version d’API spécifique dans ARM ou Bicep, mettez à jour la version référencée dans vos modèles. Pour utiliser la dernière version de l’API dans Azure CLI ou Azure PowerShell, mettez-les à jour vers la dernière version.

Mettez à jour Azure CLI et l’extension Azure Container Apps en exécutant les commandes suivantes :

az upgrade
az extension add -n containerapp --upgrade

Pour mettre à jour Azure PowerShell, consultez Comment installer Azure PowerShell.

Pour gérer par programmation Azure Container Apps avec la dernière version de l’API, utilisez les dernières versions du Kit de développement logiciel (SDK) de gestion :

Environnement Container Apps

Les tableaux suivants décrivent les propriétés couramment utilisées disponibles dans la ressource d’environnement Container Apps. Pour obtenir la liste complète des propriétés, consultez la référence de l’API REST Azure Container Apps.

Ressource

Une ressource d’environnement Container Apps inclut les propriétés suivantes :

Propriété Description Type de données Lecture seule
daprAIInstrumentationKey Clé d’instrumentation Application Insights utilisée par Dapr. string Non
appLogsConfiguration Configuration de la journalisation de l’environnement. Object Non
peerAuthentication Comment activer le chiffrement mTLS. Object Non

Exemples

L’exemple d’extrait de modèle ARM suivant déploie un environnement Container Apps.

Remarque

Les commandes permettant de créer des environnements d’application conteneur ne prennent pas en charge l’entrée de configuration 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"
  }
}

Application de conteneur

Les tableaux suivants décrivent les propriétés couramment utilisées dans la ressource d’application conteneur. Pour obtenir la liste complète des propriétés, consultez la référence de l’API REST Azure Container Apps.

Ressource

L’objet d’une properties ressource d’application conteneur inclut les propriétés suivantes :

Propriété Description Type de données Lecture seule
provisioningState État d’une opération de longue durée, par exemple lors de la création d’une nouvelle révision de conteneur. Les valeurs possibles sont les suivantes : approvisionnement, approvisionné, échec. Vérifiez si l’application est en cours d’exécution. string Oui
environmentId L’ID d’environnement de votre application conteneur. Il s’agit d’une propriété requise pour créer une application conteneur. Si vous utilisez YAML, vous pouvez spécifier l’ID d’environnement à l’aide de l’option dans Azure CLI à la --environment place. string Non
latestRevisionName Nom de la dernière révision. string Oui
latestRevisionFqdn URL de la dernière révision. string Oui

La valeur environmentId prend la forme suivante :

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

Dans cet exemple, vous placez vos valeurs à la place des jetons d’espace réservé placés <> entre crochets.

properties.configuration

L’objet d’une properties.configuration ressource inclut les propriétés suivantes :

Propriété Description Type de données
activeRevisionsMode Paramètre pour single désactiver automatiquement les anciennes révisions et conserver uniquement la révision la plus récente active. La définition de la valeur multiple vous permet de gérer plusieurs révisions. string
secrets Définit des valeurs secrètes dans votre application conteneur. object
ingress Objet qui définit la configuration d’accessibilité publique d’une application de conteneur. object
registries Objet de configuration qui référence les informations d’identification pour les registres de conteneurs privés. Les entrées définies avec secretref référencent l’objet de configuration de secrets. object
dapr Objet de configuration qui définit les paramètres Dapr pour l’application de conteneur. object

Les modifications apportées à la section configuration sont des modifications de portée application, qui ne déclenchent pas une nouvelle révision.

properties.template

L’objet d’une properties.template ressource inclut les propriétés suivantes :

Propriété Description Type de données
revisionSuffix Nom convivial pour une révision. Cette valeur doit être unique car le runtime rejette les conflits avec les valeurs de suffixe de nom de révision existantes. string
containers Objet de configuration qui définit les images de conteneur incluses dans l’application conteneur. object
scale Objet de configuration qui définit les règles de mise à l’échelle pour l’application de conteneur. object

Les modifications apportées à la section template sont des modifications d’étendue de révision, qui déclenchent une nouvelle révision.

Exemples

Pour plus d’informations sur les sondes d’intégrité, reportez-vous aux sondes d’intégrité dans Azure Container Apps.

L’exemple d’extrait de modèle ARM suivant déploie une application conteneur.

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

Travail Container Apps

Les tableaux suivants décrivent les propriétés couramment utilisées dans la ressource de travail Container Apps. Pour obtenir la liste complète des propriétés, consultez la référence de l’API REST Azure Container Apps.

Ressource

L’objet d’une ressource de properties travail Container Apps inclut les propriétés suivantes :

Propriété Description Type de données Lecture seule
environmentId ID d’environnement de votre travail Container Apps. Cette propriété est requise pour créer un travail Container Apps. Si vous utilisez YAML, vous pouvez spécifier l’ID d’environnement à l’aide de l’option dans Azure CLI à la --environment place. string Non

La valeur environmentId prend la forme suivante :

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

Dans cet exemple, vous placez vos valeurs à la place des jetons d’espace réservé placés <> entre crochets.

properties.configuration

L’objet d’une properties.configuration ressource inclut les propriétés suivantes :

Propriété Description Type de données
triggerType Type de déclencheur pour un travail Container Apps. Pour obtenir une configuration spécifique pour chaque type de déclencheur, consultez Types de déclencheurs de travaux string
replicaTimeout Délai d’expiration en secondes pour un travail Container Apps. entier
replicaRetryLimit Nombre de fois où réessayer un travail Container Apps. entier

properties.template

L’objet d’une properties.template ressource inclut les propriétés suivantes :

Propriété Description Type de données
containers Objet de configuration qui définit les images conteneur incluses dans le travail. object
scale Objet de configuration qui définit des règles d’échelle pour le travail. object

Exemples

L’exemple d’extrait de modèle ARM suivant déploie un travail 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"
            }
          ]
        }
      ]
    }
  }
}