Utilisation de conteneurs et d’Azure Functions

Cet article illustre la prise en charge fournie par Azure Functions pour travailler avec des applications de fonction conteneurisées exécutées dans un environnement Azure Container Apps. La prise en charge de l'hébergement de conteneurs d'applications de fonction dans Container Apps est actuellement en préversion. Pour plus d’informations, consultez Hébergement Azure Container Apps d’Azure Functions.

Cet article illustre la prise en charge que Azure Functions fournit pour l’utilisation d’applications de fonction s’exécutant dans des conteneurs Linux.

Choisissez l’environnement d’hébergement de votre application de fonction en conteneur en haut de l’article.

Si vous souhaitez accéder directement, l’article suivant vous montre comment créer votre première fonction s’exécutant dans un conteneur Linux et déployer l’image à partir d’un registre de conteneurs vers un service d’hébergement Azure pris en charge :

Créer votre première fonction Azure Functions conteneurisée sur Azure Container Apps

Pour en savoir plus sur le déploiement d’applications conteneur personnalisées, consultez Hébergement Azure Container Apps de Azure Functions.

Création d’applications de fonction conteneurisées

Functions facilite le déploiement et l’exécution de vos applications de fonction en tant que conteneurs Linux, que vous créez et gérez. Functions gère un ensemble d’images de base spécifiques à la langue que vous pouvez utiliser lors de la création de vos applications de fonction conteneurisées.

Important

Quand vous créez vos propres conteneurs, vous devez conserver l’image de base de votre conteneur mise à jour vers la dernière image de base prise en charge. Les images de base prises en charge pour Azure Functions sont spécifiques au langage et se trouvent dans le référentiel d’images de base Azure Functions.

L’équipe Functions s’engage à publier des mises à jour mensuelles pour ces images de base. Les mises à jour régulières incluent les dernières mises à jour de version mineure et les correctifs de sécurité pour le runtime et les langages Functions. Vous devez régulièrement mettre à jour votre conteneur à partir de la dernière image de base et redéployer la version mise à jour de votre conteneur.

Pour obtenir un exemple complet de création de l’application de fonction conteneurisée locale à partir de la ligne de commande et de publication de l’image dans un registre de conteneurs, consultez Créer une application de fonction dans un conteneur local.

Générer le fichier Dockerfile

Les outils Functions fournissent une option Docker qui génère un fichier Dockerfile avec votre projet de code de fonctions. Vous pouvez utiliser ce fichier avec Docker pour créer vos fonctions dans un conteneur qui dérive de l’image de base correcte (langage et version).

La façon dont vous créez un fichier Dockerfile dépend de la façon dont vous créez votre projet.

  • Lorsque vous créez un projet Functions à l’aide d’Azure Functions Core Tools, incluez l’option --docker lorsque vous exécutez la commande func init, comme dans l’exemple suivant :

    func init --docker
    
  • Vous pouvez également ajouter un fichier Dockerfile à un projet existant à l’aide de l’option --docker-only lorsque vous exécutez la commande func init dans un dossier de projet existant, comme dans l’exemple suivant :

    func init --docker-only
    

Pour obtenir un exemple complet, consultez Créer une application de fonction dans un conteneur local.

Création de votre application de fonction dans un conteneur

Avec un fichier Dockerfile généré par Core Tools dans votre projet de code, vous pouvez utiliser Docker pour créer l’application de fonction conteneurisée sur votre ordinateur local. La commande docker build suivante crée une image de vos fonctions conteneurisées à partir du projet dans le répertoire local :

docker build --tag <DOCKER_ID>/<IMAGE_NAME>:v1.0.0 .

Pour obtenir un exemple de création du conteneur, consultez Générer l’image conteneur et vérifier localement.

Mettre à jour une image dans le registre

Lorsque vous apportez des modifications à votre projet de code de fonctions ou que vous devez mettre à jour à l’image de base la plus récente, vous devez reconstruire le conteneur localement et republier l’image mise à jour dans le registre de conteneurs de votre choix. La commande suivante régénère l’image à partir du dossier racine avec un numéro de version mis à jour et envoyée à votre registre :

