Créer et exécuter du code à partir de workflows dans Azure Logic Apps à l’aide d’Azure Functions

Quand vous voulez exécuter du code qui effectue une tâche spécifique dans le workflow de votre application logique, vous pouvez créer une fonction à l’aide d’Azure Functions. Ce service vous permet de créer des fonctions Node.js, C# et F# pour ne pas avoir à générer une application ou une infrastructure complète en vue d’exécuter votre code. Azure Functions fournit une informatique sans serveur dans le cloud et est utile pour effectuer certaines tâches, par exemple :

  • Étendre le comportement de votre application logique avec des fonctions dans Node.js ou C#
  • Effectuer des calculs dans le workflow de votre application logique
  • Appliquer une mise en forme avancée ou calculer des champs dans vos workflows d’application logique.

Notes

Azure Logic Apps ne prend pas en charge l’utilisation d’Azure Functions avec les emplacements de déploiement activés. Bien que ce scénario puisse parfois fonctionner, ce comportement est imprévisible et peut entraîner des problèmes d’autorisation lorsque votre workflow tente d’appeler la fonction Azure.

Cet article explique comment appeler une fonction Azure à partir d’un workflow d’application logique. Pour exécuter des extraits de code sans utiliser Azure Functions, consultez Ajouter et exécuter du code inclus. Pour appeler et déclencher une application logique à partir d’une fonction, le workflow doit démarrer avec un déclencheur qui fournit un point de terminaison pouvant être appelé. Par exemple, vous pouvez démarrer le workflow avec le déclencheur HTTP, Requête, Files d’attente Azure ou Event Grid. À partir de l’intérieur de votre fonction, envoyez une requête HTTP POST à l’URL du déclencheur et incluez la charge utile que ce workflow doit traiter. Pour plus d’informations, consultez Appeler, déclencher ou imbriquer des workflows d’application logique.

Prérequis

  • Compte et abonnement Azure. Si vous n’avez pas encore d’abonnement, vous pouvez vous inscrire pour obtenir un compte Azure gratuitement.

  • Une ressource d’application de fonction Azure, qui est un conteneur pour une fonction que vous pouvez créer à l’aide d’Azure Functions, ainsi que la fonction que vous souhaitez utiliser.

    Si vous n’avez pas d’application de fonction, créez-la en premier lieu. Vous pouvez ensuite créer votre fonction soit à l’extérieur de votre application logique dans le portail Azure, soit à partir de votre application logique dans le concepteur de workflow.

  • Lorsque vous travaillez avec des ressources d’application logique, les mêmes exigences s’appliquent aux applications de fonction et aux fonctions, existantes ou nouvelles :

    • La ressource de votre application de fonction et la ressource de l’application logique doivent utiliser le même abonnement Azure.

    • Les nouvelles applications de fonction doivent utiliser le .NET ou JavaScript comme pile d’exécution. Quand vous ajoutez une nouvelle fonction à des applications de fonction existantes, vous pouvez sélectionner C# ou JavaScript.

    • Votre fonction utilise le modèle Déclencheur HTTP.

      Le modèle de déclencheur HTTP peut accepter du contenu ayant le type application/json à partir de votre workflow d’application logique. Quand vous ajoutez une fonction à votre workflow, le concepteur affiche des fonctions personnalisées qui sont créées à partir de ce modèle dans votre abonnement Azure.

    • Votre fonction n’utilise pas d’itinéraires personnalisés, sauf si vous avez défini une définition OpenAPI (fichier Swagger).

    • Si vous avez une définition OpenAPI pour votre fonction, le Concepteur de workflow vous offre une meilleure expérience quand vous travaillez avec des paramètres de fonction. Pour que votre workflow d’application logique puisse trouver les fonctions qui ont des définitions OpenAPI et y accéder, configurez votre application de fonction en suivant les étapes ultérieures.

  • Workflow et ressource d’application logique standard ou de consommation dans laquelle vous souhaitez utiliser la fonction.

    Avant de pouvoir ajouter une action qui exécute une fonction dans votre workflow, le workflow doit démarrer avec un déclencheur comme première étape. Si vous n’êtes pas familiarisé avec les workflows d’application logique, consultez les sections Présentation d’Azure Logic Apps et Démarrage rapide : créer votre premier flux de travail d’application logique.

