Déploiement zip pour Azure Functions

Cet article décrit comment déployer vos fichiers projet d’application de fonction sur Azure à partir d’un fichier .zip (compressé). Vous allez découvrir comment effectuer un déploiement Push, à la fois à l’aide d’Azure CLI et des API REST. Les outils principaux d’Azure Functions utilisent également ces API de déploiement lors de la publication d’un projet local sur Azure.

Le déploiement zip est également un moyen simple d’exécuter vos fonctions à partir du package de déploiement. Pour en savoir plus, consultez Exécuter vos fonctions à partir d’un fichier de package dans Azure.

Azure Functions offre la gamme complète d’options d’intégration et de déploiement continu fournies par Azure App Service. Pour plus d’informations, consultez Déploiement continu pour Azure Functions.

Pour accélérer le développement, vous trouverez sans doute plus facile de déployer les Fichiers projet de votre application de fonction directement depuis un fichier .zip. L’API de déploiement zip prend le contenu d’un fichier zip et extrait son contenu dans le dossier wwwroot de votre application de fonction. Ce déploiement de fichier .zip utilise le même service Kudu que celui qui pilote les déploiements continus basés sur l’intégration, notamment :

  • Suppression des fichiers conservés suite aux déploiements antérieurs
  • Personnalisation du déploiement, notamment exécution de scripts de déploiement
  • Journaux d’activité de déploiement
  • La fonction de synchronisation se déclenche dans une application de fonction Plan Consommation.

Pour plus d’informations, consultez la documentation de référence sur le déploiement zip.

Spécifications du déploiement de fichier .zip

Le fichier zip que vous utilisez pour le déploiement Push doit contenir tous les fichiers nécessaires à l’exécution de votre fonction.

Important

Quand vous utilisez le déploiement zip, tous les fichiers d’un déploiement existant qui ne se trouvent pas dans le fichier zip sont supprimés de votre application de fonction.

Le code de toutes les fonctions d’une application de fonctions spécifique se trouve dans un dossier de projet racine qui contient un fichier de configuration d’hôte. Le fichier host.json contient des configurations spécifiques du runtime et se trouve dans le dossier racine de la Function App. Un dossier bin contient des packages et autres fichiers de bibliothèque requis par la Function App. Les structures de dossiers spécifiques requises par l’application de fonction dépendent du langage :

Toutes les fonctions de l'application de fonction doivent partager la même pile de langage.

Une application de fonction inclut tous les fichiers et dossiers dans le répertoire wwwroot. Un déploiement de fichier .zip inclut le contenu du répertoire wwwroot, mais pas le répertoire proprement dit. Lorsque vous déployez un projet de bibliothèque de classes C#, vous devez inclure les fichiers et les dépendances de bibliothèque compilés dans un sous-dossier bin de votre package zip.

Lorsque vous développez sur un ordinateur local, vous pouvez créer manuellement un fichier .zip du dossier de projet d’application de fonction à l’aide de la fonctionnalité de compression .zip intégrée ou d’outils tiers.

Déployer à l’aide d’Azure CLI

Vous pouvez utiliser Azure CLI pour déclencher un déploiement Push. Effectuez le déploiement Push d’un fichier .zip sur votre application de fonction à l’aide de la commande az functionapp deployment source config-zip. Pour exécuter cette commande, vous devez utiliser Azure CLI version 2.0.21 ou ultérieure. Pour vérifier votre version d’Azure CLI, utilisez la commande az --version.

Dans la commande suivante, remplacez l’espace réservé <zip_file_path> par le chemin vers l’emplacement de votre fichier .zip. Remplacez également <app_name> par le nom unique de votre application de fonction, et <resource_group> par le nom de votre groupe de ressources.

az functionapp deployment source config-zip -g <resource_group> -n \
<app_name> --src <zip_file_path>

Cette commande déploie les fichiers projet à partir du fichier .zip téléchargé sur votre application de fonction dans Azure. Ensuite, il redémarre l’application. Pour afficher la liste des déploiements pour cette application de fonction, vous devez utiliser les API REST.

Quand vous utilisez Azure CLI sur votre ordinateur local, <zip_file_path> est le chemin du fichier .zip sur votre ordinateur. Vous pouvez également exécuter Azure CLI dans Azure Cloud Shell. Quand vous utilisez Cloud Shell, vous devez d’abord charger votre fichier .zip de déploiement sur le compte Azure Files associé à votre Cloud Shell. Dans ce cas, <zip_file_path> est l’emplacement de stockage utilisé par votre compte Cloud Shell. Pour plus d’informations, consultez Conserver des fichiers dans Azure Cloud Shell.