az acr build --registry <REGISTRY_NAME> --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.1 .

Remplacez <REGISTRY_NAME> par votre instance registre de conteneurs et <LOGIN_SERVER> par le nom du serveur de connexion.

À ce stade, vous devez mettre à jour le déploiement pour utiliser la nouvelle image. L’exemple suivant met à jour l’application de fonction pour utiliser la nouvelle image :

az functionapp config container set --image <IMAGE_NAME> --registry-password <SECURE_PASSWORD>--registry-username <USER_NAME> --name <APP_NAME> --resource-group <RESOURCE_GROUP>

Dans cet exemple, <IMAGE_NAME> est le nom complet de la nouvelle image avec la version. Pour les registres privés, vous devez fournir un nom d’utilisateur et un mot de passe. Stockez ces informations d’identification en toute sécurité.

Vous devez également envisager d’activer le déploiement continu.

Portail Azure – Créer à l’aide de conteneurs

Lorsque vous créez une application de fonction dans le portail Azure, vous pouvez choisir de déployer l'application de fonction à partir d'une image dans un registre de conteneurs. Pour savoir comment créer une application de fonction conteneurisée dans un registre de conteneurs, consultez la section Création de votre application de fonction dans un conteneur.

Les étapes suivantes créent et déploient une application de fonction conteneurisée existante à partir d'un registre de conteneurs.

  1. Dans le menu du portail Azure ou dans la page Accueil, sélectionnez Créer une ressource.

  2. Dans la page Nouveau, sélectionnez Calcul>Application de fonction.

  3. Dans la page De base, utilisez les paramètres d’application de fonction comme indiqué dans le tableau ci-dessous :

    Paramètre Valeur suggérée Description
    Abonnement Votre abonnement Abonnement dans lequel vous créez votre application de fonction.
    Groupe de ressources myResourceGroup Nom du nouveau groupe de ressources dans lequel vous créez votre application de fonction. Vous devez créer un groupe de ressources du fait de limitations connues lors de la création d’applications de fonction dans un groupe de ressources existant.
    Nom de l’application de fonction Nom unique* Nom qui identifie votre nouvelle Function App. Les caractères valides sont a-z (insensible à la casse), 0-9et -.
    Voulez-vous déployer du code ou une image conteneur ? Image conteneur Déployez une application de fonction conteneurisée à partir d’un Registre. Pour créer une application de fonction dans le Registre, consultez Créer une application de fonction dans un conteneur local.
    Région Région recommandée Sélectionnez une région proche de chez vous, ou proche d’autres services auxquels vos fonctions peuvent accéder.

*Le nom de l'application doit être globalement unique parmi toutes les applications hébergées Azure Functions.

  1. Dans Options et plans d’hébergement, choisissez Functions Premium.

    Screenshot of the Basics tab in the Azure portal when creating a function app for hosting a container in a Functions Premium plan.

    Cela crée une application de fonction hébergée par Azure Functions dans le plan Premium, qui prend en charge la mise à l’échelle dynamique. Vous pouvez également choisir d’exécuter dans un plan App Service, mais dans ce type de plan dédié, vous devez gérer la mise à l’échelle de votre application de fonction.

