Partager via


Utiliser des conteneurs et des Azure Functions

Cet article illustre la prise en charge que Azure Functions fournit pour les applications de fonction conteneurisées qui s’exécutent dans un environnement Azure Container Apps. Pour plus d'informations, consultez hébergement des fonctions Azure avec Azure Container Apps.

Important

Une nouvelle méthode d’hébergement pour l’exécution de Azure Functions directement dans Azure Container Apps est désormais disponible. Consultez Support natif des Azure Functions dans Azure Container Apps. Cette intégration vous permet d’utiliser les fonctionnalités et fonctionnalités complètes de Azure Container Apps. Vous bénéficiez également du modèle de programmation de fonctions et de la simplicité de la mise à l’échelle automatique fournie par Azure Functions.

Nous vous recommandons cette approche pour la plupart des nouvelles charges de travail. Pour plus d’informations, consultez Azure Functions sur Azure Container Apps.

Cet article illustre la prise en charge que Azure Functions fournit pour les applications de fonction qui s’exécutent dans des conteneurs Linux.

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

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

Important

Cet article explique actuellement comment se connecter au compte storage par défaut à l’aide d’un connection string. Pour une sécurité optimale, créez plutôt une connexion basée sur une identité managée pour Azure Storage à l’aide de l’authentification Microsoft Entra. Pour plus d’informations, consultez Connexions.

Créer des 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

Lorsque 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. Consultez les répositories d'images de base pour 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 plus d’informations, consultez Gestion des conteneurs personnalisés.

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

Générer le fichier Dockerfile

Les outils Functions offrent une option Docker qui génère un fichier Dockerfile avec votre code de fonctions project. Vous pouvez utiliser ce fichier avec Docker pour créer vos fonctions dans un conteneur qui dérive de l’image de base correcte, qui inclut la langue et la version.

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

  • Lorsque vous créez un project Functions à l’aide de 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 project existant à l’aide de l’option --docker-only lorsque vous exécutez la commande func init dans un dossier project 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 Linux local.

Créer un fichier Dockerfile personnalisé

Au lieu d’utiliser un fichier Dockerfile généré, vous pouvez en créer manuellement un lorsque vous avez besoin d’un contrôle supplémentaire sur votre image conteneur. Le dossier de conteneur personnalisé du azure-functions-docker référentiel fournit ces modèles pour vous aider à démarrer :

Template Description
template.Dockerfile Guide pas à pas commenté pour la création d’un conteneur personnalisé. Il inclut des instructions pour plusieurs runtimes de langages (Java, .NET isolé, Node.js, PowerShell, Python), l'installation optionnelle d'un certificat d'autorité, l'exécution en tant qu'utilisateur sans privilèges root, et l'activation de SSH pour le débogage Kudu.
sample.Dockerfile Exemple prêt à l’emploi créé à partir du modèle qui crée un conteneur Azure Functions basé sur Java avec SSH activé pour le débogage Kudu.

Créer votre application de fonction dans un conteneur

Avec un fichier Dockerfile généré par Functions dans votre code project, 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 de l’project 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 code de fonctions project ou que vous devez effectuer une mise à jour vers la dernière image de base, régénérez le conteneur localement. Republiez l’image mise à jour dans votre registre de conteneurs choisi. 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 Container Registry et <LOGIN_SERVER> par le nom du serveur de connexion.

Mettez à 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 du Azure CLI ou dans le Azure portal :

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.

Créer une application de fonction conteneurisée à l’aide de la Azure portal

Lorsque vous créez une application de fonction dans le Azure portal, 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 Azure portal ou la page Home, sélectionnez Créer une ressource.

  2. Dans la page Nouveau, sélectionnezApplication de fonction>.

  3. Sous Sélectionner une option d’hébergement, choisissez Functions Premium>Select.

    Cette action 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 un plan App Service, mais dans ce type de plan dédié, vous devez gérer la mise à l'échelle de votre application fonctionnelle.

  4. Dans la page Informations de base , utilisez les paramètres de l’application de fonction comme spécifié dans le tableau suivant :

    Setting Valeur suggérée Description
    Subscription 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 d’une application Nom qui identifie votre nouvelle Function App. Les caractères valides sont a-z (insensible à la casse), 0-9et -.
    Sécuriser le nom d’hôte par défaut unique Enabled Activez cette fonctionnalité afin que vous n’ayez pas à vous soucier des collisions de noms de domaine, quel que soit le nom de votre application.
    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 Linux local.
    Region Région recommandée Sélectionnez une région près de chez vous ou des 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 Disabled Cette fonctionnalité n’est pas nécessaire dans une application hors production.
  5. Acceptez les options par défaut de création d’un compte storage sous l’onglet Storage et d’une nouvelle instance Application Insight sous l’onglet Monitoring. Vous pouvez également choisir d’utiliser un compte storage existant ou une instance Application Insights.

  6. Sélectionnez Examiner + créer pour passer en revue la configuration de l'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. Dans 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 de votre conteneur dans le Registre.

