Partager via


Exemple : Utiliser les bibliothèques Azure pour créer et déployer une application web

Cet exemple montre comment utiliser les bibliothèques de gestion du Kit de développement logiciel (SDK) Azure dans un script Python pour créer et déployer une application web sur Azure App Service, avec le code de l’application extrait d’un dépôt GitHub.

Le Kit de développement logiciel (SDK) Azure pour Python inclut des bibliothèques de gestion (espaces de noms commençant azure-mgmtpar) qui vous permettent d’automatiser la configuration et le déploiement des ressources, comme vous pouvez le faire avec le portail Azure, Azure CLI ou les modèles ARM. Pour obtenir des exemples, consultez Démarrage rapide : Déployer une application web Python (Django ou Flask) sur Azure App Service.

1 : Configurer votre environnement de développement local

Si ce n’est déjà fait, configurez un environnement dans lequel vous pouvez exécuter ce code. Voici quelques options :

  • Configurez un environnement virtuel Python à l’aide de venv ou de votre outil de choix. Pour commencer à utiliser l’environnement virtuel, veillez à l’activer. Pour installer Python, consultez Installer Python.

    #!/bin/bash
    # Create a virtual environment
    python -m venv .venv
    # Activate the virtual environment
    source .venv/Scripts/activate # only required for Windows (Git Bash)
    
  • Utilisez un environnement conda. Pour installer Conda, consultez Installer Miniconda.

  • Utilisez un conteneur de développement dans Visual Studio Code ou GitHub Codespaces.

2 : Installer les packages de bibliothèque Azure requis

Créez un fichier nommé requirements.txt avec le contenu suivant :

azure-mgmt-resource
azure-mgmt-web
azure-identity

Dans votre environnement de développement local, installez les exigences à l’aide du code suivant :

pip install -r requirements.txt

3 : Dupliquer l’exemple de référentiel

  1. Rendez-vous sur https://github.com/Azure-Samples/python-docs-hello-world et faites un fork du dépôt dans votre propre compte GitHub. L’utilisation d’un fork garantit que vous disposez des autorisations nécessaires pour déployer l’application sur Azure.

    Cloner le dépôt d'exemple sur GitHub

  2. Ensuite, créez une variable d’environnement nommée REPO_URL et définissez-la sur l’URL de votre dépôt fourche. Cette variable est requise par l’exemple de code de la section suivante.

export REPO_URL=<url_of_your_fork>
export AZURE_SUBSCRIPTION_ID=<subscription_id>

4 : Écrire du code pour créer et déployer une application web

Créez un fichier Python nommé provision_deploy_web_app.py et ajoutez le code suivant. Les commentaires en ligne expliquent ce que fait chaque partie du script. Les REPO_URL variables d’environnement AZURE_SUBSCRIPTION_ID devraient déjà être définies à l’étape précédente.

import random, os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.web import WebSiteManagementClient

# Acquire a credential object using CLI-based authentication.
credential = AzureCliCredential()

# Retrieve subscription ID from environment variable
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

# Constants we need in multiple places: the resource group name and the region
# in which we provision resources. You can change these values however you want.
RESOURCE_GROUP_NAME = 'PythonAzureExample-WebApp-rg'
LOCATION = "centralus"

# Step 1: Provision the resource group.
resource_client = ResourceManagementClient(credential, subscription_id)

rg_result = resource_client.resource_groups.create_or_update(RESOURCE_GROUP_NAME,
    { "location": LOCATION })

print(f"Provisioned resource group {rg_result.name}")

# For details on the previous code, see Example: Provision a resource group
# at https://docs.microsoft.com/azure/developer/python/azure-sdk-example-resource-group


#Step 2: Provision the App Service plan, which defines the underlying VM for the web app.

# Names for the App Service plan and App Service. We use a random number with the
# latter to create a reasonably unique name. If you've already provisioned a
# web app and need to re-run the script, set the WEB_APP_NAME environment 
# variable to that name instead.
SERVICE_PLAN_NAME = 'PythonAzureExample-WebApp-plan'
WEB_APP_NAME = os.environ.get("WEB_APP_NAME", f"PythonAzureExample-WebApp-{random.randint(1,100000):05}")

# Obtain the client object
app_service_client = WebSiteManagementClient(credential, subscription_id)

# Provision the plan; Linux is the default
poller = app_service_client.app_service_plans.begin_create_or_update(RESOURCE_GROUP_NAME,
    SERVICE_PLAN_NAME,
    {
        "location": LOCATION,
        "reserved": True,
        "sku" : {"name" : "B1"}
    }
)

plan_result = poller.result()

print(f"Provisioned App Service plan {plan_result.name}")


# Step 3: With the plan in place, provision the web app itself, which is the process that can host
# whatever code we want to deploy to it.

poller = app_service_client.web_apps.begin_create_or_update(RESOURCE_GROUP_NAME,
    WEB_APP_NAME,
    {
        "location": LOCATION,
        "server_farm_id": plan_result.id,
        "site_config": {
            "linux_fx_version": "python|3.8"
        }
    }
)

web_app_result = poller.result()

print(f"Provisioned web app {web_app_result.name} at {web_app_result.default_host_name}")

