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:
2023-05-01
(stabile)2023-08-01-preview
(anteprima)
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 | Sì |
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 | Sì |
latestRevisionFqdn |
URL della revisione più recente. | string | Sì |
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"
}
]
}
]
}
}
}