Partager via


Tutoriel : Déployer une application Dapr sur Azure Container Apps à l’aide d’un modèle Azure Resource Manager ou Bicep

Dapr (Distributed Application Runtime) est un runtime qui vous permet de générer des microservices résilients, sans état et avec état. Dans ce tutoriel, un exemple de solution Dapr est déployé sur Azure Container Apps via un modèle Azure Resource Manager (ARM) ou Bicep.

Vous allez apprendre à effectuer les actions suivantes :

  • Créer une instance Stockage Blob Azure pour l’utiliser comme magasin d’état Dapr
  • Déployer un environnement Container Apps pour héberger des applications conteneur
  • Déployez deux applications conteneur compatibles avec Dapr : une qui produit des commandes, et une autre qui consomme des commandes puis les stocke
  • Attribuer une identité affectée par l’utilisateur à une application conteneur et lui fournir l’attribution de rôle appropriée pour s’authentifier auprès du magasin d’états Dapr
  • Vérifier l’interaction entre les deux microservices.

Grâce à Azure Container Apps, vous disposez d’une version complètement managée des API Dapr lors de la création de microservices. Quand vous utilisez Dapr dans Azure Container Apps, vous pouvez autoriser les side-car à s’exécuter à côté de vos microservices qui fournissent un ensemble complet de fonctionnalités.

Dans ce tutoriel, vous déployez la solution à partir du démarrage rapide Hello World Dapr.

L’application comporte les éléments suivants :

  • Une application de conteneur client (Python) pour générer des messages
  • Une application de conteneur de service (Node) pour consommer ces messages et les conserver dans un magasin d’état

Le diagramme d’architecture suivant illustre les composants qui composent ce tutoriel :

Diagramme d’architecture pour microservices Hello World Dapr sur Azure Container Apps

Prérequis

  • Un compte Azure avec un abonnement actif est requis. Si vous n’en avez pas déjà un, vous pouvez créer un compte gratuit.
  • Un compte GitHub. Si vous n’en avez pas, inscrivez-vous gratuitement.

Programme d’installation

Pour vous connecter à Azure à partir de l’interface CLI, exécutez la commande suivante et suivez les invites pour procéder à l’authentification.

az login

Pour être sûr d’utiliser la dernière version de l’interface CLI, exécutez la commande de mise à niveau.

az upgrade

Ensuite, installez ou mettez à jour l’extension Azure Container Apps pour l’interface CLI.

Si vous recevez des erreurs concernant des paramètres manquants lorsque vous exécutez des commandes az containerapp dans Azure CLI ou les cmdlets du module Az.App dans Azure PowerShell, assurez-vous que la dernière version de l’extension Azure Container Apps est installée.

az extension add --name containerapp --upgrade

Remarque

À compter de mai 2024, les extensions Azure CLI n’activent plus les fonctionnalités en préversion par défaut. Pour accéder aux fonctionnalités en préversion de Container Apps, installez l’extension Container Apps avec --allow-preview true.

az extension add --name containerapp --upgrade --allow-preview true

Maintenant que la version actuelle de l’extension ou du module est installée, inscrivez les espaces de noms Microsoft.App et Microsoft.OperationalInsights.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Définir des variables d’environnement

Définissez les variables d’environnement suivantes. Remplacez les <ESPACES RÉSERVÉS> par vos valeurs :

RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"

Création d’un groupe de ressources Azure

Créez un groupe de ressources pour organiser les services liés au déploiement de votre application de conteneur.

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

Préparer le référentiel GitHub

Accédez au référentiel contenant les modèles ARM et Bicep utilisés pour déployer la solution.

Sélectionnez le bouton Dupliquer (fork) en haut du référentiel pour dupliquer le référentiel dans votre compte.

Vous pouvez maintenant cloner votre duplication (fork) pour l’utiliser localement.

Utilisez la commande git suivante pour cloner votre référentiel dupliqué dans le répertoire acadapr-templates.

git clone https://github.com/$GITHUB_USERNAME/Tutorial-Deploy-Dapr-Microservices-ACA.git acadapr-templates

Déployer