Rechercher des fonctions qui ont des descriptions OpenAPI

Pour bénéficier d’une expérience plus complète quand vous travaillez avec des paramètres de fonction dans le concepteur de workflow, générez une définition OpenAPI ou un fichier Swagger pour votre fonction. Pour configurer votre application de fonction afin que votre application logique puisse trouver les fonctions qui ont des descriptions Swagger et y accéder, procédez comme suit :

  1. Ouvrez votre application de fonction dans le portail Azure. Vérifiez que l’application de fonction est en cours d’exécution.

  2. Configurez le Partage des ressources Cross-Origin (CORS) pour votre application de fonction afin que toutes les origines soient autorisées. Procédez comme suit :

    1. Dans le menu de ressource d’application de fonction, sous API, sélectionnez CORS.

      Screenshot showing the Azure portal, the function app resource menu with the

    2. Sous CORS, ajoutez le caractère générique * (astérisque), mais supprimez toutes les autres origines de la liste, puis sélectionnez Enregistrer.

      Screenshot showing the Azure portal, the

Accéder aux valeurs de propriétés à l’intérieur des requêtes HTTP

Les fonctions webhook peuvent accepter des requêtes HTTP en tant qu’entrées, et transmettre ces requêtes à d’autres fonctions. Par exemple, bien qu’Azure Logic Apps ait des fonctions qui convertissent les valeurs DateTime, cette exemple de fonction JavaScript de base montre comment accéder à une propriété à l’intérieur d’un objet de requête qui est passé à la fonction, et comment effectuer des opérations sur la valeur de cette propriété. Pour accéder aux propriétés à l’intérieur d’objets, cet exemple utilise l’opérateur point (.) :

function convertToDateString(request, response){
   var data = request.body;
   response = {
      body: data.date.ToDateString();
   }
}

Voici ce qui se passe à l’intérieur de cette fonction :

  1. La fonction crée une variable data et assigne l’objet body à l’intérieur de l’objet request à cette variable. La fonction utilise l’opérateur point (.) pour référencer l’objet body à l’intérieur de l’objet request :

    var data = request.body;
    
  2. La fonction peut maintenant accéder à la propriété date par le biais de la variable data, et convertir cette valeur de propriété du type DateTime vers le type DateString en appelant la fonction ToDateString(). La fonction retourne également le résultat par le biais de la propriété body dans la réponse de la fonction :

    body: data.date.ToDateString();
    

Maintenant que vous avez créé votre fonction dans Azure, suivez les étapes pour ajouter des fonctions à des applications logiques.

Créer des fonctions à partir de workflows d’application logique

Vous pouvez créer des fonctions directement depuis le workflow de votre application logique à l’aide de l’action intégrée Azure Functions dans le Concepteur de workflow, mais cette méthode est réservée aux fonctions écrites en JavaScript. Pour les autres langages, vous pouvez créer des fonctions via l’expérience Azure Functions du portail Azure. Cela étant, avant de pouvoir créer votre fonction dans Azure, vous devez déjà disposer d’une ressource d’application de fonction, à savoir d’un conteneur pour vos fonctions. Si vous n’avez pas d’application de fonction, créez-la en premier lieu. Pour plus d'informations, consultez Créer votre première fonction à l’aide du portail Azure.

Notes