*Le nom de l'application doit être unique dans l'environnement Azure Container Apps. Toutes les régions ne sont pas prises en charge dans l'aperçu. Pour plus d'informations, consultez Considérations relatives à l'hébergement d'applications de conteneur.

  1. Dans Options et plans d’hébergement, choisissez Plan d’environnement Azure Container Apps.

    Portal create Basics tab for a containerized function app hosted in Azure Container Apps.

    Cela crée une ressource Environnement Azure Container Apps pour héberger votre conteneur d’application de fonction. Pour plus d’informations, consultez Hébergement Azure Container Apps d’Azure Functions.

    Par défaut, l’environnement est créé dans un plan de consommation sans redondance de zone, afin de réduire les coûts. Vous pouvez également choisir un environnement Container Apps existant. Pour en savoir plus sur les environnements, consultez Environnements Azure Container Apps.

  1. Acceptez les options par défaut de création d'un compte de stockage dans l'onglet Stockage et d'une nouvelle instance Application Insight dans l'onglet Surveillance. Vous pouvez également choisir d'utiliser un compte de stockage ou une instance Application Insights existants.
  1. Sélectionnez l’onglet Déploiement et désélectionnez Utiliser l’image de démarrage rapide. Si vous ne le faites pas, l’application de fonction est déployée à partir de l’image de base pour le langage de votre application de fonction.

  2. Choisissez votre Type d’image, public ou privé. Choisissez Privé si vous utilisez Azure Container Registry ou un autre Registre privé. Fournissez le nom de l’image, y compris le préfixe du Registre. Si vous utilisez un registre privé, fournissez les informations d’identification d’authentification du registre d’images.

  3. Sélectionnez Vérifier + créer pour passer en revue les sélections de configuration d’application.

  4. Dans la page Vérifier + créer, passez en revue vos paramètres, puis sélectionnez Créer pour approvisionner l’application de fonction et déployer votre image conteneur à partir du Registre.

  1. Sélectionnez Vérifier + créer pour passer en revue les sélections de configuration d’application.

  2. Sur la page Vérifier + créer, examinez vos paramètres, puis sélectionnez Créer pour approvisionner l’application de fonction à l’aide d’une image de base par défaut.

  3. Une fois la ressource de votre application de fonction créée, sélectionnez Accéder à la ressource et, sur la page de l’application de fonction, sélectionnez Centre de déploiement.

  4. Dans le Centre de déploiement, vous pouvez connecter votre registre de conteneurs comme source de l’image. Vous pouvez également activer GitHub Actions ou Azure Pipelines pour un déploiement continu plus robuste des mises à jour vers votre conteneur dans le registre.

Utiliser des images dans Azure Functions

Lorsque votre conteneur d’application de fonction est déployé à partir d’un registre, Functions conserve les informations sur l’image source. Utilisez les commandes suivantes pour obtenir des données sur l’image ou modifier l’image de déploiement utilisée :

Profils de charge de travail Container Apps

Les profils de charge de travail sont des fonctionnalités de Container Apps qui vous permettent de mieux contrôler vos ressources de déploiement. Azure Functions sur Azure Container Apps prend également en charge les profils de charge de travail. Pour plus d’informations, consultez Profils de charge de travail dans Azure Container Apps.

Vous pouvez créer et gérer des profils de charge de travail à l’aide d’Azure CLI ou dans le Portail Azure.

Vous activez les profils de charge de travail lorsque vous créez votre environnement d’application conteneur. Pour voir un exemple, consultez Créer une application conteneur dans un profil.

Vous pouvez ajouter, modifier et supprimer des profils dans votre environnement. Pour voir un exemple, consultez Ajouter des profils.

Lorsque vous créez une application de fonction conteneurisée dans un environnement sur lequel les profils de charge de travail sont activés, vous devez également spécifier le profil dans lequel exécuter. Pour ce faire, utilisez le paramètre --workload-profile-name de la commande az functionapp create, comme dans cet exemple :

az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime <LANGUAGE_STACK> --image <IMAGE_URI>  --workload-profile-name  PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

Dans la commande az functionapp create, le paramètre --environment spécifie l’environnement Container Apps et le paramètre --image spécifie l’image à utiliser pour l’application de fonction. Dans cet exemple, remplacez <STORAGE_NAME> par le nom que vous avez utilisé dans la section précédente pour le compte de stockage. Remplacez également <APP_NAME> par un nom global unique qui vous convient.

Remplacez également <CPU_COUNT> par votre nombre souhaité de processeurs virtuels, avec un minimum de 0,5 jusqu’au maximum autorisé par le profil. Pour <MEMORY_SIZE>, choisissez une quantité de mémoire dédiée comprise entre 1 Go et le maximum autorisé par le profil.

Paramètres d’application

Azure Functions vous permet d’utiliser les paramètres d’application pour les applications de fonction conteneurisées de manière standard. Pour plus d’informations, consultez Utiliser des paramètres d’application.