Déployer un fichier ZIP avec l’API REST

Vous pouvez utiliser les API REST du service de déploiement pour déployer le fichier .zip sur votre application dans Azure. Pour déployer, envoyez une requête POST a https://<app_name>.scm.azurewebsites.net/api/zipdeploy. La demande POST doit contenir le fichier .zip dans le corps du message. Les informations d’identification de déploiement pour votre application sont fournies dans la demande avec l’authentification de base HTTP. Pour plus d’informations, consultez les informations de référence des envois (push) de fichiers .zip.

Pour l’authentification HTTP BASIC, vous avez besoin de vos informations d’identification de déploiement App Service. Pour découvrir comment définir les informations d’identification de votre déploiement, consultez Définir et réinitialiser les informations d’identification de niveau utilisateur.

Avec cURL

L’exemple suivant utilise l’outil cURL pour déployer un fichier .zip. Remplacez les espaces réservés <deployment_user>, <zip_file_path> et <app_name>. Quand vous y êtes invité par cURL, tapez le mot de passe.

curl -X POST -u <deployment_user> --data-binary "@<zip_file_path>" https://<app_name>.scm.azurewebsites.net/api/zipdeploy

Cette demande déclenche le déploiement par envoi (push) à partir du fichier .zip chargé. Vous pouvez examiner les déploiements en cours et passés en utilisant le point de terminaison https://<app_name>.scm.azurewebsites.net/api/deployments, comme le montre l’exemple cURL suivant. Ici encore, remplacez <app_name> par le nom de votre application et <deployment_user> par le nom d’utilisateur de vos informations d’identification de déploiement.

curl -u <deployment_user> https://<app_name>.scm.azurewebsites.net/api/deployments

Déploiement zip asynchrone

Lors du déploiement synchrone, vous pouvez recevoir des erreurs liées aux délais d’expiration de connexion. Ajoutez ?isAsync=true à l’URL pour effectuer le déploiement de manière asynchrone. Vous recevrez une réponse dès que le fichier zip sera chargé avec un en-tête Location pointant vers l’URL d’état de déploiement interrogeable. Lors de l’interrogation de l’URL fournie dans l’en-tête Location, vous recevrez une réponse HTTP 202 (Acceptée) durant l’exécution du processus et une réponse HTTP 200 (OK) une fois que l’archive a été développée et que le déploiement s’est terminé avec succès.

Authentification Microsoft Entra

Au lieu d’utiliser l’authentification de base HTTP pour le déploiement zip, utilisez une identité Microsoft Entra. Une identité Microsoft Entra peut être nécessaire si l’authentification de base HTTP est désactivée pour le site SCM.

Un jeton d’accès Microsoft Entra valide sera nécessaire pour l’utilisateur ou le principal de service qui effectue le déploiement. Un jeton d’accès peut être récupéré à l’aide de la commande az account get-access-token Azure CLI. Le jeton d’accès sera utilisé dans l’en-tête d’authentification de la requête HTTP POST.

curl -X POST \
    --data-binary "@<zip_file_path>" \
    -H "Authorization: Bearer <access_token>" \
    "https://<app_name>.scm.azurewebsites.net/api/zipdeploy"

Avec PowerShell

L’exemple suivant utilise Publish-AzWebapp pour charger le fichier .zip. Remplacez les espaces réservés <group-name>, <app-name> et <zip-file-path>.

Publish-AzWebapp -ResourceGroupName <group-name> -Name <app-name> -ArchivePath <zip-file-path>

Cette demande déclenche le déploiement par envoi (push) à partir du fichier .zip chargé.

Pour passer en revue les déploiements en cours et passés, exécutez les commandes suivantes. Là encore, remplacez les valeurs des espaces réservés <deployment-user>, <deployment-password> et <app-name>.

$username = "<deployment-user>"
$password = "<deployment-password>"
$apiUrl = "https://<app-name>.scm.azurewebsites.net/api/deployments"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$userAgent = "powershell/1.0"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method GET

Déployer avec un modèle ARM

Vous pouvez utiliser l’extension de modèle ARM ZipDeploy pour envoyer (push) votre fichier .zip à votre application de fonction.

Exemple de modèle ARM ZipDeploy