Actuellement, vous pouvez uniquement créer une fonction directement à partir d’un workflow d’application logique de consommation, et non d’un workflow d’application logique standard. Toutefois, vous pouvez créer la fonction d’une autre façon à l’aide du modèle Portail Azure, Visual Studio, Visual Studio Code, Azure CLI, Azure PowerShell ou ARM. Vous pouvez ensuite appeler cette fonction à partir de votre workflow d’application logique standard à l’aide de l’opération Azure Functions nommée Appeler une fonction Azure.

  1. Sur le portail Azure, ouvrez votre workflow d’application logique dans le concepteur.

  2. Pour créer et ajouter votre fonction, suivez l’étape qui s’applique à votre scénario :

    • Sous la dernière étape de votre workflow, sélectionnez Nouvelle étape.

    • Entre les étapes existantes du workflow de votre application logique, déplacez votre souris sur la flèche, sélectionnez le signe plus (+), puis Ajouter une action.

  3. Dans la zone de recherche du Concepteur, entrez azure functions. Dans la liste d’actions, sélectionnez l’action Choisir une fonction Azure, par exemple :

    Screenshot showing the Azure portal for Consumption logic app workflow and the designer with the search box to find Azure functions.

  4. Dans la liste d’applications de fonction, sélectionnez la vôtre. Une fois la liste des actions ouverte, sélectionnez l’action nommée Créer une fonction.

    Screenshot showing the operation picker with

  5. Dans l’éditeur de définition de fonction, définissez votre fonction :

    1. Dans la zone Nom de la fonction, fournissez un nom pour votre fonction.

    2. Dans la zone Code, ajoutez votre code au modèle de fonction, notamment la réponse et la charge utile qui doivent être retournées à votre application logique une fois l’exécution de votre fonction terminée. Lorsque vous avez terminé, sélectionnez Créer, par exemple :

    Screenshot showing the function authoring editor with template function definition.

    Dans le code du modèle, l’objet context fait référence au message envoyé par votre workflow via la propriété Request body au cours d’une étape ultérieure. Pour accéder aux propriétés de l’objet context depuis l’intérieur de votre fonction, utilisez la syntaxe suivante :

    context.body.<property-name>

    Par exemple, pour référencer la propriété content à l’intérieur de l’objet context, utilisez la syntaxe suivante :

    context.body.content

    Le code du modèle inclut également une variable input, qui stocke la valeur du paramètre data afin que votre fonction puisse effectuer des opérations sur cette valeur. À l’intérieur des fonctions JavaScript, la variable data est également un raccourci pour context.body.

    Notes

    La propriété body s’applique ici à l’objet context. Ce n’est pas la même chose que le jeton Corps du résultat d’une action, que vous pouvez également transmettre à votre fonction.

  6. Dans la zone Corps de la demande, spécifiez l’entrée de votre fonction, qui doit être au format JSON (JavaScript Objet Notation).

    Cette entrée est l’objet de contexte ou le message que votre application logique envoie à votre fonction. Quand vous cliquez dans le champ Corps de la demande, la liste de contenu dynamique s’ouvre afin que vous puissiez sélectionner des jetons pour les sorties issues des étapes précédentes. Cet exemple indique que la charge utile du contexte contient une propriété nommée content qui a la valeur du jeton De à partir du déclencheur d’e-mail.

    Screenshot showing the function and the

    Ici, l’objet de contexte n’est pas converti sous forme de chaîne. Le contenu de l’objet est donc ajouté directement à la charge utile JSON. Toutefois, lorsque l’objet de contexte n’est pas un jeton JSON qui renvoie une chaîne, un objet JSON ou un tableau JSON, une erreur se produit. Par conséquent, en utilisant à la place le jeton Heure de réception, vous pouvez convertir l’objet de contexte sous forme de chaîne en ajoutant des guillemets doubles, par exemple :

    Screenshot showing the

  7. Pour spécifier d’autres détails comme la méthode à utiliser, les en-têtes de demande, les paramètres de requête ou l’authentification, ouvrez la liste Ajouter un nouveau paramètre, puis sélectionnez les options souhaitées. Pour l’authentification, vos options varient selon la fonction sélectionnée. Pour plus d’informations, consultez Activer l’authentification pour les fonctions.

Ajouter des fonctions existantes à des workflows d’application logique