# Step 4: deploy code from a GitHub repository. For Python code, App Service on Linux runs
# the code inside a container that makes certain assumptions about the structure of the code.
# For more information, see How to configure Python apps,
# https://docs.microsoft.com/azure/app-service/containers/how-to-configure-python.
#
# The create_or_update_source_control method doesn't provision a web app. It only sets the
# source control configuration for the app. In this case we're simply pointing to
# a GitHub repository.
#
# You can call this method again to change the repo.

REPO_URL = os.environ["REPO_URL"]

poller = app_service_client.web_apps.begin_create_or_update_source_control(RESOURCE_GROUP_NAME,
    WEB_APP_NAME, 
    { 
        "location": "GitHub",
        "repo_url": REPO_URL,
        "branch": "master",
        "is_manual_integration": True
    }
)

sc_result = poller.result()

print(f"Set source control on web app to {sc_result.branch} branch of {sc_result.repo_url}")

# Step 5: Deploy the code using the repository and branch configured in the previous step.
#
# If you push subsequent code changes to the repo and branch, you must call this method again
# or use another Azure tool like the Azure CLI or Azure portal to redeploy. 
# Note: By default, the method returns None.

app_service_client.web_apps.sync_repository(RESOURCE_GROUP_NAME, WEB_APP_NAME)

print(f"Deploy code")

Ce code utilise l’authentification basée sur l’interface CLI (à l’aide de AzureCliCredential), car il illustre les actions que vous pouvez effectuer avec Azure CLI directement. Dans les deux cas, vous utilisez la même identité pour l’authentification. Selon votre environnement, vous devrez peut-être exécuter d’abord az login pour vous authentifier.

Pour utiliser ce type de code dans un script de production (par exemple, pour automatiser la gestion des machines virtuelles), utilisez DefaultAzureCredential (recommandé) avec une méthode basée sur un principal de service, comme décrit dans Comment authentifier les applications Python avec les services Azure.

5 : Exécuter le script

python provision_deploy_web_app.py

6 : Vérifier le déploiement de l’application web

Pour afficher le site web déployé, exécutez la commande suivante :

az webapp browse --name <PythonAzureExample-WebApp-12345> --resource-group PythonAzureExample-WebApp-rg

Remplacez le nom de l’application web (--name) par la valeur générée par le script. Vous n’avez pas besoin de modifier le nom du groupe de ressources (--resource-group) sauf si vous l’avez modifié dans le script. Lorsque vous ouvrez le site, vous devriez voir « Hello, World ! » dans votre navigateur.

Conseil / Astuce

Si vous ne voyez pas la sortie attendue, patientez quelques minutes et réessayez.

Si vous ne voyez toujours pas la sortie attendue :

  1. Accédez au portail Azure .
  2. Accédez aux groupes de ressources et recherchez le groupe de ressources que vous avez créé.
  3. Sélectionnez le groupe de ressources pour afficher ses ressources. Assurez-vous qu’il inclut à la fois un plan de service applicatif et un service applicatif.
  4. Sélectionnez App Service, puis accédez au Centre de déploiement.
  5. Ouvrez l’onglet Journaux pour vérifier les journaux de déploiement pour les erreurs ou les mises à jour d’état.

7 : Redéployer le code de l’application web (facultatif)

Le script fournit toutes les ressources nécessaires pour héberger votre application web et configure la source de déploiement pour utiliser votre référentiel dérivé avec l'intégration manuelle. Avec l’intégration manuelle, vous devez déclencher manuellement l’application web pour extraire des mises à jour à partir du référentiel et de la branche spécifiés.

Le script utilise la méthode WebSiteManagementClient.web_apps.sync_repository pour déclencher l’application web pour extraire du code à partir de votre référentiel. Si vous apportez d’autres modifications à votre code, vous pouvez redéployer en appelant cette API à nouveau, ou à l’aide d’autres outils Azure tels qu’Azure CLI ou le portail Azure.

Vous pouvez redéployer votre code à l’aide d’Azure CLI en exécutant la commande az webapp deployment source sync :

az webapp deployment source sync --name <PythonAzureExample-WebApp-12345> --resource-group PythonAzureExample-WebApp-rg

Vous n’avez pas besoin de modifier le nom du groupe de ressources (--resource-group) sauf si vous l’avez modifié dans le script.

Pour déployer votre code à partir du portail Azure :

  1. Accédez au portail Azure .
  2. Accédez aux groupes de ressources et recherchez le groupe de ressources que vous avez créé.
  3. Sélectionnez le nom du groupe de ressources pour afficher ses ressources. Assurez-vous qu’il inclut à la fois un plan de service applicatif et un service applicatif.
  4. Sélectionnez App Service, puis accédez au Centre de déploiement.
  5. Dans le menu supérieur, sélectionnez Synchroniser pour déclencher le déploiement de votre code.

8 : Nettoyer les ressources

az group delete --name PythonAzureExample-WebApp-rg --no-wait

Vous n’avez pas besoin de modifier le nom du groupe de ressources (--resource-group option), sauf si vous l’avez modifié dans le script.

Si vous n’avez plus besoin du groupe de ressources créé dans cet exemple, vous pouvez le supprimer en exécutant la commande az group delete . Bien que les groupes de ressources n’entraînent pas de frais en cours, il est recommandé de nettoyer les ressources inutilisées. Utilisez l'argument --no-wait pour rendre immédiatement le contrôle à la ligne de commande sans attendre que la suppression soit terminée.

Vous pouvez également supprimer un groupe de ressources par programmation à l’aide de la ResourceManagementClient.resource_groups.begin_delete méthode.

Voir aussi