Exercice - Configurer, déployer et exécuter votre application dans Azure

Effectué

Il est maintenant temps d’exécuter votre application dans Azure. Vous devez créer une application Azure App Service, la configurer avec une identité managée et votre configuration de coffre, puis déployer votre code.

Créer l’application et le plan App Service

Le processus de création d’une application App Service se fait en deux étapes : Créez d’abord le plan, puis l’application.

Le nom du plan ne doit être unique qu’au sein de votre abonnement, donc vous pouvez réutiliser le même nom : keyvault-exercise-plan. Le nom de l’application devant être globalement unique, choisissez-en un qui vous est propre.

  1. Dans Azure Cloud Shell, exécutez la commande suivante pour créer un plan App Service.

    az appservice plan create \
        --name keyvault-exercise-plan \
        --sku FREE \
        --location centralus \
        --resource-group "<rgn>[sandbox resource group name]</rgn>"
    
  2. Ensuite, pour créer l’application web qui utilise le plan App Service que vous avez créé, exécutez la commande suivante. Veillez à remplacer <your-unique-app-name> par le nom de votre application dans le paramètre --name.

    az webapp create \
        --plan keyvault-exercise-plan \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name <your-unique-app-name>
    
    az webapp create \
        --plan keyvault-exercise-plan \
        --runtime "node|16LTS" \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name <your-unique-app-name>
    

Ajouter la configuration à l’application

Pour un déploiement sur Azure, suivez la bonne pratique App Service consistant à placer la configuration VaultName dans un paramètre d’application plutôt que dans un fichier de configuration. Pour créer le paramètre d’application, exécutez cette commande. Veillez à remplacer <your-unique-app-name> par le nom de votre application dans le paramètre --name et <your-unique-vault-name> par le nom de votre coffre dans le paramètre --settings.

az webapp config appsettings set \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name <your-unique-app-name> \
    --settings 'VaultName=<your-unique-vault-name>'

Pour un déploiement sur Azure, suivez la bonne pratique App Service consistant à placer la configuration VaultName dans un paramètre d’application plutôt que dans un fichier de configuration. Vous définissez aussi le paramètre SCM_DO_BUILD_DURING_DEPLOYMENT sur true afin qu’App Service restaure les packages de votre application sur le serveur et crée la configuration nécessaire pour exécuter l’application. Pour créer les paramètres de l’application, exécutez cette commande. Veillez à remplacer <your-unique-app-name> par le nom de votre application dans le paramètre --name et <your-unique-vault-name> par le nom de votre coffre dans le paramètre --settings.

az webapp config appsettings set \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name <your-unique-app-name> \
    --settings 'VaultName=<your-unique-vault-name>' 'SCM_DO_BUILD_DURING_DEPLOYMENT=true'

Activer une identité managée

L’activation de l’identité managée sur une application se fait en ligne. Pour l’activer dans votre application, exécutez la commande suivante. Veillez à remplacer <your-unique-app-name> par le nom de votre application dans le paramètre --name.

az webapp identity assign \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name <your-unique-app-name>

À partir de la sortie JSON obtenue, copiez la valeur principalId. PrincipalId est l’ID unique de la nouvelle identité de l’application dans Microsoft Entra ID, que vous allez utiliser à l’étape suivante.

Accorder l’accès au coffre

La dernière étape avant le déploiement consiste à attribuer des autorisations Key Vault à l’identité managée de votre application. Veillez à remplacer <your-unique-vault-name> par le nom de votre coffre dans le paramètre --name, puis entrez la valeur principalId que vous avez copiée à l’étape précédente comme valeur pour object-id dans la commande suivante. Pour établir un accès Get et List, exécutez cette commande.

az keyvault set-policy \
    --secret-permissions get list \
    --name <your-unique-vault-name> \
    --object-id <your-managed-identity-principleid>

Déployer l’application et l’essayer

  1. Toute votre configuration est définie et prête pour le déploiement. Les commandes suivantes publient le site dans le dossier pub, le compressent dans site.zip, puis déploient le fichier zip dans App Service. Veillez à remplacer <your-unique-app-name> par le nom de votre application dans le paramètre --name.

    Notes

    Vous devez revenir (cd) au répertoire KeyVaultDemoApp si vous n’y êtes plus.

    dotnet publish -o pub
    zip -j site.zip pub/*
    
    az webapp deploy \
        --src-path site.zip \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name <your-unique-app-name>
    
  1. Toute votre configuration est définie et prête pour le déploiement. Les commandes suivantes compressent votre application dans site.zip et la déploient dans App Service. Nous excluons node_modules du fichier zip, car App Service les restaure automatiquement lors du déploiement. Veillez à remplacer <your-unique-app-name> par le nom de votre application dans le paramètre --name.

    Notes

    Vous devez revenir (cd) au répertoire KeyVaultDemoApp si vous n’y êtes plus.

    zip site.zip * -x node_modules/
    
    az webapp deploy \
        --src-path site.zip \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name <your-unique-app-name>
    
  1. Le déploiement risque de prendre une ou deux minutes. Après avoir obtenu un résultat indiquant que le site a été déployé, ouvrez https://<your-unique-app-name>.azurewebsites.net/api/SecretTest dans un navigateur. La première fois, l’application met quelques instants à démarrer sur le serveur, mais après cela, vous devriez voir la valeur du secret, reindeer_flotilla.

Votre application est terminée et déployée.