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. 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éer votre application de fonction dans un conteneur

Avec un Dockerfile généré par Functions 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 un déploiement existant pour utiliser la nouvelle image. Vous pouvez mettre à jour l’application de fonction pour utiliser la nouvelle image à l’aide d’Azure CLI ou dans le Portail Azure :

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éer 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. Sous Sélectionner une option d’hébergement, choisissez Plan Premium>Sélectionner.

    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.

  4. 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.
    Plan Linux Nouveau plan (par défaut) Crée un plan Premium pour héberger votre application. Vous pouvez également choisir un plan Premium existant.
    Plan tarifaire Premium élastique EP1 EP1 est le plan le plus abordable. Vous pouvez choisir un plan plus important si nécessaire.
    Redondance de zone Désactivé Cette fonctionnalité n’est pas nécessaire dans une application hors production.

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

  5. 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.

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

  7. 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.

  8. 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.

  9. 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.

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

Lorsque vous créez une application de fonction hébergée dans Container Apps dans le Portail Azure, vous pouvez 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éer 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. Sous Sélectionner une option d’hébergement, choisissez Environnement Container Apps>Sélectionner.

  4. 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 -.
    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 unique dans l'environnement Azure Container Apps.

  5. Toujours sur la page Informations de base, acceptez le nouvel environnement suggéré comme environnement Azure Container Apps. Pour réduire les coûts, le nouvel environnement par défaut est créé dans Consommation + Dédié avec le profil de charge de travail par défaut et sans redondance de zone. Pour plus d’informations, consultez Hébergement Azure Container Apps d’Azure Functions.

    Vous pouvez également choisir d’utiliser un environnement Container Apps existant. Pour créer un environnement personnalisé, sélectionnez plutôt Créer. À la page Créer un environnement Container Apps, vous pouvez ajouter des profils non définis par défaut de la charge de travail ou activer la redondance de zone. Pour en savoir plus sur les environnements, consultez Environnements Azure Container Apps.

  6. Sélectionnez l’onglet Déploiement et désélectionnez Utiliser l’image de démarrage rapide. Sinon, l’application de fonction est déployée à partir de l’image de base pour votre langage des applications de fonction.

  7. 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. Le paramètre Public prend uniquement en charge les images stockées publiquement dans Docker Hub.

  8. Sous Allocation de ressources du conteneur, sélectionnez le nombre souhaité de cœurs d’UC et de mémoire disponible. Si votre environnement a d’autres profils de charge de travail ajoutés, vous pouvez sélectionner un profil de charge de travail non défini par défaut. Les choix sur cette page affectent le coût d’hébergement de votre application. Consultez la page de tarification Container Apps pour estimer vos coûts potentiels.

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

  10. 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.

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 également définir la quantité de ressources du processeur et la quantité de mémoire allouées à votre application.

Vous pouvez créer et gérer des profils de charge de travail et des allocations des ressources à 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. Spécifiez le profil en utilisant 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.

Pour définir les ressources allouées à votre application, remplacez <CPU_COUNT> par le 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.

Vous pouvez utiliser la commande az functionapp container set pour gérer les ressources allouées et le profil de charge de travail utilisé par votre application.

az functionapp container set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --workload-profile-name  <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

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

Lorsque vous hébergez l’application de fonction conteneurisée sur Azure Container Apps, vous pouvez configurer le déploiement continu à partir d’un référentiel du code source de deux façons :

Pour le moment, vous ne pouvez pas déployer en continu des conteneurs en fonction des modifications d’image dans un registre de conteneurs. Vous devez utiliser ces pipelines de déploiement continu basés sur le code source.

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 également configurer le déploiement continu à partir d’un référentiel de code source à l’aide d’Azure Pipelines ou de GitHub Actions.

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.

    Capture d’écran montrant comment ajouter le webhook dans votre fenêtre Docker Hub.

  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.

    Capture d’écran illustrant l’exécution de la commande Linux top dans une session SSH.

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