Azure Container Apps ARM ve YAML şablon belirtimleri

Azure Container Apps dağıtımları bir Azure Resource Manager (ARM) şablonuyla desteklenir. Bazı Container Apps CLI komutları, kaynak belirtmek için YAML şablonu kullanmayı da destekler.

Bu makale, sık kullanılan Container Apps kaynakları için ARM ve YAML yapılandırmalarının örneklerini içerir. Container Apps kaynaklarının tam listesi için bkz . Container Apps için Azure Resource Manager şablonları. Bu makalede listelenen kod yalnızca örnek amaçlıdır. Tam şema ve tür bilgileri için gerekli API sürümünüz için JSON tanımlarına bakın.

API sürümleri

Azure Container Apps için en son yönetim API'sinin sürümleri şunlardır:

API sürümleri arasındaki farklar hakkında daha fazla bilgi edinmek için bkz . değişiklik günlüğünü Microsoft.App.

API sürümlerini güncelleştirme

ARM veya Bicep'te belirli bir API sürümünü kullanmak için şablonlarınızda başvuruda bulunan sürümü güncelleştirin. Azure CLI veya Azure PowerShell'de en son API sürümünü kullanmak için bunları en son sürüme güncelleştirin.

Aşağıdaki komutları çalıştırarak Azure CLI'yi ve Azure Container Apps uzantısını güncelleştirin:

az upgrade
az extension add -n containerapp --upgrade

Azure PowerShell'i güncelleştirmek için bkz . Azure PowerShell'i yükleme.

Azure Container Apps'i en son API sürümüyle program aracılığıyla yönetmek için yönetim SDK'sının en son sürümlerini kullanın:

Container Apps ortamı

Aşağıdaki tablolarda, Container Apps ortam kaynağında yaygın olarak kullanılan özellikler açıklanmaktadır. Özelliklerin tam listesi için bkz . Azure Container Apps REST API başvurusu.

Kaynak

Container Apps ortam kaynağı aşağıdaki özellikleri içerir:

Özellik Açıklama Veri türü Salt Okunur
daprAIInstrumentationKey Dapr tarafından kullanılan Application Insights izleme anahtarı. Dize Hayır
appLogsConfiguration Ortamın günlük yapılandırması. Object Hayır
peerAuthentication mTLS şifrelemesini etkinleştirme. Object Hayır

Örnekler

Aşağıdaki örnek ARM şablonu parçacığı bir Container Apps ortamı dağıtır.

Not

Kapsayıcı uygulaması ortamları oluşturma komutları YAML yapılandırma girişini desteklemez.

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

Kapsayıcı uygulaması

Aşağıdaki tablolarda kapsayıcı uygulaması kaynağında yaygın olarak kullanılan özellikler açıklanmaktadır. Özelliklerin tam listesi için bkz . Azure Container Apps REST API başvurusu.

Kaynak

Kapsayıcı uygulaması kaynağının properties nesnesi aşağıdaki özellikleri içerir:

Özellik Açıklama Veri türü Salt Okunur
provisioningState Uzun süre çalışan bir işlemin durumu, örneğin yeni kapsayıcı düzeltmesi oluşturulduğunda. Olası değerler şunlardır: sağlama, sağlandı, başarısız. Uygulamanın çalışır durumda olup olmadığını denetleyin. string Yes
environmentId Kapsayıcı uygulamanızın ortam kimliği. Bu, kapsayıcı uygulaması oluşturmak için gerekli bir özelliktir. YAML kullanıyorsanız, bunun yerine Azure CLI'daki seçeneği kullanarak --environment ortam kimliğini belirtebilirsiniz. Dize Hayır
latestRevisionName En son düzeltmenin adı. string Yes
latestRevisionFqdn En son düzeltmenin URL'si. string Yes

Değer environmentId aşağıdaki biçimi alır:

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

Bu örnekte, değerlerinizi köşeli ayraçlarla çevrili <> yer tutucu belirteçlerin yerine koyarsınız.

