Specifiche del modello ARM e YAML di App Azure Container

Le distribuzioni di App Contenitore di Azure sono basate su un modello di Azure Resource Manager (ARM). Alcuni comandi dell'interfaccia della riga di comando di App contenitore supportano anche l'uso di un modello YAML per specificare una risorsa.

Questo articolo include esempi di configurazioni ARM e YAML per le risorse di App contenitore usate di frequente. Per un elenco completo delle risorse di App contenitore, vedere Modelli di Azure Resource Manager per app contenitore. Il codice elencato in questo articolo è solo a scopo esemplificativo. Per informazioni complete sullo schema e sul tipo, vedere le definizioni JSON per la versione dell'API richiesta.

Versioni dell'API

Le versioni più recenti dell'API di gestione per le app Azure Container sono:

Per altre informazioni sulle differenze tra le versioni dell'API, vedere Microsoft.App log delle modifiche.

Aggiornamento delle versioni dell'API

Per usare una versione dell'API specifica in ARM o Bicep, aggiornare la versione a cui si fa riferimento nei modelli. Per usare la versione più recente dell'API nell'interfaccia della riga di comando di Azure o in Azure PowerShell, aggiornarle alla versione più recente.

Aggiornare l'interfaccia della riga di comando di Azure e l'estensione App Azure Container eseguendo i comandi seguenti:

az upgrade
az extension add -n containerapp --upgrade

Per aggiornare Azure PowerShell, vedere Come installare Azure PowerShell.

Per gestire app Azure Container a livello di codice con la versione più recente dell'API, usare le versioni più recenti dell'SDK di gestione:

Ambiente delle app contenitore

Le tabelle seguenti descrivono le proprietà di uso comune disponibili nella risorsa ambiente App contenitore. Per un elenco completo delle proprietà, vedere Informazioni di riferimento sulle API REST di App contenitore di Azure.

Conto risorse

Una risorsa di ambiente App contenitore include le proprietà seguenti:

Proprietà Descrizione Tipo di dati Sola lettura
daprAIInstrumentationKey Chiave di strumentazione di Application Insights usata da Dapr. string No
appLogsConfiguration Configurazione di registrazione dell'ambiente. Object No
peerAuthentication Come abilitare la crittografia mTLS. Object No

Esempi

Il frammento di modello di Resource Manager di esempio seguente distribuisce un ambiente App contenitore.

Nota

I comandi per creare ambienti di app contenitore non supportano l'input di configurazione 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"
  }
}

App contenitore

Le tabelle seguenti descrivono le proprietà comunemente usate nella risorsa dell'app contenitore. Per un elenco completo delle proprietà, vedere Informazioni di riferimento sulle API REST di App contenitore di Azure.

Conto risorse

L'oggetto di una risorsa dell'app properties contenitore include le proprietà seguenti:

Proprietà Descrizione Tipo di dati Sola lettura
provisioningState Stato di un'operazione a esecuzione prolungata, ad esempio quando viene creata una nuova revisione del contenitore. I valori possibili includono: provisioning, provisioning, non riuscito. Controllare se l'app è attiva e in esecuzione. string
environmentId ID ambiente per l'app contenitore. Si tratta di una proprietà obbligatoria per creare un'app contenitore. Se si usa YAML, è possibile specificare l'ID ambiente usando l'opzione --environment nell'interfaccia della riga di comando di Azure. string No
latestRevisionName Nome della revisione più recente. string
latestRevisionFqdn URL della revisione più recente. string

Il environmentId valore assume il formato seguente:

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

In questo esempio i valori vengono inseriti al posto dei token segnaposto racchiusi tra <> parentesi quadre.

properties.configuration

L'oggetto di properties.configuration una risorsa include le proprietà seguenti:

Proprietà Descrizione Tipo di dati
activeRevisionsMode L'impostazione su single disattiva automaticamente le revisioni precedenti e mantiene attiva solo la revisione più recente. L'impostazione su multiple consente di gestire più revisioni. string
secrets Definisce i valori dei segreti nell'app contenitore. oggetto
ingress Oggetto che definisce la configurazione di accessibilità pubblica di un'app contenitore. oggetto
registries Oggetto di configurazione che fa riferimento alle credenziali per i registri contenitori privati. Voci definite con secretref riferimento all'oggetto di configurazione dei segreti. oggetto
dapr Oggetto di configurazione che definisce le impostazioni dapr per l'app contenitore. oggetto

Le modifiche apportate alla configuration sezione sono modifiche all'ambito dell'applicazione, che non attivano una nuova revisione.

properties.template

L'oggetto di properties.template una risorsa include le proprietà seguenti:

Proprietà Descrizione Tipo di dati
revisionSuffix Nome descrittivo per una revisione. Questo valore deve essere univoco perché il runtime rifiuta eventuali conflitti con i valori del suffisso del nome di revisione esistenti. string
containers Oggetto di configurazione che definisce le immagini del contenitore incluse nell'app contenitore. oggetto
scale Oggetto di configurazione che definisce le regole di scalabilità per l'app contenitore. oggetto

Le modifiche apportate alla sezione sono modifiche all'ambito template di revisione, che attivano una nuova revisione.

Esempi

Per informazioni dettagliate sui probe di integrità, vedere Probe di integrità in App Azure Container.

Il frammento di modello di Resource Manager di esempio seguente distribuisce un'app contenitore.

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

Processo app contenitore

Le tabelle seguenti descrivono le proprietà comunemente usate nella risorsa processo app contenitore. Per un elenco completo delle proprietà, vedere Informazioni di riferimento sulle API REST di App contenitore di Azure.

Conto risorse

L'oggetto della risorsa processo properties app contenitore include le proprietà seguenti:

Proprietà Descrizione Tipo di dati Sola lettura
environmentId ID ambiente per il processo di App contenitore. Questa proprietà è necessaria per creare un processo app contenitore. Se si usa YAML, è possibile specificare l'ID ambiente usando l'opzione --environment nell'interfaccia della riga di comando di Azure. string No

Il environmentId valore assume il formato seguente:

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

In questo esempio i valori vengono inseriti al posto dei token segnaposto racchiusi tra <> parentesi quadre.

properties.configuration

L'oggetto di properties.configuration una risorsa include le proprietà seguenti:

Proprietà Descrizione Tipo di dati
triggerType Tipo di trigger per un processo di App contenitore. Per una configurazione specifica per ogni tipo di trigger, vedere Tipi di trigger di processi string
replicaTimeout Timeout in secondi per un processo di App contenitore. integer
replicaRetryLimit Numero di tentativi di ripetizione di un processo di App contenitore. integer

properties.template

L'oggetto di properties.template una risorsa include le proprietà seguenti:

Proprietà Descrizione Tipo di dati
containers Oggetto di configurazione che definisce le immagini del contenitore incluse nel processo. oggetto
scale Oggetto di configurazione che definisce le regole di scalabilità per il processo. oggetto

Esempi

Il frammento di modello di Resource Manager di esempio seguente distribuisce un processo di App contenitore.

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