Créer une application de fonction conteneurisée à l’aide de la Azure portal

Lorsque vous créez une application de fonction hébergée par Container Apps dans le Azure portal, vous pouvez choisir de déployer votre 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 Azure portal ou la page Home, sélectionnez Créer une ressource.

  2. Dans la page Nouveau, sélectionnezApplication de fonction>.

  3. Sous Sélectionner une option d’hébergement, choisissez Environnement Container Apps>Sélectionner.

  4. Dans la page Informations de base , utilisez les paramètres de l’application de fonction comme spécifié dans le tableau suivant :

    Setting Valeur suggérée Description
    Subscription 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 -.
    Region Région recommandée Sélectionnez une région près de chez vous ou des 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 Basics, acceptez le nouvel environnement suggéré pour Azure Container Apps environnement. 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 des fonctions Azure avec Azure Container Apps.

    Vous pouvez également choisir d’utiliser un environnement Container Apps existant. Pour créer un environnement personnalisé, sélectionnez Créer un nouvel environnement. À 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 Azure Container Apps environnements.

  6. Sélectionnez l’onglet Conteneur 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 Private si vous utilisez Azure Container Registry ou un autre registre privé. Indiquez 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 nondefault. 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 Examiner + créer pour passer en revue la configuration de l'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 :

Utiliser les profils de charge de travail de 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 les profils Workload 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 de ressources à l’aide de la Azure CLI ou dans le Azure portal.

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 obtenir 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 à l’aide du 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 storage. Remplacez <APP_NAME> également par un nom approprié pour vous qui est unique dans l’environnement.

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> 

Utiliser des paramètres d’application

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

Tip

Par défaut, une application de fonction conteneurisée surveille les requêtes entrantes sur le port 80. Si votre application doit utiliser un autre port, utilisez le WEBSITES_PORT paramètre d’application pour modifier ce port.

Activer le déploiement continu pour Azure

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

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 plutôt ces pipelines de déploiement continu basé sur du code source.

Activer le déploiement continu pour 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 de Azure Pipelines ou 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 à tout moment à l’aide de la commande az functionapp deployment container show-cd-url.

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

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

  2. Ouvrez Docker Hub, connectez-vous, puis sélectionnez Repositories 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 l’URL du Webhook, puis sélectionnez Créer.

    Screenshot montrant comment ajouter le webhook dans votre fenêtre Docker Hub window.

  3. Une fois 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 SSH activé, vous pouvez vous connecter à votre conteneur à l’aide de App Service Advanced Tools (Kudu). Pour faciliter la connexion à votre conteneur à l’aide de SSH, Azure Functions fournit une image de base sur laquelle SSH est déjà activé. Vous devez uniquement modifier votre fichier Dockerfile, puis reconstruire et redéployer l’image. Vous pouvez ensuite vous connecter au conteneur via les outils avancés (Kudu).

  1. Dans votre fichier Dockerfile, ajoutez la chaîne -appservice à l’image de base dans votre FROM instruction, 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 les répertoires des images de base Azure Functions afin de vérifier que vous utilisez la dernière version de l'image de base compatible avec SSH.

  2. Régénérez l’image à l’aide de la commande docker build, remplacez la <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 à Docker Hub, ce qui doit prendre beaucoup moins de temps que le premier push. 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 dans votre application de fonctions. Le processus a lieu en moins d’une minute.

  5. Dans le Azure portal, recherchez votre application de fonction. Dans le menu de gauche, sélectionnez Outils> de développementSSH. Sélectionnez Go. La connexion peut prendre quelques instants si Azure met toujours à jour l’image conteneur.

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