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 popisuje konfigurace 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.

Verze rozhraní API

Nejnovější verze rozhraní API pro správu pro Azure Container Apps jsou:

Další informace o rozdílech mezi verzemi rozhraní API najdete v Microsoft.App protokolu změn.

Aktualizace verzí rozhraní API

Pokud chcete použít konkrétní verzi rozhraní API v ARM nebo Bicep, aktualizujte verzi, na které odkazuje vaše šablony. Pokud chcete použít nejnovější verzi rozhraní API v Azure CLI nebo Azure PowerShellu, aktualizujte je na nejnovější verzi.

Spuštěním následujících příkazů aktualizujte Azure CLI a rozšíření Azure Container Apps:

az upgrade
az extension add -n containerapp --upgrade

Informace o aktualizaci Azure PowerShellu najdete v tématu Postup instalace Azure PowerShellu.

Pokud chcete programově spravovat Azure Container Apps s nejnovější verzí rozhraní API, použijte nejnovější verze sady SDK pro správu:

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.

Resource

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

Vlastnost Popis Datový typ Jen pro čtení
daprAIInstrumentationKey Instrumentační klíč aplikace Přehledy používaný jazykem Dapr. string No
appLogsConfiguration Konfigurace protokolování prostředí. Object No
peerAuthentication Jak povolit šifrování mTLS Object No

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

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.

Resource

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á. string 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. string No
latestRevisionName Název poslední revize. string Ano
latestRevisionFqdn Adresa URL nejnovější revize. string 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í. string
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. string
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/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"
        }
      ]
    }
  }
}

Ú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.

Resource

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. string No

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