Esercitazione: Distribuire un'applicazione di elaborazione in background con App Azure Container
L'uso di App Contenitore di Azure consente di distribuire applicazioni senza richiedere l'esposizione di endpoint pubblici. Usando le regole di scalabilità di App contenitore, l'applicazione può aumentare il numero di istanze e in base alla lunghezza della coda Archiviazione di Azure. Quando non sono presenti messaggi nella coda, l'app contenitore viene ridimensionata a zero.
Scopri come:
- Creare un ambiente app contenitore per distribuire le app contenitore
- Creare una coda Archiviazione di Azure per inviare messaggi all'app contenitore
- Distribuire l'applicazione di elaborazione in background come app contenitore
- Verificare che i messaggi della coda vengano elaborati dall'app contenitore
Configurazione
Per iniziare, accedere ad Azure. Eseguire il comando seguente e seguire le istruzioni per completare il processo di autenticazione.
az login
Installare quindi l'estensione App Azure Container per l'interfaccia della riga di comando.
az extension add --name containerapp --upgrade
Ora che l'estensione o il modulo corrente è installato, registrare lo Microsoft.App
spazio dei nomi.
Nota
Le risorse di App Azure Container sono state migrate dallo Microsoft.Web
spazio dei nomi allo Microsoft.App
spazio dei nomi . Per altri dettagli, vedere Migrazione dello spazio dei nomi da Microsoft.Web a Microsoft.App nel mese di marzo 2022.
az provider register --namespace Microsoft.App
Registrare il Microsoft.OperationalInsights
provider per l'area di lavoro Log Analytics di Monitoraggio di Azure, se non è stato usato in precedenza.
az provider register --namespace Microsoft.OperationalInsights
Impostare quindi le variabili di ambiente seguenti:
RESOURCE_GROUP="my-container-apps"
LOCATION="canadacentral"
CONTAINERAPPS_ENVIRONMENT="my-environment"
Con queste variabili definite, è possibile creare un gruppo di risorse per organizzare i servizi correlati alla nuova app contenitore.
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION
Con l'interfaccia della riga di comando aggiornata e un nuovo gruppo di risorse disponibile, è possibile creare e distribuire un ambiente di App contenitore.
Crea un ambiente
Un ambiente di App contenitore di Azure crea un limite sicuro intorno a un gruppo di app contenitore. Le app contenitore nello stesso ambiente vengono distribuite nella stessa rete virtuale e scrivono log nella stessa area di lavoro Log Analytics.
Le singole app contenitore vengono distribuite in un ambiente di App Azure Container. Per creare l'ambiente, eseguire il comando seguente:
az containerapp env create \
--name $CONTAINERAPPS_ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION"
Configurare una coda di archiviazione
Per iniziare, definire un nome per l'account di archiviazione. Archiviazione nomi di account devono essere univoci all'interno di Azure e avere una lunghezza compresa tra 3 e 24 caratteri contenente solo numeri e lettere minuscole.
STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"
Creare un account di archiviazione di Azure.
az storage account create \
--name $STORAGE_ACCOUNT_NAME \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION" \
--sku Standard_RAGRS \
--kind StorageV2
Ottenere quindi il stringa di connessione per la coda.
QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --out json | tr -d '"'`
È ora possibile creare la coda di messaggi.
az storage queue create \
--name "myqueue" \
--account-name $STORAGE_ACCOUNT_NAME \
--connection-string $QUEUE_CONNECTION_STRING
Infine, è possibile inviare un messaggio alla coda.
az storage message put \
--content "Hello Queue Reader App" \
--queue-name "myqueue" \
--connection-string $QUEUE_CONNECTION_STRING
Distribuire l'applicazione in background
Creare un file denominato queue.json e incollare il codice di configurazione seguente nel file.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"defaultValue": "canadacentral",
"type": "String"
},
"environment_name": {
"type": "String"
},
"queueconnection": {
"type": "secureString"
}
},
"variables": {},
"resources": [
{
"name": "queuereader",
"type": "Microsoft.App/containerApps",
"apiVersion": "2022-03-01",
"kind": "containerapp",
"location": "[parameters('location')]",
"properties": {
"managedEnvironmentId": "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]",
"configuration": {
"activeRevisionsMode": "single",
"secrets": [
{
"name": "queueconnection",
"value": "[parameters('queueconnection')]"
}]
},
"template": {
"containers": [
{
"image": "mcr.microsoft.com/azuredocs/containerapps-queuereader",
"name": "queuereader",
"env": [
{
"name": "QueueName",
"value": "myqueue"
},
{
"name": "QueueConnectionString",
"secretRef": "queueconnection"
}
]
}
],
"scale": {
"minReplicas": 1,
"maxReplicas": 10,
"rules": [
{
"name": "myqueuerule",
"azureQueue": {
"queueName": "myqueue",
"queueLength": 100,
"auth": [
{
"secretRef": "queueconnection",
"triggerParameter": "connection"
}
]
}
}
]
}
}
}
}]
}
È ora possibile creare e distribuire l'app contenitore.
az deployment group create --resource-group "$RESOURCE_GROUP" \
--template-file ./queue.json \
--parameters \
environment_name="$CONTAINERAPPS_ENVIRONMENT" \
queueconnection="$QUEUE_CONNECTION_STRING" \
location="$LOCATION"
Questo comando distribuisce l'applicazione demo dall'immagine del contenitore pubblico denominata mcr.microsoft.com/azuredocs/containerapps-queuereader
e imposta i segreti e le variabili di ambiente usate dall'applicazione.
L'applicazione viene ridimensionata su 10 repliche in base alla lunghezza della coda, come definito nella scale
sezione del modello di Resource Manager.
Verificare il risultato
L'app contenitore viene eseguita come processo in background. Quando arrivano messaggi dalla coda Archiviazione di Azure, l'applicazione crea voci di log in Log Analytics. Prima di poter eseguire query sui dati registrati, è necessario attendere alcuni minuti prima che l'analisi arrivi.
Eseguire il comando seguente per visualizzare i messaggi registrati. Questo comando richiede l'estensione Log Analytics, quindi accettare il prompt per installare l'estensione quando richiesto.
LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az containerapp env show --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`
az monitor log-analytics query \
--workspace $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
--analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'queuereader' and Log_s contains 'Message ID' | project Time=TimeGenerated, AppName=ContainerAppName_s, Revision=RevisionName_s, Container=ContainerName_s, Message=Log_s | take 5" \
--out table
Suggerimento
Problemi? Segnalare il problema in GitHub aprendo un problema nel repository di App contenitore di Azure.
Pulire le risorse
Al termine, eseguire il comando seguente per eliminare il gruppo di risorse che contiene le risorse di App contenitore.
Attenzione
Il comando seguente elimina il gruppo di risorse specificato e tutte le risorse contenute al suo interno. Se nel gruppo di risorse specificato sono presenti anche risorse diverse da quelle usate in questa esercitazione, verranno eliminate.
az group delete \
--resource-group $RESOURCE_GROUP