Déployer une application Python conteneurisée sur App Service
Cet article fait partie d’un didacticiel sur la façon de conteneuriser et de déployer une application web Python sur Azure App Service. App Service vous permet d’exécuter des applications web conteneurisées et de déployer via des fonctionnalités d’intégration/de déploiement continu (CI/CD) avec Docker Hub, Azure Container Registry et Visual Studio Team Services.
Dans cette partie du tutoriel, vous allez apprendre à déployer l’application web Python conteneurisée sur App Service à l’aide de l’application web App Service App Service pour conteneurs. Web App for Containers vous permet de vous concentrer sur la composition de vos conteneurs sans vous soucier de la gestion et de la maintenance d’un orchestrateur de conteneurs sous-jacent.
Après avoir suivi les étapes décrites dans cet article, vous avez terminé avec un site web App Service à l’aide d’une image conteneur Docker. App Service extrait l’image initiale d’Azure Container Registry à l’aide de l’identité managée pour l’authentification.
Ce diagramme de service met en évidence les composants abordés dans cet article.
Créer l’application web
Les commandes Azure CLI peuvent être exécutées dans le Azure Cloud Shell ou sur une station de travail avec l'Azure CLI installée.
Obtenez l’ID de ressource du groupe contenant Azure Container Registry à l’aide de la commande az group show.
# RESOURCE_GROUP_NAME='msdocs-web-app-rg' RESOURCE_ID=$(az group show \ --resource-group $RESOURCE_GROUP_NAME \ --query id \ --output tsv) echo $RESOURCE_ID
RESOURCE_GROUP_NAME doit toujours être défini dans votre environnement sur le nom du groupe de ressources que vous avez utilisé dans la partie 3. Créez un conteneur dans Azure de ce didacticiel. S’il ne l’est pas, supprimez le commentaire de la première ligne et définissez-le sur le nom que vous avez utilisé.
Créez un plan App Service avec la commande az appservice plan create.
APP_SERVICE_PLAN_NAME='msdocs-web-app-plan' az appservice plan create \ --name $APP_SERVICE_PLAN_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --sku B1 \ --is-linux
Créez une application web à l’aide de la commande az webapp create.
La commande suivante active également l’identité managée affectée par le système pour l’application web et lui attribue le rôle
AcrPull
sur la ressource spécifiée, dans ce cas, le groupe de ressources qui contient Azure Container Registry. Cela accorde à l’identité managée attribuée par le système des privilèges d’extraction sur tout Registre de conteneurs Azure dans le groupe de ressources.APP_SERVICE_NAME='<website-name>' # REGISTRY_NAME='<your Azure Container Registry name>' CONTAINER_NAME=$REGISTRY_NAME'.azurecr.io/msdocspythoncontainerwebapp:latest' az webapp create \ --resource-group $RESOURCE_GROUP_NAME \ --plan $APP_SERVICE_PLAN_NAME \ --name $APP_SERVICE_NAME \ --assign-identity '[system]' \ --scope $RESOURCE_ID \ --role acrpull \ --deployment-container-image-name $CONTAINER_NAME
Où:
- APP_SERVICE_NAME doit être globalement unique, car il devient le nom du site web dans l’URL
https://<website-name>.azurewebsites.net
. - CONTAINER_NAME est de la forme « yourregistryname.azurecr.io/repo_name:tag ».
- REGISTRY_NAME doit toujours être défini dans votre environnement sur le nom de registre que vous avez utilisé dans la partie section 3 : Construire un conteneur dans Azure de ce didacticiel. Si ce n'est pas le cas, décommentez la ligne où elle est définie dans l'extrait de code et définissez-le sur le nom que vous avez utilisé.
Remarque
Une erreur similaire à celle-ci peut s’afficher lors de l’exécution de la commande :
No credential was provided to access Azure Container Registry. Trying to look up... Retrieving credentials failed with an exception:'No resource or more than one were found with name ...'
Cette erreur se produit, car l’application web utilise par défaut les informations d’identification d’administrateur d’Azure Container Registry pour s’authentifier auprès du Registre et des informations d’identification d’administrateur n’ont pas été activées sur le Registre. Vous pouvez ignorer cette erreur en toute sécurité, car vous allez définir l’application web pour utiliser l’identité managée affectée par le système pour l’authentification dans la commande suivante.
- APP_SERVICE_NAME doit être globalement unique, car il devient le nom du site web dans l’URL
Configurer l’identité managée et le webhook
Configurez l’application web pour utiliser des identités managées afin d’extraire depuis le Registre de conteneurs Azure à l’aide de la commande az webapp config set.
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --generic-configurations '{"acrUseManagedIdentityCreds": true}'
Étant donné que vous avez activé l’identité managée affectée par le système lors de la création de l’application web, il s’agit de l’identité managée utilisée pour extraire à partir d’Azure Container Registry.
Obtenez l’identifiant d’étendue de l’application avec la commande az webapp deployment list-publishing-credentials.
CREDENTIAL=$(az webapp deployment list-publishing-credentials \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --query publishingPassword \ --output tsv) echo $CREDENTIAL
Utilisez l’identifiant d’étendue de l’application pour créer un webhook avec la commande az acr webhook create.
SERVICE_URI='https://$'$APP_SERVICE_NAME':'$CREDENTIAL'@'$APP_SERVICE_NAME'.scm.azurewebsites.net/api/registry/webhook' az acr webhook create \ --name webhookforwebapp \ --registry $REGISTRY_NAME \ --scope msdocspythoncontainerwebapp:* \ --uri $SERVICE_URI \ --actions push
Par défaut, cette commande crée le webhook dans le même groupe de ressources et le même emplacement que le registre de conteneurs Azure spécifié. Si vous le souhaitez, vous pouvez utiliser les paramètres
--resource-group
et--location
pour remplacer ce comportement.
Configurer la connexion à MongoDB
Dans cette étape, vous spécifiez les variables d’environnement nécessaires pour vous connecter à MongoDB.
Si vous devez créer une base de données Azure Cosmos DB pour MongoDB, nous vous recommandons de suivre les étapes pour configurer Cosmos DB pour MangoDB en partie 2. Générez et testez le conteneur localement de ce didacticiel. Lorsque vous avez terminé, vous devez disposer d’une chaîne de connexion Azure Cosmos DB pour MongoDB sous la forme mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>
.
Vous avez besoin de la chaîne de connexion MongoDB pour suivre les étapes ci-dessous.
Pour définir des variables d’environnement dans App Service, vous créez des paramètres d’application à l’aide de la commande az webapp config appsettings set suivante.
MONGO_CONNECTION_STRING='your Mongo DB connection string in single quotes'
MONGO_DB_NAME=restaurants_reviews
MONGO_COLLECTION_NAME=restaurants_reviews
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--settings CONNECTION_STRING=$MONGO_CONNECTION_STRING \
DB_NAME=$MONGO_DB_NAME \
COLLECTION_NAME=$MONGO_COLLECTION_NAME
- CONNECTION_STRING : chaîne de connexion commençant par « mongodb:// ».
- DB_NAME : utilisez « restaurants_reviews ».
- COLLECTION_NAME : Utilisez « restaurants_reviews ».
Parcourir le site
Pour vérifier que le site est en cours d’exécution, accédez à https://<website-name>.azurewebsites.net
; où le nom du site web est le nom de votre service d’application. En cas de réussite, vous devriez voir l’exemple d’application d’évaluation de restaurant. Le site peut prendre quelques instants pour commencer la première fois. Lorsque le site apparaît, ajoutez un restaurant et un avis pour ce restaurant pour confirmer que l’exemple d’application fonctionne.
Si vous exécutez Azure CLI localement, vous pouvez utiliser la az webapp browse commande pour accéder au site web. Si vous utilisez Cloud Shell, ouvrez une fenêtre de navigateur et accédez à l’URL du site web.
az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAME
Remarque
La commande az webapp browse
n’est pas prise en charge dans Cloud Shell. Ouvrez une fenêtre de navigateur et accédez à l’URL du site web à la place.
Résoudre les problèmes de déploiement
Si vous ne voyez pas l’exemple d’application, essayez les étapes suivantes.
- Avec le déploiement de conteneurs et App Service, vérifiez toujours la page Deployment Center / Logs dans le portail Azure. Confirmez que le conteneur a été extrait et qu’il est en cours d’exécution. L’extraction initiale et l’exécution du conteneur peuvent prendre quelques instants.
- Essayez de redémarrer App Service et vérifiez si cela résout votre problème.
- S’il existe des erreurs de programmation, ces erreurs s’affichent dans les journaux d’application. Sur la page du portail Azure pour l’App Service, sélectionnez Diagnose and solve problems/Application logs.
- L’exemple d’application s’appuie sur une connexion à MongoDB. Vérifiez que App Service a des paramètres d’application avec les informations de connexion correctes.
- Vérifiez que l’identité managée est activée pour App Service et est utilisée dans le Centre de déploiement. Sur la page du portail Azure pour l’App Service, rendez-vous dans la ressource Deployment Center de l’App Service et confirmez que Authentication est défini sur Managed Identity.
- Vérifiez que le webhook est défini dans Azure Container Registry. Le webhook permet au service App de télécharger l’image du conteneur. En particulier, vérifiez que l’URI du service se termine par « /api/registry/webhook ».
- Different Azure Container Registry skus disposent de fonctionnalités différentes, y compris le nombre de webhooks. Si vous réutilisez un registre existant, vous pourriez voir le message : « Quota exceeded for resource type webhooks for the registry SKU Basic. » En savoir plus sur les différents quotas de référence SKU et le processus de mise à niveau : https://aka.ms/acr/tiers". Si vous voyez ce message, utilisez un nouveau registre ou réduisez le nombre de webhooks de registre en cours d’utilisation.