Udostępnij za pośrednictwem


Specyfikacje szablonów arm i YAML usługi Azure Container Apps

Wdrożenia usługi Azure Container Apps są obsługiwane przez szablon usługi Azure Resource Manager (ARM). Niektóre polecenia interfejsu wiersza polecenia usługi Container Apps obsługują również używanie szablonu YAML do określania zasobu.

Ten artykuł zawiera przykłady konfiguracji usługi ARM i YAML dla często używanych zasobów usługi Container Apps. Aby uzyskać pełną listę zasobów usługi Container Apps, zobacz Szablony usługi Azure Resource Manager dla usługi Container Apps. Kod wymieniony w tym artykule jest przeznaczony tylko do celów przykładowych. Aby uzyskać pełne informacje o schemacie i typie, zobacz definicje JSON wymaganej wersji interfejsu API.

Wersje interfejsu API

Najnowsze wersje interfejsu API zarządzania dla usługi Azure Container Apps to:

Aby dowiedzieć się więcej o różnicach między wersjami interfejsu API, zobacz Microsoft.App dziennik zmian.

Aktualizowanie wersji interfejsu API

Aby użyć określonej wersji interfejsu API w usłudze ARM lub Bicep, zaktualizuj wersję przywołyną w szablonach. Aby użyć najnowszej wersji interfejsu API w interfejsie wiersza polecenia platformy Azure lub programie Azure PowerShell, zaktualizuj je do najnowszej wersji.

Zaktualizuj interfejs wiersza polecenia platformy Azure i rozszerzenie usługi Azure Container Apps, uruchamiając następujące polecenia:

az upgrade
az extension add -n containerapp --upgrade

Aby zaktualizować program Azure PowerShell, zobacz Jak zainstalować program Azure PowerShell.

Aby programowo zarządzać usługą Azure Container Apps przy użyciu najnowszej wersji interfejsu API, użyj najnowszych wersji zestawu SDK zarządzania:

Środowisko usługi Container Apps

W poniższych tabelach opisano często używane właściwości dostępne w zasobie środowiska usługi Container Apps. Aby uzyskać pełną listę właściwości, zobacz Dokumentacja interfejsu API REST usługi Azure Container Apps.

Zasób

Zasób środowiska usługi Container Apps zawiera następujące właściwości:

Właściwości opis Typ danych Tylko do odczytu
daprAIInstrumentationKey Klucz instrumentacji usługi Application Insights używany przez dapr. string Nie
appLogsConfiguration Konfiguracja rejestrowania środowiska. Objekt Nie.
peerAuthentication Jak włączyć szyfrowanie mTLS. Objekt Nie.

Przykłady

Poniższy przykładowy fragment kodu szablonu usługi ARM wdraża środowisko usługi Container Apps.

Uwaga

Polecenia służące do tworzenia środowisk aplikacji kontenera nie obsługują danych wejściowych konfiguracji 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"
  }
}

Aplikacja kontenera

W poniższych tabelach opisano często używane właściwości w zasobie aplikacji kontenera. Aby uzyskać pełną listę właściwości, zobacz Dokumentacja interfejsu API REST usługi Azure Container Apps.

Zasób

Obiekt zasobu aplikacji kontenera properties zawiera następujące właściwości:

Właściwości opis Typ danych Tylko do odczytu
provisioningState Stan długotrwałej operacji, na przykład podczas tworzenia nowej poprawki kontenera. Możliwe wartości to: aprowizowanie, aprowizowanie, niepowodzenie. Sprawdź, czy aplikacja jest uruchomiona. string Tak
environmentId Identyfikator środowiska dla aplikacji kontenera. Jest to właściwość wymagana do utworzenia aplikacji kontenera. Jeśli używasz języka YAML, możesz określić identyfikator środowiska przy użyciu --environment opcji w interfejsie wiersza polecenia platformy Azure. string Nie
latestRevisionName Nazwa najnowszej poprawki. string Tak
latestRevisionFqdn Adres URL najnowszej poprawki. string Tak

Wartość environmentId ma następującą formę:

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

