Partager via


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

Vérifiez les dernières versions stables et préliminaires de l’API dans la documentation de l’API Resource Manager pour vous assurer que vous utilisez les versions les plus up-to-date.

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é Descriptif Type de données Lecture seule
daprAIInstrumentationKey Clé d’instrumentation Application Insights utilisée par Dapr. ficelle Non
appLogsConfiguration Configuration de la journalisation de l’environnement. Objet Non
peerAuthentication Comment activer le chiffrement mTLS. Objet 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

Une configuration d’application conteneur inclut une propriété de niveau kind supérieur, qui est une chaîne facultative utilisée pour créer une application Functions ou workflow.

Propriété Descriptif Type de données Lecture seule
kind Type d’application à créer. Prend actuellement en charge functionapp et workflowapp. Des valeurs supplémentaires peuvent être prises en charge à l’avenir. Si elle est omise, une application conteneur standard est créée par défaut. ficelle Non

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

Propriété Descriptif 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. ficelle 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. ficelle Non
latestRevisionName Nom de la dernière révision. ficelle Oui
latestRevisionFqdn URL de la dernière révision. ficelle 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é Descriptif 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. ficelle
secrets Définit des valeurs secrètes dans votre application conteneur. objet
ingress Objet qui définit la configuration d’accessibilité publique d’une application de conteneur. objet
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. objet
dapr Objet de configuration qui définit les paramètres Dapr de l’application conteneur. objet

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é Descriptif 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. ficelle
containers Objet de configuration qui définit les images de conteneur incluses dans l’application conteneur. objet
scale Objet de configuration qui définit les règles de mise à l’échelle pour l’application de conteneur. objet

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

L’exemple de modèle ARM suivant montre comment déployer une application Azure Functions sur 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 
  }
}

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é Descriptif 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. ficelle 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é Descriptif 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 ficelle
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é Descriptif Type de données
containers Objet de configuration qui définit les images conteneur incluses dans le travail. objet
scale Objet de configuration qui définit des règles d’échelle pour le travail. objet

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