Share via


Specifikationer för AZURE Container Apps ARM- och YAML-mallar

Azure Container Apps-distributioner drivs av en ARM-mall (Azure Resource Manager). Vissa CLI-kommandon för Container Apps stöder också användning av en YAML-mall för att ange en resurs.

Den här artikeln beskriver ARM- och YAML-konfigurationerna för resurser för containerappar som används ofta. En fullständig lista över Container Apps-resurser finns i Azure Resource Manager-mallar för Container Apps.

API-versioner

De senaste api-versionerna för hantering av Azure Container Apps är:

Mer information om skillnaderna mellan API-versioner finns i Microsoft.App ändringslogg.

Uppdatera API-versioner

Om du vill använda en specifik API-version i ARM eller Bicep uppdaterar du den version som refereras till i dina mallar. Om du vill använda den senaste API-versionen i Azure CLI eller Azure PowerShell uppdaterar du dem till den senaste versionen.

Uppdatera Azure CLI och Azure Container Apps-tillägget genom att köra följande kommandon:

az upgrade
az extension add -n containerapp --upgrade

Information om hur du uppdaterar Azure PowerShell finns i Så här installerar du Azure PowerShell.

Om du vill hantera Azure Container Apps programmatiskt med den senaste API-versionen använder du de senaste versionerna av hanterings-SDK:n:

Container Apps-miljö

I följande tabeller beskrivs vanliga egenskaper som är tillgängliga i miljöresursen Container Apps. En fullständig lista över egenskaper finns i REST API-referensen för Azure Container Apps.

Resurs

En Container Apps-miljöresurs innehåller följande egenskaper:

Property beskrivning Datatyp Skrivskyddad
daprAIInstrumentationKey Application Insights-instrumentationsnyckeln som används av Dapr. sträng Nej
appLogsConfiguration Miljöns loggningskonfiguration. Object Nej
peerAuthentication Så här aktiverar du mTLS-kryptering. Object Nej

Exempel

Följande exempel på ARM-mallfragment distribuerar en Container Apps-miljö.

Kommentar

Kommandona för att skapa containerappmiljöer stöder inte YAML-konfigurationsindata.

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

Containerapp

I följande tabeller beskrivs de vanligaste egenskaperna i containerappresursen. En fullständig lista över egenskaper finns i REST API-referensen för Azure Container Apps.

Resurs

Objektet för en containerappresurs properties innehåller följande egenskaper:

Property beskrivning Datatyp Skrivskyddad
provisioningState Tillståndet för en tidskrävande åtgärd, till exempel när ny containerrevision skapas. Möjliga värden är: etablering, etablerad, misslyckad. Kontrollera om appen är igång. sträng Ja
environmentId Miljö-ID för din containerapp. Det här är en obligatorisk egenskap för att skapa en containerapp. Om du använder YAML kan du ange miljö-ID:t med hjälp av --environment alternativet i Azure CLI i stället. sträng Nej
latestRevisionName Namnet på den senaste revisionen. sträng Ja
latestRevisionFqdn Den senaste revisionens URL. sträng Ja

Värdet environmentId har följande formulär:

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

I det här exemplet placerar du dina värden i stället för platshållartoken omgivna av <> hakparenteser.

properties.configuration

Ett resursobjekt properties.configuration innehåller följande egenskaper:

Property beskrivning Datatyp
activeRevisionsMode Inställningen inaktiverar single automatiskt gamla revisioner och håller bara den senaste revisionen aktiv. Med inställningen kan multiple du underhålla flera revisioner. sträng
secrets Definierar hemliga värden i containerappen. objekt
ingress Objekt som definierar offentlig tillgänglighetskonfiguration för en containerapp. objekt
registries Konfigurationsobjekt som refererar till autentiseringsuppgifter för privata containerregister. Poster som definierats med secretref referens till konfigurationsobjektet hemligheter. objekt
dapr Konfigurationsobjekt som definierar Dapr-inställningarna för containerappen. objekt

Ändringar som görs i configuration avsnittet är ändringar i programomfattningen som inte utlöser en ny revision.

properties.template

Ett resursobjekt properties.template innehåller följande egenskaper:

Property beskrivning Datatyp
revisionSuffix Ett eget namn för en revision. Det här värdet måste vara unikt eftersom körningen avvisar eventuella konflikter med befintliga suffixvärden för revisionsnamn. sträng
containers Konfigurationsobjekt som definierar vilka containeravbildningar som ingår i containerappen. objekt
scale Konfigurationsobjekt som definierar skalningsregler för containerappen. objekt

Ändringar som görs i template avsnittet är ändringar i revisionsomfattningen, vilket utlöser en ny revision.

Exempel

Mer information om hälsoavsökningar finns i Hälsoavsökningar i Azure Container Apps.

Följande exempel på ARM-mallfragment distribuerar en containerapp.

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

I följande tabeller beskrivs de vanliga egenskaperna i jobbresursen Container Apps. En fullständig lista över egenskaper finns i REST API-referensen för Azure Container Apps.

Resurs

Objektet för en Container Apps-jobbresurs properties innehåller följande egenskaper:

Property beskrivning Datatyp Skrivskyddad
environmentId Miljö-ID:t för ditt Container Apps-jobb. Den här egenskapen krävs för att skapa ett Container Apps-jobb. Om du använder YAML kan du ange miljö-ID:t med hjälp av --environment alternativet i Azure CLI i stället. sträng Nej

Värdet environmentId har följande formulär:

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

I det här exemplet placerar du dina värden i stället för platshållartoken omgivna av <> hakparenteser.

properties.configuration

Ett resursobjekt properties.configuration innehåller följande egenskaper:

Property beskrivning Datatyp
triggerType Typen av utlösare för ett Container Apps-jobb. Specifik konfiguration för varje utlösartyp finns i Jobbutlösartyper sträng
replicaTimeout Tidsgränsen i sekunder för ett Container Apps-jobb. integer
replicaRetryLimit Antal gånger som ett Container Apps-jobb ska försöka igen. integer

properties.template

Ett resursobjekt properties.template innehåller följande egenskaper:

Property beskrivning Datatyp
containers Konfigurationsobjekt som definierar vilka containeravbildningar som ingår i jobbet. objekt
scale Konfigurationsobjekt som definierar skalningsregler för jobbet. objekt

Exempel

I följande exempel distribuerar ARM-mallfragmentet ett Container Apps-jobb.

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