Azure Container Apps ARM- und YAML-Vorlagenspezifikationen

Azure Container Apps-Bereitstellungen basieren auf einer Azure Resource Manager-Vorlage (ARM). Einige Container Apps-CLI-Befehle unterstützen auch die Verwendung einer YAML-Vorlage zum Angeben einer Ressource.

In diesem Artikel werden die ARM- und YAML-Konfigurationen für häufig verwendete Container-Apps-Ressourcen beschrieben. Eine vollständige Liste der Container-Apps-Ressourcen finden Sie unter Azure Resource Manager-Vorlagen für Container-Apps.

API-Versionen

Die neuesten Verwaltungs-API-Versionen für Azure Container-Apps sind:

Weitere Informationen zu den Unterschieden zwischen API-Versionen finden Sie unter Microsoft.App Änderungsprotokoll.

Aktualisieren von API-Versionen

Um eine bestimmte API-Version in ARM oder Bicep zu verwenden, aktualisieren Sie die Version, auf die in Ihren Vorlagen verwiesen wird. Um die neueste API-Version in Azure CLI oder Azure PowerShell zu verwenden, aktualisieren Sie sie auf die neueste Version.

Aktualisieren Sie azure CLI und die Azure Container Apps-Erweiterung, indem Sie die folgenden Befehle ausführen:

az upgrade
az extension add -n containerapp --upgrade

Informationen zum Aktualisieren von Azure PowerShell finden Sie unter Installieren von Azure PowerShell.

Verwenden Sie die neuesten Versionen des Management SDK, um Azure Container-Apps mit der neuesten API-Version programmgesteuert zu verwalten:

Container Apps-Umgebung

In den folgenden Tabellen werden häufig verwendete Eigenschaften beschrieben, die in der Umgebungsressource "Container-Apps" verfügbar sind. Eine vollständige Liste der Eigenschaften finden Sie in der REST-API-Referenz zu Azure-Container-Apps.

Resource

Eine Container-Apps-Umgebungsressource enthält die folgenden Eigenschaften:

Eigenschaft Beschreibung Datentyp Schreibgeschützt
daprAIInstrumentationKey Von Dapr verwendeter Application Insights-Instrumentierungsschlüssel Zeichenfolge Nein
appLogsConfiguration Protokollierungskonfiguration der Umgebung Object Nein
peerAuthentication So aktivieren Sie die MTLS-Verschlüsselung. Object Nein

Beispiele

Der folgende ARM-Vorlagenausschnitt stellt eine Container-Apps-Umgebung bereit.

Hinweis

Die Befehle zum Erstellen von Container-App-Umgebungen unterstützen keine YAML-Konfigurationseingabe.

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

Container-App

In den folgenden Tabellen werden die häufig verwendeten Eigenschaften in der Container-App-Ressource beschrieben. Eine vollständige Liste der Eigenschaften finden Sie in der REST-API-Referenz zu Azure-Container-Apps.

Resource

Das properties Objekt einer Container-App-Ressource enthält die folgenden Eigenschaften:

Eigenschaft Beschreibung Datentyp Schreibgeschützt
provisioningState Der Status eines Vorgangs mit langer Ausführung, z. B. wenn eine neue Containerrevision erstellt wird. Mögliche Werte sind: Bereitstellung, bereitgestellt, Fehler. Überprüfen Sie, ob die App ausgeführt wird. Zeichenfolge Ja
environmentId Die Umgebungs-ID für Ihre Container-App Dies ist eine erforderliche Eigenschaft zum Erstellen einer Container-App. Wenn Sie YAML verwenden, können Sie stattdessen die Umgebungs-ID mithilfe der --environment Option in der Azure CLI angeben. Zeichenfolge Nein
latestRevisionName Der Name der neuesten Revision Zeichenfolge Ja
latestRevisionFqdn Die URL der neuesten Revision Zeichenfolge Ja

Der environmentId-Wert nimmt die folgende Form an:

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

In diesem Beispiel geben Sie Ihre Werte an Stelle der Platzhaltertoken ein, die von <>-Klammern umgeben sind.