Pour appeler des fonctions existantes à partir de votre workflow d’application logique, vous pouvez ajouter des fonctions comme toute autre action dans le concepteur de workflow.

  1. Sur le portail Azure, ouvrez votre workflow d’application logique dans le concepteur.

  2. Sous l’étape à laquelle vous souhaitez ajouter la fonction, sélectionnez Nouvelle étape.

  3. Sous Choisir une action, dans la zone de recherche, entrez azure functions. Dans la liste d’actions, sélectionnez l’action Choisir une fonction Azure, par exemple :

    Screenshot showing Azure portal for Consumption logic app workflow and designer with the search box to find Azure functions.

  4. Dans la liste d’applications de fonction, sélectionnez la vôtre. Une fois la liste de fonctions affichée, sélectionnez votre fonction.

    Screenshot for Consumption showing a selected function app and function.

    Pour les fonctions qui ont des définitions d’API (description Swagger) et qui sont configurées pour que votre application logique puisse rechercher ces fonctions et y accéder, vous pouvez sélectionner Actions Swagger.

    Screenshot for Consumption showing a selected function app, and then under

  5. Dans la zone Corps de la demande, spécifiez l’entrée de votre fonction, qui doit être au format JSON (JavaScript Objet Notation).

    Cette entrée est l’objet de contexte ou le message que votre application logique envoie à votre fonction. Quand vous cliquez dans le champ Corps de la demande, la liste de contenu dynamique s’affiche afin que vous puissiez sélectionner des jetons pour les sorties des étapes précédentes. Cet exemple indique que la charge utile du contexte contient une propriété nommée content qui a la valeur du jeton De à partir du déclencheur d’e-mail.

    Screenshot for Consumption showing the function with a

    Ici, l’objet de contexte n’est pas converti sous forme de chaîne. Le contenu de l’objet est donc ajouté directement à la charge utile JSON. Toutefois, lorsque l’objet de contexte n’est pas un jeton JSON qui renvoie une chaîne, un objet JSON ou un tableau JSON, une erreur se produit. Par conséquent, en utilisant à la place le jeton Heure de réception, vous pouvez convertir l’objet de contexte sous forme de chaîne en ajoutant des guillemets doubles :

    Screenshot for Consumption showing the function with the

  6. Pour spécifier d’autres détails comme la méthode à utiliser, les en-têtes de demande, les paramètres de requête ou l’authentification, ouvrez la liste Ajouter un nouveau paramètre, puis sélectionnez les options souhaitées. Pour l’authentification, vos options varient selon la fonction sélectionnée. Pour plus d’informations, consultez Activer l’authentification pour les fonctions.

Activer l’authentification pour les appels de fonction

Pour authentifier l’accès aux ressources protégées par Azure Active Directory (Azure AD), votre application logique peut utiliser une identité managée (anciennement appelée Managed Service Identity ou MSI). Cette identité managée peut authentifier l’accès sans avoir à se connecter et à fournir des informations d’identification ou des secrets. Azure gère cette identité pour vous et vous aide à sécuriser vos informations d’identification, car vous n’êtes pas obligé de fournir ni de faire pivoter des secrets. Vous pouvez configurer l’identité affectée par le système ou une identité créée manuellement et affectée par l’utilisateur sur votre application logique. La fonction appelée à partir de votre workflow peut utiliser la même identité pour l’authentification.

Pour plus d’informations, consultez la documentation suivante :

Pour configurer votre application de fonction et la fonction afin qu’elles puissent utiliser l’identité managée de votre application logique, suivez cette procédure générale :

  1. Activez et configurez l’identité managée de votre application logique.

  2. Configurez l’authentification anonyme dans votre fonction.

  3. Recherchez les valeurs requises pour configurer l’authentification Azure AD.

  4. Créez une inscription d’application pour votre application de fonction.

Configurer l’authentification anonyme dans votre fonction

