Démarrage rapide : Déployer une application Dapr sur Azure Container Apps en utilisant Azure CLI
Dapr (Distributed Application Runtime) permet aux développeurs de créer des microservices résilients et fiables. Dans ce guide de démarrage rapide, vous découvrez comment activer les sidecars Dapr à s’exécuter en même temps que vos applications conteneurs de microservices. Vous allez :
- Créez un environnement Container Apps et un magasin d’état Stockage Blob Azure pour vos applications conteneurs.
- Déployez une application conteneur Python qui publie des messages.
- Déployez une application conteneur Node.js qui s’abonne à des messages et les conserve dans un magasin d’états.
- Vérifiez l’interaction entre les deux microservices en utilisant le portail Azure.
Ce guide de démarrage rapide reflète les applications que vous déployez dans le guide de démarrage rapide Hello World Dapr open source.
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 <PLACEHOLDERS>
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"
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.
Pour créer l’environnement, exécutez la commande suivante :
az containerapp env create \
--name $CONTAINERAPPS_ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION"
Configurer un magasin d’état
Créer un compte de stockage Blob Azure
Avec l’environnement déployé, déployez un compte Stockage Blob Azure qui est utilisé par l’application conteneur Node.js pour stocker des données. Avant de déployer le service, choisissez 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>"
Utilisez la commande suivante pour créer le compte de stockage Azure.
az storage account create \
--name $STORAGE_ACCOUNT_NAME \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION" \
--sku Standard_RAGRS \
--kind StorageV2
Configurer une identité affectée par l’utilisateur pour l’application de nœud
Bien que Container Apps prenne en charge les identités managées affectées par l’utilisateur et les identités managées affectées par le système, une identité affectée par l’utilisateur fournit à l’application Node.js activée pour Dapr des autorisations pour accéder au compte de stockage blob.
Créer uneidentité affectée par l’utilisateur.
az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output json
Récupérer les propriétés
principalId
etid
, et les stocker dans des variables.PRINCIPAL_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query principalId | tr -d \") IDENTITY_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query id | tr -d \") CLIENT_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query clientId | tr -d \")
Récupérer l’ID d’abonnement de votre abonnement actuel.
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
Attribuez le rôle
Storage Blob Data Contributor
à l’identité affectée par l’utilisateur.az role assignment create --assignee $PRINCIPAL_ID \ --role "Storage Blob Data Contributor" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/ Microsoft.Storage/storageAccounts/$STORAGE_ACCOUNT_NAME"
Configurer le composant de stockage d’état
Bien que vous ayez plusieurs options pour l’authentification auprès de ressources externes via Dapr, cet exemple utilisant un magasin d’états basé sur Azure, vous pouvez donc fournir un accès direct depuis l’application Node.js au magasin d’objets blob en utilisant une identité managée.
Dans un éditeur de texte, créez un fichier nommé statestore.yaml avec les propriétés issues des étapes précédentes.
# statestore.yaml for Azure Blob storage component componentType: state.azure.blobstorage version: v1 metadata: - name: accountName value: "<STORAGE_ACCOUNT_NAME>" - name: containerName value: mycontainer - name: azureClientId value: "<MANAGED_IDENTITY_CLIENT_ID>" scopes: - nodeapp
Ce fichier permet à votre application Dapr d’accéder à votre magasin d’état.
Accédez au répertoire où vous avez stocké le fichier yaml et exécutez la commande suivante pour configurer le composant Dapr dans l’environnement Container Apps.
az containerapp env dapr-component set \ --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \ --dapr-component-name statestore \ --yaml statestore.yaml
Déployer l’application Node.js
az containerapp create \
--name nodeapp \
--resource-group $RESOURCE_GROUP \
--user-assigned $IDENTITY_ID \
--environment $CONTAINERAPPS_ENVIRONMENT \
--image dapriosamples/hello-k8s-node:latest \
--min-replicas 1 \
--max-replicas 1 \
--enable-dapr \
--dapr-app-id nodeapp \
--dapr-app-port 3000 \
--env-vars 'APP_PORT=3000'
Si vous utilisez un Azure Container Registry, incluez l’indicateur --registry-server <REGISTRY_NAME>.azurecr.io
dans la commande.
Par défaut, l’image est extraite de Docker Hub.
Déployer l’application Python
az containerapp create \
--name pythonapp \
--resource-group $RESOURCE_GROUP \
--environment $CONTAINERAPPS_ENVIRONMENT \
--image dapriosamples/hello-k8s-python:latest \
--min-replicas 1 \
--max-replicas 1 \
--enable-dapr \
--dapr-app-id pythonapp
Si vous utilisez un Azure Container Registry, incluez l’indicateur --registry-server <REGISTRY_NAME>.azurecr.io
dans la commande.
Vérifier les résultats
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.
Ouvrez le portail Azure dans votre navigateur et accédez à votre compte de stockage.
Sélectionnez Stockage de données>Conteneurs dans le menu de gauche.
Sélectionnez l’application conteneur.
Vérifiez que vous pouvez voir le fichier nommé
order
dans le conteneur.Sélectionnez le fichier .
Sélectionnez l’onglet Modifier.
Sélectionnez le bouton Actualiser pour observer la mise à jour automatique des données.
Afficher les journaux
Les journaux d’une application conteneur sont stockés dans la table personnalisée ContainerAppConsoleLogs_CL
de l’espace de travail Log Analytics. Vous pouvez voir les journaux dans le portail Azure ou via l’interface CLI. Il peut y avoir un petit délai initialement pour que la table apparaisse dans l’espace de travail.
Visualisez les journaux en utilisant la commande CLI suivante sur la ligne de commande.
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 | sort by TimeGenerated | take 5" \
--out table
La sortie suivante montre le type de réponse de la commande CLI.
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
É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.
Si vous souhaitez supprimer les ressources créées dans le cadre de cette procédure pas à pas, exécutez la commande suivante.
Attention
Cette commande 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
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.