W tym przykładzie wartości są umieszczane zamiast tokenów zastępczych otoczonych <> nawiasami kwadratowymi.

properties.configuration

Obiekt zasobu properties.configuration zawiera następujące właściwości:

Właściwości opis Typ danych
activeRevisionsMode Ustawienie automatycznie single dezaktywuje stare poprawki i zachowuje tylko najnowszą wersję aktywną. Ustawienie umożliwia multiple obsługę wielu poprawek. string
secrets Definiuje wartości wpisów tajnych w aplikacji kontenera. obiekt
ingress Obiekt definiujący publiczną konfigurację ułatwień dostępu aplikacji kontenera. obiekt
registries Obiekt konfiguracji odwołujący się do poświadczeń dla prywatnych rejestrów kontenerów. Wpisy zdefiniowane przy użyciu secretref odwołania do obiektu konfiguracji wpisów tajnych. obiekt
dapr Obiekt konfiguracji, który definiuje ustawienia języka Dapr dla aplikacji kontenera. obiekt

Zmiany wprowadzone w configuration sekcji to zmiany zakresu aplikacji, które nie wyzwalają nowej poprawki.

properties.template

Obiekt zasobu properties.template zawiera następujące właściwości:

Właściwości opis Typ danych
revisionSuffix Przyjazna nazwa poprawki. Ta wartość musi być unikatowa, ponieważ środowisko uruchomieniowe odrzuca wszelkie konflikty z istniejącymi wartościami sufiksów nazw poprawek. string
containers Obiekt konfiguracji definiujący, jakie obrazy kontenerów są zawarte w aplikacji kontenera. obiekt
scale Obiekt konfiguracji, który definiuje reguły skalowania dla aplikacji kontenera. obiekt

Zmiany wprowadzone w template sekcji to zmiany zakresu poprawek, które wyzwalają nową poprawkę.

Przykłady

Aby uzyskać szczegółowe informacje na temat sond kondycji, zobacz Sondy kondycji w usłudze Azure Container Apps.

Poniższy przykładowy fragment kodu szablonu usługi ARM wdraża aplikację kontenera.

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

Zadanie usługi Container Apps

W poniższych tabelach opisano często używane właściwości w zasobie zadania usługi Container Apps. Aby uzyskać pełną listę właściwości, zobacz Dokumentacja interfejsu API REST usługi Azure Container Apps.

Zasób

Obiekt zasobu properties zadania usługi Container Apps zawiera następujące właściwości:

Właściwości opis Typ danych Tylko do odczytu
environmentId Identyfikator środowiska dla zadania usługi Container Apps. Ta właściwość jest wymagana do utworzenia zadania usługi Container Apps. Jeśli używasz języka YAML, możesz określić identyfikator środowiska przy użyciu --environment opcji w interfejsie wiersza polecenia platformy Azure. string Nie

Wartość environmentId ma następującą formę:

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

W tym przykładzie wartości są umieszczane zamiast tokenów zastępczych otoczonych <> nawiasami kwadratowymi.

properties.configuration

Obiekt zasobu properties.configuration zawiera następujące właściwości:

Właściwości opis Typ danych
triggerType Typ wyzwalacza dla zadania usługi Container Apps. Aby uzyskać określoną konfigurację dla każdego typu wyzwalacza, zobacz Typy wyzwalaczy zadań string
replicaTimeout Limit czasu w sekundach zadania usługi Container Apps. integer
replicaRetryLimit Liczba ponownych prób wykonania zadania usługi Container Apps. integer

properties.template

Obiekt zasobu properties.template zawiera następujące właściwości:

Właściwości opis Typ danych
containers Obiekt konfiguracji, który definiuje, jakie obrazy kontenerów są zawarte w zadaniu. obiekt
scale Obiekt konfiguracji, który definiuje reguły skalowania dla zadania. obiekt

Przykłady

Poniższy przykładowy fragment kodu szablonu usługi ARM umożliwia wdrożenie zadania usługi 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"
            }
          ]
        }
      ]
    }
  }
}