Tutoriel : Déployer une application de traitement en arrière-plan avec Azure Container Apps

L’utilisation d’Azure Container Apps vous permet de déployer des applications sans avoir à exposer des points de terminaison publics. En utilisant des règles de mise à l’échelle Container Apps, l’application peut effectuer un scale-out ou un scale-in en fonction de la longueur de la file d’attente de stockage Azure. Lorsqu’il n’y a aucun message dans la file d’attente, l’application conteneur effectue un scale-in à zéro.

Vous allez apprendre à effectuer les actions suivantes :

  • Créer un environnement Container Apps pour déployer vos applications de conteneur
  • Créer une file d’attente stockage Azure pour envoyer des messages à l’application conteneur
  • Déployer votre application de traitement en arrière-plan en tant qu’application conteneur
  • Vérifier que les messages de la file d’attente sont traités par l’application conteneur

Paramétrage

Pour commencer, connectez-vous à Azure. Exécutez la commande suivante et suivez les invites pour terminer le processus d’authentification.

az login

Ensuite, installez l’extension Azure Container Apps pour l’interface CLI.

az extension add --name containerapp --upgrade

Après avoir installé la version actuelle de l’extension ou du module, inscrivez l’espace de noms Microsoft.App.

Notes

Les ressources Azure Container Apps ont migré de l’espace de noms Microsoft.Web vers l’espace de noms Microsoft.App. Pour plus d’informations, reportez-vous à Migration de l’espace de noms de Microsoft.Web vers Microsoft.App en mars 2022.

az provider register --namespace Microsoft.App

Inscrivez le fournisseur Microsoft.OperationalInsights dans l’espace de travail Azure Monitor Log Analytics si vous ne l’avez pas déjà utilisé.

az provider register --namespace Microsoft.OperationalInsights

Ensuite, définissez les variables d’environnement suivantes :

RESOURCE_GROUP="my-container-apps"
LOCATION="canadacentral"
CONTAINERAPPS_ENVIRONMENT="my-environment"

Une fois ces variables définies, vous pouvez créer un groupe de ressources pour organiser les services liés à votre nouvelle application conteneur.

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION

Une fois l’interface CLI mise à niveau et un nouveau groupe de ressources disponible, vous pouvez créer un environnement Container Apps et déployer votre application de conteneur.

Créer un environnement

Un environnement dans Azure Container Apps crée une limite sécurisée autour d’un groupe d’applications de conteneur. Les applications de conteneur déployées dans le même environnement sont déployées dans le même réseau virtuel et écrivent les journaux dans le même espace de travail Log Analytics.


Les applications de conteneur sont déployées dans un environnement Azure Container Apps. Pour créer l’environnement, exécutez la commande suivante :

az containerapp env create \
  --name $CONTAINERAPPS_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION"

Configurer une file d’attente de stockage

Commencez par définir un nom pour le compte de stockage. Les noms des comptes de stockage doivent être uniques dans Azure et comporter entre 3 et 24 caractères, uniquement des lettres minuscules et des chiffres.

STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"

Création d’un compte Azure Storage.

az storage account create \
  --name $STORAGE_ACCOUNT_NAME \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --sku Standard_RAGRS \
  --kind StorageV2

Ensuite, obtenez la chaîne de connexion pour la file d’attente.

QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --out json | tr -d '"'`

Vous pouvez maintenant créer la file d’attente de messages.

az storage queue create \
  --name "myqueue" \
  --account-name $STORAGE_ACCOUNT_NAME \
  --connection-string $QUEUE_CONNECTION_STRING

Enfin, vous pouvez envoyer un message à la file d’attente.

az storage message put \
  --content "Hello Queue Reader App" \
  --queue-name "myqueue" \
  --connection-string $QUEUE_CONNECTION_STRING

Déployer l’application en arrière-plan

Créez un fichier nommé queue.json et collez le code de configuration suivant dans le fichier.

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

Vous pouvez désormais créer et déployer votre application conteneur.

az deployment group create --resource-group "$RESOURCE_GROUP" \
  --template-file ./queue.json \
  --parameters \
    environment_name="$CONTAINERAPPS_ENVIRONMENT" \
    queueconnection="$QUEUE_CONNECTION_STRING" \
    location="$LOCATION"

Cette commande déploie l’application de démonstration à partir de l’image de conteneur publique appelée mcr.microsoft.com/azuredocs/containerapps-queuereader et définit les variables de secrets et d’environnements utilisées par l’application.

L’application effectue un scale-out jusqu’à 10 réplicas en fonction de la longueur de la file d’attente définie dans la section scale du modèle ARM.

Vérifier le résultat

L’application conteneur s’exécute en tant que processus en arrière-plan. À mesure que les messages arrivent de la file d’attente de stockage Azure, l’application crée des entrées de journal dans Log Analytics. Avant de pouvoir interroger les données journalisées, attendez quelques minutes le temps que l’analytique soit générée pour la première fois.

Exécutez la commande suivante pour afficher les messages journalisés. Cette commande requiert l’extension log Analytics. vous devez donc accepter l’invite d’installation de l’extension lorsque vous y êtes invité.

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

Conseil

Vous rencontrez des problèmes ? Faites-le nous savoir sur GitHub en ouvrant un problème dans le dépôt Azure Container Apps.

Nettoyer les ressources

Une fois que vous avez terminé, exécutez la commande suivante pour supprimer le groupe de ressources qui contient vos ressources Container Apps.

Attention

La commande suivante supprime le groupe de ressources spécifié et toutes les ressources qu’il contient. Si des ressources en dehors du cadre de ce tutoriel existent dans le groupe de ressources spécifié, elles seront également supprimées.

az group delete \
  --resource-group $RESOURCE_GROUP