Le modèle déploie :

  • un environnement Container Apps
  • un espace de travail Log Analytics associé à l’environnement Container Apps
  • une ressource Application Insights pour le suivi distribué
  • un compte de stockage et un conteneur de Stockage par défaut Blob
  • un composant Dapr pour le compte de stockage d’objets blob
  • le nœud, l’application conteneur avec Dapr avec une identité managée affectée par l’utilisateur : hello-k8s-node
  • l’application conteneur compatible avec Dapr : hello-k8s-python
  • une attribution de rôle Microsoft Entra ID pour l’application de nœud utilisée par le composant Dapr pour établir une connexion au stockage d’objets blob

Accédez au répertoire acadapr-templates et exécutez la commande suivante :

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file ./azuredeploy.json \
  --parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"

Un avertissement (BCP081) peut s’afficher. Cet avertissement n’a aucun effet sur le déploiement réussi de l’application.

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file ./azuredeploy.bicep \
  --parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"

Cette commande déploie :

  • l’environnement d’applications conteneur et l’espace de travail Log Analytics associé pour l’hébergement de la solution Dapr « Hello World »
  • Une instance Application Insights pour le suivi distribué Dapr
  • le serveur d’applications nodeapp s’exécutant sur targetPort: 3000 avec Dapr activé et configuré à l’aide de : "appId": "nodeapp" et "appPort": 3000, et d’une identité affectée par l’utilisateur avec accès au stockage Blob Azure via une attribution de rôle Contributeur de données de stockage
  • Le composant Dapr de "type": "state.azure.blobstorage" limité de manière à être utilisé par nodeapp pour stocker l’état
  • le pythonapp activé par Dapr, sans affichage qui appelle le service nodeapp à l’aide d’un appel de service Dapr

Vérifier le résultat

Confirmer la réussite de la persistance de l’état

Vous pouvez vérifier que les services fonctionnent correctement en affichant les données de votre compte de stockage Azure.

  1. Dans votre navigateur, ouvrez le portail Azure.

  2. Accédez au compte de stockage nouvellement créé dans votre groupe de ressources.

  3. Sélectionnez Conteneurs dans le menu situé à gauche.

  4. Sélectionnez le conteneur créé.

  5. Vérifiez que vous pouvez voir le fichier nommé order dans le conteneur.

  6. Sélectionnez le fichier .

  7. Sélectionnez l’onglet Modifier.

  8. Sélectionnez le bouton Actualiser pour observer les mises à jour.

Afficher les journaux

Les données journalisées via une application conteneur sont stockées dans la table personnalisée ContainerAppConsoleLogs_CL de l’espace de travail Log Analytics. Vous pouvez afficher les journaux par le biais du portail Azure ou à partir de la ligne de commande. Avant d’interroger les données journalisées, patientez quelques minutes que l’analyse arrive pour la première fois.

Utilisez la commande suivante pour afficher les journaux dans Bash ou PowerShell.

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 == 'nodeapp' and (Log_s contains 'persisted' or Log_s contains 'order') | project ContainerAppName_s, Log_s, TimeGenerated | take 5" \
  --out table

La sortie suivante montre le type de réponse de la commande.

ContainerAppName_s    Log_s                            TableName      TimeGenerated
--------------------  -------------------------------  -------------  ------------------------
nodeapp               Got a new order! Order ID: 61    PrimaryResult  2021-10-22T21:31:46.184Z
nodeapp               Successfully persisted state.    PrimaryResult  2021-10-22T21:31:46.184Z
nodeapp               Got a new order! Order ID: 62    PrimaryResult  2021-10-22T22:01:57.174Z
nodeapp               Successfully persisted state.    PrimaryResult  2021-10-22T22:01:57.174Z
nodeapp               Got a new order! Order ID: 63    PrimaryResult  2021-10-22T22:45:44.618Z

Nettoyer les ressources

Une fois que vous avez terminé, exécutez la commande suivante pour supprimer votre groupe de ressources ainsi que toutes les ressources que vous avez créées dans ce tutoriel.

az group delete \
  --resource-group $RESOURCE_GROUP

Remarque

Étant donné que pythonapp effectue continuellement des appels à nodeapp avec des messages qui sont conservés dans votre magasin d’état configuré, il est important d’effectuer ces étapes de nettoyage pour éviter que des opérations ne vous soient facturées.


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.

Étapes suivantes