Pour que votre fonction utilise l’identité managée de votre application logique, vous devez définir le niveau d’authentification de votre fonction sur anonyme. Dans le cas contraire, votre workflow d’application logique génère une erreur BadRequest.

  1. Dans le portail Azure, recherchez et sélectionnez votre application de fonction.

    Les étapes suivantes utilisent un exemple d’application de fonction nommé FabrikamFunctionApp.

  2. Dans le menu de ressource d’application de fonction, sous Outils de développement, sélectionnez Outils avancés>Accéder.

    Screenshot showing function app menu with

  3. Une fois la page Services Kudu ouverte, dans le menu Console de débogage de la barre de titre du site web Kudu, sélectionnez CMD.

    Screenshot showing Kudu Services page with

  4. Une fois la page suivante affichée, dans la liste des dossiers, sélectionnez site>wwwroot>votre-fonction.

    Les étapes suivantes utilisent un exemple de fonction nommé FabrikamAzureFunction.

    Screenshot showing folder list with

  5. Ouvrez le fichier function.json pour le modifier.

    Screenshot showing

  6. Dans l’objet bindings , vérifiez si la propriété authLevel existe. Si la propriété existe, définissez sa valeur sur anonyme. Sinon, ajoutez cette propriété et définissez sa valeur.

    Screenshot showing the

  7. Lorsque vous avez terminé, enregistrez vos paramètres. Passez à la section suivante.

Rechercher les valeurs requises pour configurer l’authentification Azure AD

Avant de pouvoir configurer votre application de fonction de façon à utiliser l’authentification Azure AD, vous devez rechercher et enregistrer les valeurs suivantes en suivant la procédure de cette section.

  1. Recherchez l’ID de l’objet (principal) de l’identité managée de votre application logique.
  2. Recherchez l’ID de client pour votre Azure Active Directory (Azure AD).

Rechercher l’ID de l’objet (principal) de l’identité managée de votre application logique

Selon que vous disposez ou non d’une ressource d’application logique standard ou de consommation, suivez les étapes correspondantes :

  1. Une fois l’identité managée de votre application logique activée, dans le menu d’application logique, sous Paramètres, sélectionnez Identité, puis Attribuée par le système ou Attribuée par l' utilisateur.

    • Attribuée par le système

      Pour l’identité attribuée par le système, copiez l’ID d’objet de l’identité, par exemple :

      Screenshot showing the Consumption logic app

    • Attribuée par l'utilisateur

      1. Pour l’identité attribuée par l’utilisateur, sélectionnez l’identité pour rechercher l’ID de l’objet, par exemple :

        Screenshot showing the Consumption logic app

      2. Dans le volet Vue d’ensemble de l’identité managée, vous trouverez l’ID d’objet de l’identité, par exemple :

        Screenshot showing the user-assigned identity's

Rechercher l’ID de locataire pour votre Azure AD

Pour trouver votre ID de locataire Azure AD, exécutez la commande PowerShell Get-AzureAccount ou, dans le portail Azure, procédez comme suit :

  1. Dans le portail Azure, ouvrez votre locataire Azure AD. Ces étapes utilisent l’exemple de locataire Fabrikam.

  2. Dans le menu du locataire Azure AD, sous Gérer, sélectionnez Propriétés.

  3. Copiez et enregistrez votre ID de locataire pour une utilisation ultérieure, par exemple :

    Screenshot showing your Azure AD

Créer une inscription d’application pour votre application de fonction