Ce modèle inclut à la fois un emplacement de production et un emplacement de préproduction et se déploie sur l’un ou sur l’autre. En règle générale, ce modèle vous permet d’effectuer le déploiement sur l’emplacement de préproduction, puis d’effectuer l’échange pour obtenir votre nouveau package zip en cours d’exécution sur l’emplacement de production.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServiceName": {
      "type": "string"
    },
    "deployToProduction": {
      "type": "bool",
      "defaultValue": false
    },
    "slot": {
      "type": "string",
      "defaultValue": "staging"
    },
    "packageUri": {
      "type": "secureString"
    }
  },
  "resources": [
    {
      "condition": "[parameters('deployToProduction')]",
      "type": "Microsoft.Web/sites/extensions",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/ZipDeploy', parameters('appServiceName'))]",
      "properties": {
        "packageUri": "[parameters('packageUri')]",
        "appOffline": true
      }
    },
    {
      "condition": "[not(parameters('deployToProduction'))]",
      "type": "Microsoft.Web/sites/slots/extensions",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/{1}/ZipDeploy', parameters('appServiceName'), parameters('slot'))]",
      "properties": {
        "packageUri": "[parameters('packageUri')]",
        "appOffline": true
      }
    }
  ]
}

Pour le déploiement initial, vous devez effectuer directement le déploiement sur l’emplacement de production. Si vous souhaitez en savoir plus, veuillez consulter la rubrique Déploiements d’emplacements.

Exécuter des fonctions à partir du package de déploiement

Vous pouvez également choisir d’exécuter vos fonctions directement à partir du fichier de package de déploiement. Cette méthode permet d’éviter l’étape de déploiement qui consiste à copier des fichiers du package vers le répertoire wwwroot de votre application de fonction. Au lieu de cela, le fichier de package est monté par le runtime Functions, et le contenu du répertoire wwwroot passe en lecture seule.

Le déploiement zip s’intègre à cette fonctionnalité, que vous pouvez activer en définissant le paramètre d’application de fonction WEBSITE_RUN_FROM_PACKAGE sur la valeur 1. Pour plus d’informations, consultez Exécuter vos fonctions Azure à partir d’un fichier de package.

Personnalisation du déploiement

Le processus de déploiement suppose que le fichier .zip que vous envoyez (push) contienne une application prête à l’exécution. Par défaut, aucune personnalisation n’est exécutée. Pour activer les même processus de génération que ceux obtenus avec l’intégration continue, ajoutez ceci aux paramètres de votre application :

SCM_DO_BUILD_DURING_DEPLOYMENT=true

Quand vous utilisez le déploiement par envoi (push) de fichier .zip, ce paramètre est false par défaut. La valeur par défaut est true pour les déploiements par intégration continue. Quand la valeur est true, vos paramètres de déploiement sont utilisés pendant le déploiement. Vous pouvez configurer ces paramètres comme paramètres de l’application ou dans un fichier de configuration .deployment qui se trouve dans la racine de votre fichier .zip. Pour plus d’informations, consultez Repository and deployment-related settings dans les informations de référence sur le déploiement.

Télécharger vos fichiers d’application de fonction

Si vous avez créé vos fonctions à l’aide de l’éditeur du Portail Azure, vous pouvez télécharger votre projet d’application de fonction existant en tant que fichier .zip de l’une des façons suivantes :

  • À partir du portail Azure :

    1. Connectez-vous au portail Azure et accédez à votre application de fonction.

    2. Sous l’onglet Vue d’ensemble, sélectionnez Télécharger le contenu de l’application. Sélectionnez vos options de téléchargement, puis Télécharger.

      Télécharger le projet d’application de fonction

      Le fichier .zip téléchargé est au format correct pour être republié sur votre application de fonction en utilisant le déploiement Push de fichier .zip. En outre, le téléchargement à partir du portail peut ajouter les fichiers nécessaires pour ouvrir votre application de fonction directement dans Visual Studio.

  • Utilisation d’API REST :

    Utilisez l’API GET de déploiement suivante pour télécharger les fichiers à partir de votre projet <function_app> :

    https://<function_app>.scm.azurewebsites.net/api/zip/site/wwwroot/
    

    L’inclusion de /site/wwwroot/ permet de s’assurer que votre fichier zip comprend uniquement les fichiers de projet de l’application de fonction, et non l’intégralité du site. Si vous ne vous êtes pas encore connecté à Azure, vous serez invité à le faire.

Vous pouvez également télécharger un fichier .zip à partir d’un dépôt GitHub. Quand vous téléchargez un dépôt GitHub sous la forme d’un fichier zip, GitHub ajoute un niveau de dossier supplémentaire à la branche. Ce niveau de dossier supplémentaire signifie que vous ne pouvez pas déployer le fichier .zip directement tel que vous l’avez téléchargé à partir de GitHub. Si vous utilisez un dépôt GitHub pour tenir à jour votre application de fonction, vous devez utiliser l’intégration continue pour la déployer.

Étapes suivantes