Specifikace šablon Azure Container Apps ARM a YAML

Nasazení Azure Container Apps využívají šablonu Azure Resource Manageru (ARM). Některé příkazy rozhraní příkazového řádku Container Apps podporují také použití šablony YAML k zadání prostředku.

Tento článek obsahuje příklady konfigurací ARM a YAML pro často používané prostředky Container Apps. Úplný seznam prostředků Container Apps najdete v šablonách Azure Resource Manageru pro Container Apps. Kód uvedený v tomto článku je určený pouze pro ukázkové účely. Úplné informace o schématu a typu najdete v definicích JSON pro požadovanou verzi rozhraní API. Informace o verzích API najdete v článku Verze API.

Prostředí Container Apps

Následující tabulky popisují běžně používané vlastnosti dostupné v prostředku prostředí Container Apps. Úplný seznam vlastností najdete v referenčních informacích k rozhraní REST API služby Azure Container Apps.

Prostředek

Prostředek prostředí Container Apps obsahuje následující vlastnosti:

Vlastnost Popis Datový typ Jen pro čtení
daprAIInstrumentationKey Instrumentační klíč Application Insights, který používá Dapr. řetězec Ne
appLogsConfiguration Konfigurace protokolování prostředí. Objekt Ne
peerAuthentication Jak povolit šifrování mTLS Objekt Ne

Příklady

Následující příklad fragmentu šablony ARM nasadí prostředí Container Apps.

Poznámka:

Příkazy pro vytvoření prostředí kontejnerových aplikací nepodporují vstup konfigurace 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"
  }
}

Kontejnerová aplikace

Následující tabulky popisují běžně používané vlastnosti v prostředku aplikace kontejneru. Úplný seznam vlastností najdete v referenčních informacích k rozhraní REST API služby Azure Container Apps.

Prostředek

Konfigurace aplikace kontejneru zahrnuje vlastnost nejvyšší úrovně kind , což je volitelný řetězec použitý k vytvoření aplikace Functions nebo pracovního postupu.

Vlastnost Popis Datový typ Jen pro čtení
kind Druh aplikace, která se má vytvořit. V současné době podporuje functionapp a workflowapp. V budoucnu se můžou podporovat další hodnoty. Pokud tuto hodnotu vynecháte, vytvoří se ve výchozím nastavení standardní aplikace kontejneru. řetězec Ne

Objekt prostředku properties aplikace kontejneru obsahuje následující vlastnosti:

Vlastnost Popis Datový typ Jen pro čtení
provisioningState Stav dlouhotrvající operace, například při vytvoření nové revize kontejneru. Mezi možné hodnoty patří: zřizování, zřizování, neúspěšné. Zkontrolujte, jestli je aplikace spuštěná a spuštěná. řetězec Ano
environmentId ID prostředí pro vaši aplikaci kontejneru. Toto je požadovaná vlastnost pro vytvoření aplikace typu kontejner. Pokud používáte YAML, můžete místo toho zadat ID prostředí pomocí --environment možnosti v Azure CLI. řetězec Ne
latestRevisionName Název poslední revize. řetězec Ano
latestRevisionFqdn Adresa URL nejnovější revize. řetězec Ano

Hodnota environmentId má následující tvar:

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

V tomto příkladu umístíte hodnoty místo zástupných tokenů obklopených hranatými <> závorkami.

properties.configuration

Objekt prostředku properties.configuration obsahuje následující vlastnosti:

Vlastnost Popis Datový typ
activeRevisionsMode Nastavení pro single automatickou deaktivaci starých revizí a aktivní bude jenom nejnovější revize. Nastavení, které multiple vám umožní udržovat více revizí. řetězec
secrets Definuje hodnoty tajných kódů v aplikaci kontejneru. objekt
ingress Objekt, který definuje konfiguraci veřejné přístupnosti aplikace typu kontejner. objekt
registries Objekt konfigurace, který odkazuje na přihlašovací údaje pro privátní registry kontejnerů. Položky definované odkazem secretref na objekt konfigurace tajných kódů. objekt
dapr Objekt konfigurace, který definuje nastavení Dapr pro aplikaci kontejneru. objekt

Změny provedené v oddílu configuration jsou změny oboru aplikace, které neaktivují novou revizi.

properties.template

Objekt prostředku properties.template obsahuje následující vlastnosti:

Vlastnost Popis Datový typ
revisionSuffix Popisný název revize Tato hodnota musí být jedinečná, protože modul runtime odmítne všechny konflikty s existujícími hodnotami přípony názvu revize. řetězec
containers Objekt konfigurace, který definuje, jaké image kontejneru jsou součástí aplikace kontejneru. objekt
scale Objekt konfigurace, který definuje pravidla škálování pro aplikaci kontejneru. objekt

Změny provedené v oddílu template jsou změny v oboru revizí, které aktivují novou revizi.

Příklady

Podrobnosti o sondách stavu najdete v tématu Sondy stavu v Azure Container Apps.

Následující příklad fragmentu šablony ARM nasadí aplikaci typu kontejner.

{
  "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.contoso.com",
            "https://b.contoso.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"
        }
      ]
    }
  }
}

Následující příklad šablony ARM ukazuje, jak nasadit aplikaci Azure Functions ve službě 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 
  }
}

Úloha Container Apps

Následující tabulky popisují běžně používané vlastnosti v prostředku úlohy Container Apps. Úplný seznam vlastností najdete v referenčních informacích k rozhraní REST API služby Azure Container Apps.

Prostředek

Objekt prostředku properties úlohy Container Apps obsahuje následující vlastnosti:

Vlastnost Popis Datový typ Jen pro čtení
environmentId ID prostředí pro vaši úlohu Container Apps Tato vlastnost se vyžaduje k vytvoření úlohy Container Apps. Pokud používáte YAML, můžete místo toho zadat ID prostředí pomocí --environment možnosti v Azure CLI. řetězec Ne

Hodnota environmentId má následující tvar:

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

V tomto příkladu umístíte hodnoty místo zástupných tokenů obklopených hranatými <> závorkami.

properties.configuration

Objekt prostředku properties.configuration obsahuje následující vlastnosti:

Vlastnost Popis Datový typ
triggerType Typ triggeru pro úlohu Container Apps. Konkrétní konfiguraci pro jednotlivé typy aktivačních událostí najdete v tématu Typy triggerů úloh. řetězec
replicaTimeout Časový limit pro úlohu Container Apps v sekundách. integer
replicaRetryLimit Počet opakování úlohy Container Apps integer

properties.template

Objekt prostředku properties.template obsahuje následující vlastnosti:

Vlastnost Popis Datový typ
containers Objekt konfigurace, který definuje, jaké image kontejneru jsou součástí úlohy. objekt
scale Objekt konfigurace, který definuje pravidla škálování pro úlohu. objekt

Příklady

Následující příklad fragmentu šablony ARM nasadí úlohu 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"
            }
          ]
        }
      ]
    }
  }
}