Une fois que vous avez trouvé l’ID d’objet de l’identité managée de votre application logique et l’ID de locataire de votre Azure AD, vous pouvez configurer votre application de fonction de manière à utiliser l’authentification Azure AD en créant une inscription d’application. Pour plus d’informations, consultez Configurer votre application App Service ou Azure Functions de façon à utiliser une connexion Azure AD.

  1. Ouvrez votre application de fonction dans le portail Azure.

  2. Dans le menu de l’application de fonction, sous Paramètres, sélectionnez Authentification, puis sélectionnez Ajouter un fournisseur d'identité.

    Screenshot showing function app menu with

  3. Dans le volet Ajouter un fournisseur d’identité, sous Concepts de base, dans la liste Fournisseur d’identité, sélectionnez Microsoft.

  4. Sous Inscription d’application, pour Type d’inscription d’application, sélectionnez Fournir les détails d’une inscription d’application existante, puis entrez les valeurs que vous avez enregistrées précédemment.

    Propriété Obligatoire Valeur Description
    ID d’application (client) Oui <object-ID> Identificateur unique à utiliser pour l’inscription de cette application. Pour ce scénario, utilisez l’ID d’objet de l’identité gérée de votre application logique.
    Clé secrète client <client-secret> Recommandé Valeur secrète utilisée par l’application pour prouver son identité lors de la demande d’un jeton. La clé secrète client est créée et stockée dans la configuration de votre application sous la forme d’un paramètre d’application à emplacement fixé nommé MICROSOFT_PROVIDER_AUTHENTICATION_SECRET. Pour gérer le secret dans Azure Key Vault, vous pouvez mettre à jour ce paramètre ultérieurement pour utiliser des références Key Vault.

    - Si vous fournissez une valeur de clé secrète client, les opérations de connexion utilisent le flux hybride, en retournant à la fois les jetons d’accès et d’actualisation.

    - Si vous ne fournissez pas de clé secrète client, les opérations de connexion utilisent flux d’octroi implicite OAuth 2.0 et ne retournent qu’un jeton d’ID.

    Ces jetons sont envoyés par le fournisseur et stockés dans le magasin de jetons EasyAuth.
    URL de l’émetteur Non <URL-point de terminaison-authentification>/<ID-locataire-Azure-AD>/v2.0 Cette URL sert à rediriger les utilisateurs vers le bon locataire Azure AD, mais aussi à télécharger les métadonnées appropriées pour déterminer les clés de signature de jetons et la valeur de revendication de l’émetteur de jeton qui conviennent. Pour les applications qui utilisent Azure AD v1, omettez /v2.0 dans l’URL.

    Pour ce scénario, utilisez l’URL suivante : https://sts.windows.net/<ID-locataire-Azure-AD>
    Audiences de jeton autorisées Non <URI d’ID d’application> URI d’ID d’application (ID de ressource) pour l’application de fonction. Pour une application cloud ou serveur, si vous souhaitez autoriser les jetons d’authentification d’une application web, ajoutez l’URI d’ID d’application de l’application web ici. L’ID client configuré est toujours implicitement considéré comme une audience autorisée.

    Pour ce scénario, la valeur est https://management.azure.com. Plus tard, vous pouvez utiliser le même URI dans la propriété Audience lorsque vous configurez votre action de fonction dans votre workflow pour utiliser l’identité managée.

    Important : l’URI d’ID d’application (ID de ressource) doit correspondre exactement à ce qu’attend Azure AD, notamment les barres obliques de fin obligatoires.

    À ce stade, votre version ressemble à l’exemple suivant :

    Screenshot showing the app registration for your logic app and identity provider for your function app.

    Si vous configurez votre application de fonction avec un fournisseur d’identité pour la première fois, la section Paramètres d’authentification App Service s’affiche également. Ces options déterminent la façon dont votre application de fonction répond aux demandes non authentifiées. La sélection par défaut redirige toutes les demandes de connexion avec le nouveau fournisseur d’identité. Vous pouvez personnaliser ce comportement maintenant ou ajuster ces paramètres ultérieurement à partir de la page Authentification principale en sélectionnant Modifier en regard de Paramètres d’authentification. Pour en savoir plus sur ces options, consultez Flux d’authentification du flux - Authentification et autorisation dans Azure App Service et Azure Functions.

    Dans le cas contraire, vous pouvez passer à l’étape suivante.

  5. Pour terminer la création de l’inscription de l’application, sélectionnez Ajouter.

    Lorsque vous avez terminé, la page Authentification répertorie maintenant le fournisseur d’identité et l’ID d’application (ID client) pour l’inscription de l’application. Votre application de fonction peut maintenant utiliser cette inscription d’application pour l’authentification.

    Pour plus d’informations, consultez Configurer votre application App Service ou Azure Functions de façon à utiliser une connexion Azure AD.

  6. Copiez l’ID d’application (ID client) de votre fonction à utiliser dans la propriété Audience plus loin dans votre workflow.

  7. Revenez au concepteur et suivez la procédure d’authentification de l’accès avec l’identité managée à l’aide de l’action intégrée Azure Functions.

Étapes suivantes