Activer le déploiement continu sur Azure

Important

Le déploiement basé sur un webhook n'est actuellement pas pris en charge lors de l'exécution de votre conteneur dans un plan Elastic Premium. Si vous devez utiliser la méthode de déploiement continu décrite dans cette section, déployez plutôt votre conteneur dans un plan App Service. Lors de l'exécution dans un plan Elastic Premium, vous devez redémarrer manuellement votre application chaque fois que vous effectuez des mises à jour de votre conteneur dans le référentiel.

Vous pouvez activer Azure Functions pour mettre à jour automatiquement votre déploiement d’une image chaque fois que vous mettez à jour l’image dans le registre.

  1. Utilisez la commande suivante pour activer le déploiement continu et obtenir l’URL du webhook :

    az functionapp deployment container config --enable-cd --query CI_CD_URL --output tsv --name <APP_NAME> --resource-group AzureFunctionsContainers-rg
    

    La commande az functionapp deployment container config active le déploiement continu et retourne l’URL du webhook de déploiement. Vous pouvez récupérer cette URL ultérieurement avec la commande az functionapp deployment container show-cd-url.

    Comme avant, remplacez <APP_NAME> par le nom de votre application de fonction.

  2. Copiez l’URL du webhook de déploiement dans le Presse-papiers.

  3. Ouvrez Docker Hub, connectez-vous, puis sélectionnez Référentiels dans la barre de navigation. Recherchez et sélectionnez l’image, sélectionnez l’onglet Webhooks, spécifiez un Nom de webhook, collez votre URL dans URL du webhook, puis sélectionnez Créer.

    Screenshot showing how to add the webhook in your Docker Hub window.

  4. Avec le webhook défini, Azure Functions redéploie votre image chaque fois que vous la mettez à jour dans Docker Hub.

Activer les connexions SSH

SSH permet d’établir une communication sécurisée entre un conteneur et un client. Avec le protocole SSH activé, vous pouvez vous connecter à votre conteneur en utilisant App Service Advanced Tools (Kudu). Pour faciliter la connexion à votre conteneur via SSH, Azure Functions fournit une image de base pour laquelle SSH est déjà activé. Vous devez seulement modifier votre Dockerfile, puis regénérer et redéployer l’image. Vous pouvez ensuite vous connecter au conteneur via les outils avancés (Kudu).

  1. Dans votre Dockerfile, ajoutez la chaîne -appservice à l’image de base dans votre instruction FROM, comme dans l’exemple suivant :

    FROM mcr.microsoft.com/azure-functions/node:4-node18-appservice
    

    Cet exemple utilise la version SSH de l’image de base Node.js version 18. Visitez le Azure Functions dépôts d’image de base pour vérifier que vous utilisez la dernière version de l’image de base compatible SSH.

  2. Regénérez l’image avec la commande docker build, en remplaçant <DOCKER_ID> par votre ID de compte Docker Hub, comme dans l’exemple suivant.

    docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
    
  3. Envoyez l’image mise à jour vers Docker Hub, ce qui devrait prendre beaucoup moins de temps que le premier envoi. Seuls les segments mis à jour de l’image doivent être chargés maintenant.

    docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
    
  4. Azure Functions redéploie automatiquement l’image sur votre application de fonctions ; le processus prend moins d’une minute.

  5. Dans un navigateur, ouvrez https://<app_name>.scm.azurewebsites.net/ et remplacez <app_name> par votre nom unique. Cette URL est le point de terminaison des outils avancés (Kudu) pour votre conteneur d’application de fonction.

  6. Connectez-vous à votre compte Azure, puis sélectionnez SSH pour établir une connexion avec votre conteneur. La connexion peut prendre quelques instants si Azure est toujours en train de mettre à jour l’image conteneur.

  7. Une fois la connexion établie avec votre conteneur, exécutez la commande top pour voir les processus en cours d’exécution.

    Screenshot that shows Linux top command running in an SSH session.

Étapes suivantes

Les articles suivants fournissent plus d’informations sur le déploiement et la gestion des conteneurs :