Delen via


Azure Container Apps ARM- en YAML-sjabloonspecificaties

Implementaties van Azure Container Apps worden mogelijk gemaakt door een ARM-sjabloon (Azure Resource Manager). Sommige CLI-opdrachten voor Container Apps bieden ook ondersteuning voor het gebruik van een YAML-sjabloon om een resource op te geven.

Dit artikel bevat voorbeelden van de ARM- en YAML-configuraties voor veelgebruikte Container Apps-resources. Zie Azure Resource Manager-sjablonen voor Container Apps voor Container Apps voor een volledige lijst met Container Apps-resources. De code die in dit artikel wordt vermeld, is alleen bedoeld als voorbeeld. Zie de JSON-definities voor uw vereiste API-versie voor volledige schema- en typegegevens.

API-versies

De nieuwste beheer-API-versies voor Azure Container Apps zijn:

Zie Microsoft.App wijzigingslogboek voor meer informatie over de verschillen tussen API-versies.

API-versies bijwerken

Als u een specifieke API-versie in ARM of Bicep wilt gebruiken, werkt u de versie bij waarnaar wordt verwezen in uw sjablonen. Als u de nieuwste API-versie in Azure CLI of Azure PowerShell wilt gebruiken, werkt u deze bij naar de nieuwste versie.

Werk Azure CLI en de Azure Container Apps-extensie bij door de volgende opdrachten uit te voeren:

az upgrade
az extension add -n containerapp --upgrade

Zie Azure PowerShell installeren om Azure PowerShell bij te werken.

Als u Azure Container Apps programmatisch wilt beheren met de nieuwste API-versie, gebruikt u de nieuwste versies van de beheer-SDK:

Container Apps-omgeving

In de volgende tabellen worden veelgebruikte eigenschappen beschreven die beschikbaar zijn in de Container Apps-omgevingsresource. Zie azure Container Apps REST API-naslaginformatie voor een volledige lijst met eigenschappen.

Bron

Een Container Apps-omgevingsresource bevat de volgende eigenschappen:

Eigenschappen Beschrijving Gegevenstype Alleen-lezen
daprAIInstrumentationKey De Instrumentatiesleutel van Application Insights die door Dapr wordt gebruikt. tekenreeks Nee
appLogsConfiguration De logboekregistratieconfiguratie van de omgeving. Object Nee
peerAuthentication MTLS-versleuteling inschakelen. Object Nee

Voorbeelden

In het volgende voorbeeld wordt een Container Apps-omgeving geïmplementeerd in een ARM-sjabloonfragment.

Notitie

De opdrachten voor het maken van container-app-omgevingen bieden geen ondersteuning voor YAML-configuratie-invoer.

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

Container-app

In de volgende tabellen worden de veelgebruikte eigenschappen in de container-app-resource beschreven. Zie azure Container Apps REST API-naslaginformatie voor een volledige lijst met eigenschappen.

Bron

Het object van properties een container-app-resource bevat de volgende eigenschappen:

Eigenschappen Beschrijving Gegevenstype Alleen-lezen
provisioningState De status van een langdurige bewerking, bijvoorbeeld wanneer er nieuwe containerrevisie wordt gemaakt. Mogelijke waarden zijn: inrichten, ingericht, mislukt. Controleer of de app actief is. tekenreeks Ja
environmentId De omgevings-id voor uw container-app. Dit is een vereiste eigenschap voor het maken van een container-app. Als u YAML gebruikt, kunt u in plaats daarvan de omgevings-id opgeven met behulp van de --environment optie in de Azure CLI. tekenreeks Nee
latestRevisionName De naam van de meest recente revisie. tekenreeks Ja
latestRevisionFqdn De URL van de meest recente revisie. tekenreeks Ja

De environmentId waarde heeft de volgende vorm:

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

In dit voorbeeld plaatst u de waarden in plaats van de tijdelijke aanduidingstokens tussen <> vierkante haken.

properties.configuration

Het object van properties.configuration een resource bevat de volgende eigenschappen:

Eigenschappen Beschrijving Gegevenstype
activeRevisionsMode Als u wilt instellen dat single oude revisies automatisch worden gedeactiveerd en alleen de meest recente revisie actief blijft. multiple Met deze instelling kunt u meerdere revisies onderhouden. tekenreeks
secrets Hiermee definieert u geheime waarden in uw container-app. object
ingress Object waarmee de configuratie van openbare toegankelijkheid van een container-app wordt gedefinieerd. object
registries Configuratieobject dat verwijst naar referenties voor privécontainerregisters. Vermeldingen die zijn gedefinieerd met secretref verwijzing naar het configuratieobject geheimen. object
dapr Configuratieobject waarmee de Dapr-instellingen voor de container-app worden gedefinieerd. object

Wijzigingen in de configuration sectie zijn wijzigingen in toepassingsbereik, waardoor er geen nieuwe revisie wordt geactiveerd.

properties.template

Het object van properties.template een resource bevat de volgende eigenschappen:

Eigenschappen Beschrijving Gegevenstype
revisionSuffix Een beschrijvende naam voor een revisie. Deze waarde moet uniek zijn omdat de runtime conflicten met bestaande achtervoegselwaarden voor revisienamen weigert. tekenreeks
containers Configuratieobject waarmee wordt gedefinieerd welke containerinstallatiekopieën worden opgenomen in de container-app. object
scale Configuratieobject waarmee schaalregels voor de container-app worden gedefinieerd. object

Wijzigingen in de template sectie zijn wijzigingen in het revisiebereik, waardoor een nieuwe revisie wordt geactiveerd.

Voorbeelden

Raadpleeg statustests in Azure Container Apps voor meer informatie over statustests.

In het volgende voorbeeld wordt een container-app geïmplementeerd met een ARM-sjabloonfragment.

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

In de volgende tabellen worden de veelgebruikte eigenschappen in de Container Apps-taakresource beschreven. Zie azure Container Apps REST API-naslaginformatie voor een volledige lijst met eigenschappen.

Bron

Het object van properties een Container Apps-taakresource bevat de volgende eigenschappen:

Eigenschappen Beschrijving Gegevenstype Alleen-lezen
environmentId De omgevings-id voor uw Container Apps-taak. Deze eigenschap is vereist voor het maken van een Container Apps-taak. Als u YAML gebruikt, kunt u in plaats daarvan de omgevings-id opgeven met behulp van de --environment optie in de Azure CLI. tekenreeks Nee

De environmentId waarde heeft de volgende vorm:

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

In dit voorbeeld plaatst u de waarden in plaats van de tijdelijke aanduidingstokens tussen <> vierkante haken.

properties.configuration

Het object van properties.configuration een resource bevat de volgende eigenschappen:

Eigenschappen Beschrijving Gegevenstype
triggerType Het type trigger voor een Container Apps-taak. Zie Takentriggertypen voor specifieke configuraties voor elk triggertype tekenreeks
replicaTimeout De time-out in seconden voor een Container Apps-taak. geheel getal
replicaRetryLimit Het aantal keren dat u een Container Apps-taak opnieuw wilt uitvoeren. geheel getal

properties.template

Het object van properties.template een resource bevat de volgende eigenschappen:

Eigenschappen Beschrijving Gegevenstype
containers Configuratieobject dat definieert welke containerinstallatiekopieën zijn opgenomen in de taak. object
scale Configuratieobject waarmee schaalregels voor de taak worden gedefinieerd. object

Voorbeelden

In het volgende voorbeeld implementeert het ARM-sjabloonfragment een Container Apps-taak.

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