properties.configuration

Das properties.configuration Objekt einer Ressource enthält die folgenden Eigenschaften:

Eigenschaft Beschreibung Datentyp
activeRevisionsMode Wenn Sie auf single festlegen, werden alte Revisionen automatisch deaktiviert, und nur die neueste Revision bleibt aktiv. Wenn Sie auf multiple festlegen, können Sie mehrere Revisionen verwalten. Zeichenfolge
secrets Definiert Geheimniswerte in Ihrer Container-App Objekt
ingress Ein Objekt, das die öffentliche Zugriffskonfiguration einer Container-App definiert Objekt
registries Konfigurationsobjekt, das auf Anmeldeinformationen für private Containerregister verweist Mit secretref definierte Einträge verweisen auf das Geheimniskonfigurationsobjekt. Objekt
dapr Konfigurationsobjekt, das Dapr-Einstellungen für die Container-App definiert Objekt

Änderungen am Abschnitt configuration sind Änderungen am Anwendungsbereich, die keine neue Revision auslösen.

properties.template

Das properties.template Objekt einer Ressource enthält die folgenden Eigenschaften:

Eigenschaft Beschreibung Datentyp
revisionSuffix Ein Anzeigename für eine Revision Dieser Wert muss eindeutig sein, da die Runtime Konflikte mit vorhandenen Suffixwerten von Revisionsnamen ablehnt. Zeichenfolge
containers Konfigurationsobjekt, das definiert, welche Containerimages in der Container-App enthalten sind Objekt
scale Konfigurationsobjekt, das Skalierungsregeln für die Container-App definiert Objekt

Änderungen am Abschnitt template sind Änderungen am Revisionsbereich, die keine neue Revision auslösen.

Beispiele

Ausführliche Informationen zu Integritätssonden finden Sie unter "Integritätssonden" in Azure-Container-Apps.

Der folgende ARM-Vorlagenausschnitt stellt eine Container-App bereit.

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

Container-Apps-Auftrag

In den folgenden Tabellen werden die häufig verwendeten Eigenschaften in der Auftragsressource "Container-Apps" beschrieben. Eine vollständige Liste der Eigenschaften finden Sie in der REST-API-Referenz zu Azure-Container-Apps.

Resource

Das properties Objekt einer Container-Apps-Auftragsressource enthält die folgenden Eigenschaften:

Eigenschaft Beschreibung Datentyp Schreibgeschützt
environmentId Die Umgebungs-ID für Ihren Container-Apps-Auftrag. Diese Eigenschaft ist erforderlich, um einen Container-Apps-Auftrag zu erstellen. Wenn Sie YAML verwenden, können Sie stattdessen die Umgebungs-ID mithilfe der --environment Option in der Azure CLI angeben. Zeichenfolge Nein

Der environmentId-Wert nimmt die folgende Form an:

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

In diesem Beispiel geben Sie Ihre Werte an Stelle der Platzhaltertoken ein, die von <>-Klammern umgeben sind.

properties.configuration

Das properties.configuration Objekt einer Ressource enthält die folgenden Eigenschaften:

Eigenschaft Beschreibung Datentyp
triggerType Der Triggertyp für einen Container-Apps-Auftrag. Spezifische Konfiguration für jeden Triggertyp finden Sie unter Auftragstriggertypen Zeichenfolge
replicaTimeout Das Timeout in Sekunden für einen Container-Apps-Auftrag. integer
replicaRetryLimit Die Anzahl der Wiederholungen eines Container-Apps-Auftrags. integer

properties.template

Das properties.template Objekt einer Ressource enthält die folgenden Eigenschaften:

Eigenschaft Beschreibung Datentyp
containers Konfigurationsobjekt, das definiert, welche Containerimages im Auftrag enthalten sind. Objekt
scale Konfigurationsobjekt, das Skalierungsregeln für den Auftrag definiert. Objekt

Beispiele

Der folgende ARM-Vorlagenausschnitt stellt einen Container-Apps-Auftrag bereit.

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