Spesifikasi templat AZURE Container Apps ARM dan YAML

Penyebaran Azure Container Apps didukung oleh templat Azure Resource Manager (ARM). Beberapa perintah Container Apps CLI juga mendukung penggunaan template YAML untuk menentukan sumber daya.

Artikel ini menjelaskan konfigurasi ARM dan YAML untuk sumber daya Container Apps yang sering digunakan. Untuk daftar lengkap sumber daya Container Apps, lihat Templat Azure Resource Manager untuk Aplikasi Kontainer.

Versi API

Versi API manajemen terbaru untuk Azure Container Apps adalah:

Untuk mempelajari selengkapnya tentang perbedaan antara versi API, lihat Microsoft.App mengubah log.

Memperbarui versi API

Untuk menggunakan versi API tertentu di ARM atau Bicep, perbarui versi yang dirujuk dalam templat Anda. Untuk menggunakan versi API terbaru di Azure CLI atau Azure PowerShell, perbarui ke versi terbaru.

Perbarui Azure CLI dan ekstensi Azure Container Apps dengan menjalankan perintah berikut:

az upgrade
az extension add -n containerapp --upgrade

Untuk memperbarui Azure PowerShell, lihat Cara menginstal Azure PowerShell.

Untuk mengelola Azure Container Apps secara terprogram dengan versi API terbaru, gunakan versi terbaru SDK manajemen:

Lingkungan Container Apps

Tabel berikut ini menjelaskan properti yang umum digunakan yang tersedia di sumber daya lingkungan Container Apps. Untuk daftar lengkap properti, lihat Referensi REST API Azure Container Apps.

Sumber daya

Sumber daya lingkungan Container Apps mencakup properti berikut:

Properti Deskripsi Jenis data Baca saja
daprAIInstrumentationKey Kunci instrumentasi Application Insights yang digunakan oleh Dapr. string Tidak
appLogsConfiguration Konfigurasi pengelogan lingkungan. Objek Tidak
peerAuthentication Cara mengaktifkan enkripsi mTLS. Objek Tidak

Contoh

Contoh cuplikan templat ARM berikut menyebarkan lingkungan Container Apps.

Catatan

Perintah untuk membuat lingkungan aplikasi kontainer tidak mendukung input konfigurasi 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"
  }
}

Container Apps

Tabel berikut ini menjelaskan properti yang umum digunakan di sumber daya aplikasi kontainer. Untuk daftar lengkap properti, lihat Referensi REST API Azure Container Apps.

Sumber daya

Objek sumber daya properties aplikasi kontainer mencakup properti berikut:

Properti Deskripsi Jenis data Baca saja
provisioningState Kondisi operasi yang sudah berjalan lama, misalnya ketika revisi kontainer baru dibuat. Nilai yang mungkin termasuk: provisi, tersedia, gagal. Periksa apakah aplikasi siap dan berjalan. string Ya
environmentId ID lingkungan untuk aplikasi kontainer Anda. Ini adalah properti yang diperlukan untuk membuat aplikasi kontainer. Jika Anda menggunakan YAML, Anda dapat menentukan ID lingkungan menggunakan --environment opsi di Azure CLI sebagai gantinya. string Tidak
latestRevisionName Nama revisi terbaru. string Ya
latestRevisionFqdn URL revisi terbaru. string Ya

Nilai environmentId mengambil formulir berikut:

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

Dalam contoh ini, Anda menempatkan nilai di tempat token placeholder yang dikelilingi oleh tanda kurung <>.

properties.configuration

Objek sumber daya properties.configuration mencakup properti berikut:

Properti Deskripsi Jenis data
activeRevisionsMode Atur ke single untuk secara otomatis menonaktifkan revisi lama, dan hanya membuat revisi terbaru aktif. Atur ke multiple untuk memungkinkan Anda mempertahankan beberapa revisi. string
secrets Mendefinisikan nilai rahasia di aplikasi kontainer Anda. object
ingress Objek yang mendefinisikan konfigurasi aksesibilitas publik dari aplikasi kontainer. object
registries Objek konfigurasi yang mereferensikan info masuk untuk pendaftar kontainer privat. Entri yang didefinisikan dengan secretref mereferensikan objek konfigurasi rahasia. object
dapr Objek konfigurasi yang mendefinisikan pengaturan Dapr untuk aplikasi kontainer. object

Perubahan yang dilakukan pada bagian configuration adalah perubahan lingkup aplikasi, yang tidak memicu revisi baru.

properties.template

Objek sumber daya properties.template mencakup properti berikut:

Properti Deskripsi Jenis data
revisionSuffix Nama yang ramah untuk revisi. Nilai ini harus unik karena runtime menolak konflik dengan nilai akhiran nama revisi yang ada. string
containers Objek konfigurasi yang menentukan gambar kontainer apa yang disertakan dalam aplikasi kontainer. object
scale Objek konfigurasi yang mendefinisikan aturan skala untuk aplikasi kontainer. object

Perubahan yang dilakukan pada bagian template adalah perubahan lingkup revisi, yang memicu revisi baru.

Contoh

Untuk detail tentang pemeriksaan kesehatan, lihat Pemeriksaan kesehatan di Azure Container Apps.

Contoh cuplikan templat ARM berikut menyebarkan aplikasi kontainer.

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

Pekerjaan Aplikasi Kontainer

Tabel berikut ini menjelaskan properti yang umum digunakan di sumber daya pekerjaan Container Apps. Untuk daftar lengkap properti, lihat Referensi REST API Azure Container Apps.

Sumber daya

Objek sumber daya properties pekerjaan Container Apps mencakup properti berikut:

Properti Deskripsi Jenis data Baca saja
environmentId ID lingkungan untuk pekerjaan Aplikasi Kontainer Anda. Properti ini diperlukan untuk membuat pekerjaan Aplikasi Kontainer. Jika Anda menggunakan YAML, Anda dapat menentukan ID lingkungan menggunakan --environment opsi di Azure CLI sebagai gantinya. string Tidak

Nilai environmentId mengambil formulir berikut:

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

Dalam contoh ini, Anda menempatkan nilai di tempat token placeholder yang dikelilingi oleh tanda kurung <>.

properties.configuration

Objek sumber daya properties.configuration mencakup properti berikut:

Properti Deskripsi Jenis data
triggerType Jenis pemicu untuk pekerjaan Container Apps. Untuk konfigurasi tertentu untuk setiap jenis pemicu, lihat Jenis pemicu pekerjaan string
replicaTimeout Batas waktu dalam detik untuk pekerjaan Aplikasi Kontainer. Integer
replicaRetryLimit Berapa kali untuk mencoba kembali pekerjaan Container Apps. Integer

properties.template

Objek sumber daya properties.template mencakup properti berikut:

Properti Deskripsi Jenis data
containers Objek konfigurasi yang menentukan gambar kontainer apa yang disertakan dalam pekerjaan. object
scale Objek konfigurasi yang menentukan aturan skala untuk pekerjaan tersebut. object

Contoh

Contoh cuplikan templat ARM berikut menyebarkan pekerjaan 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"
            }
          ]
        }
      ]
    }
  }
}