properties.configuration

Kaynağın properties.configuration nesnesi aşağıdaki özellikleri içerir:

Özellik Açıklama Veri türü
activeRevisionsMode ayarı single eski düzeltmeleri otomatik olarak devre dışı bırakır ve yalnızca en son düzeltmeyi etkin tutar. ayarı multiple , birden çok düzeltmeyi korumanıza olanak tanır. Dize
secrets Kapsayıcı uygulamanızdaki gizli dizi değerlerini tanımlar. nesne
ingress Kapsayıcı uygulamasının genel erişilebilirlik yapılandırmasını tanımlayan nesne. nesne
registries Özel kapsayıcı kayıt defterleri için kimlik bilgilerine başvuran yapılandırma nesnesi. ile secretref tanımlanan girdiler gizli dizi yapılandırma nesnesine başvurur. nesne
dapr Kapsayıcı uygulaması için Dapr ayarlarını tanımlayan yapılandırma nesnesi. nesne

Bölümünde yapılan configuration değişiklikler uygulama kapsamı değişiklikleridir ve yeni bir düzeltme tetiklemez.

properties.template

Kaynağın properties.template nesnesi aşağıdaki özellikleri içerir:

Özellik Açıklama Veri türü
revisionSuffix Düzeltme için kolay ad. Çalışma zamanı var olan düzeltme adı soneki değerleriyle çakışmaları reddettiği için bu değer benzersiz olmalıdır. Dize
containers Kapsayıcı uygulamasına hangi kapsayıcı görüntülerinin dahil olduğunu tanımlayan yapılandırma nesnesi. nesne
scale Kapsayıcı uygulaması için ölçek kurallarını tanımlayan yapılandırma nesnesi. nesne

bölümünde yapılan template değişiklikler, yeni bir düzeltmeyi tetikleyen düzeltme kapsamı değişiklikleridir.

Örnekler

Sistem durumu yoklamaları hakkında ayrıntılı bilgi için bkz. Azure Container Apps'te sistem durumu yoklamaları.

Aşağıdaki örnek ARM şablonu parçacığı bir kapsayıcı uygulaması dağıtır.

{
  "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 işi

Aşağıdaki tablolarda, Container Apps iş kaynağında yaygın olarak kullanılan özellikler açıklanmaktadır. Özelliklerin tam listesi için bkz . Azure Container Apps REST API başvurusu.

Kaynak

Container Apps iş kaynağının properties nesnesi aşağıdaki özellikleri içerir:

Özellik Açıklama Veri türü Salt Okunur
environmentId Container Apps işinizin ortam kimliği. Bu özellik bir Container Apps işi oluşturmak için gereklidir. YAML kullanıyorsanız, bunun yerine Azure CLI'daki seçeneği kullanarak --environment ortam kimliğini belirtebilirsiniz. Dize Hayır

Değer environmentId aşağıdaki biçimi alır:

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

Bu örnekte, değerlerinizi köşeli ayraçlarla çevrili <> yer tutucu belirteçlerin yerine koyarsınız.

properties.configuration

Kaynağın properties.configuration nesnesi aşağıdaki özellikleri içerir:

Özellik Açıklama Veri türü
triggerType Container Apps işinin tetikleyici türü. Her tetikleyici türü için belirli bir yapılandırma için bkz . İşler tetikleyici türleri Dize
replicaTimeout Bir Container Apps işi için saniyeler içinde zaman aşımı. integer
replicaRetryLimit Container Apps işini yeniden deneme sayısı. integer

properties.template

Kaynağın properties.template nesnesi aşağıdaki özellikleri içerir:

Özellik Açıklama Veri türü
containers İşe hangi kapsayıcı görüntülerinin dahil olduğunu tanımlayan yapılandırma nesnesi. nesne
scale İş için ölçek kurallarını tanımlayan yapılandırma nesnesi. nesne

Örnekler

Aşağıdaki örnek ARM şablonu parçacığı bir Container Apps işi dağıtır.

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