Etape 1 : Créer le service distant (Azure Function) dans le portail

Cette rubrique fournit des instructions détaillées pour créer une fonction Azure Function à utiliser comme service distant pour votre fonction externe.

Dans ce chapitre :

Étape précédente

Planification d’une fonction externe pour Azure

Créer l’application Azure Functions

Il existe plusieurs façons de créer un service distant. Cette section montre comment créer un service distant implémenté en tant que fonction JavaScript.

Cette fonction externe est synchrone. Pour des informations sur la création d’une fonction externe asynchrone, voir Création d’une fonction asynchrone sur Azure.

Créez une application Azure Functions qui servira de conteneur pour la ou les fonctions que vous créerez plus tard :

  1. Si vous ne l’avez pas encore fait, connectez-vous au portail Azure.

  2. Créez l’application Azure Functions en suivant les instructions de la documentation Microsoft : Application Azure Functions.

    Lorsque vous suivez ces instructions, n’oubliez pas ce qui suit :

    • Lorsque vous saisissez un nom dans le champ Function App Name , enregistrez également ce nom dans le champ Azure Function app name de votre feuille de calcul de suivi.

    • Quand on vous demande de choisir comment faire Publish, choisissez Code.

    • Certaines restrictions s’appliquent lors de la création de plusieurs applications dans un même groupe de ressources. Pour plus de détails, consultez la documentation Microsoft : Service de l’application Azure.

    Snowflake fournit un exemple de fonction « echo » dans Node.js. Pour utiliser cette fonction d’exemple pour commencer :

    • Lorsqu’on vous demande le Runtime stack, sélectionnez Node.js.

    • Lorsqu’on vous demande la version de Node.js, sélectionnez la version 12.

    • Lorsqu’il vous est demandé sur quel OS exécuter la fonction, choisissez « Windows » ou « Linux ».

      • Si vous ne créez qu’une fonction de démonstration, Snowflake recommande de sélectionner « Windows ».

        Les applications de fonction Linux ne peuvent pas être éditées dans le portail Azure. Les utilisateurs doivent publier le code via l’interface Visual Studio Code.

      • Si vous souhaitez exécuter votre fonction Azure sur Linux plutôt que sur Microsoft Windows, consultez la documentation Microsoft : Azure Functions.

        L’authentification Azure AD n’est pas disponible sur Linux lorsque vous utilisez le plan tarifaire « Consommation » pour Azure Functions. Vous devez utiliser un plan tarifaire « App Service » ou un plan « Premium » afin de vous authentifier avec Azure AD.

        Pour plus de détails, voir la documentation Microsoft : Azure AD.

Créer une fonction Azure déclenchée par HTTP

Après avoir créé votre application Azure Functions (conteneur), vous devez créer une fonction Azure dans ce conteneur. Cette fonction fait office de service distant.

Microsoft permet d’appeler (« déclencher ») des fonctions Azure de différentes manières. Une fonction externe Snowflake appelle un service distant via une commande HTTP POST, donc la fonction Azure que vous créez doit être une « fonction déclenchée par HTTP ».

Astuce

Vous pouvez utiliser les instructions fournies par Microsoft pour créer la fonction déclenchée par HTTP :

Cependant, Snowflake fournit des instructions personnalisées qui incluent des détails supplémentaires et des exemples de code, et suggère un niveau d’autorisation différent de celui de Microsoft. Nous suggérons d’utiliser les instructions personnalisées à la place des instructions de Microsoft.

Créer la fonction

Pour effectuer les tâches décrites dans cette section, vous devez vous trouver dans l’écran Function App du portail Azure. Le nom de votre application Azure Functions doit être affiché, généralement dans le coin supérieur gauche de l’écran.

Pour créer la fonction déclenchée par HTTP :

  1. Dans l’arborescence du menu de gauche, cherchez la section intitulée Functions. Dans cette section, cliquez sur l’élément étiqueté Functions pour ajouter une fonction.

  2. Cliquez sur le bouton + Add.

  3. Sélectionnez HTTP trigger dans la liste des déclencheurs potentiels sur la droite.

  4. Entrez le nom à utiliser pour votre fonction déclenchée par HTTP.

    Enregistrez ce nom dans le champ HTTP-Triggered Function name de votre feuille de calcul de suivi.

  5. Entrez le Authorization level.

    Snowflake recommande de choisir Function comme niveau d’autorisation.

    Pour plus d’informations sur les niveaux d’autorisation possibles, voir la documentation Microsoft : fonctions déclenchées par HTTP.

  6. Cliquez sur le bouton intitulé Add.

    Vous accédez alors à un écran qui affiche le nom de la fonction et, en dessous, le mot Function.

  7. Dans l’arborescence du menu de gauche, cliquez sur Code + Test.

  8. Remplacez le code par défaut par votre propre code.

    Un exemple de code pour une fonction JavaScript « echo » est fourni ci-dessous.

    La fonction lit chaque ligne, puis copie cette ligne dans la sortie (résultats). Le numéro de ligne est également inclus dans la sortie. La sortie est renvoyée dans le cadre d’un dictionnaire à plusieurs niveaux.

    Cette fonction accepte et renvoie les données au même format (JSON) que celui envoyé et lu par Snowflake. Pour plus d’informations sur les formats de données, voir Formats des données d’entrée et de sortie des services à distance .

    Normalement, la fonction renvoie le code HTTP 200. Si aucune ligne n’est transmise à la fonction (c’est-à-dire si le corps de la requête est vide), la fonction renvoie le code d’erreur 400.

    module.exports = async function(context, request) {
        context.log('JavaScript HTTP trigger function processed a request.');
    
        if (request.body) {
            var rows = request.body.data;
            var results = [];
            rows.forEach(row => {
                results.push([row[0], row]);
            });
    
            results = {data: results}
            context.res = {
                status: 200,
                body: JSON.stringify(results)
            };
       }
       else {
           context.res = {
               status: 400,
               body: "Please pass data in the request body."
           };
       }
    };
    
    Copy
  9. Cliquez sur le bouton Save au-dessus du code.

Tester la fonction

Pour tester la fonction Azure Function déclenchée par HTTP que vous venez de créer, collez l’échantillon de données suivant dans le champ Body et cliquez sur le bouton Test/Run :

{
    "data": [ [ 0, 43, "page" ], [ 1, 42, "life, the universe, and everything" ] ]
}
Copy

Le contenu de la sortie doit être similaire à ce qui suit :

{ "data":
    [
        [ 0, [ 0, 43, "page" ] ],
        [ 1, [ 1, 42, "life, the universe, and everything" ]  ]
    ]
}
Copy

Notez que le formatage peut être différent de ce qui est indiqué ci-dessus.

Définir les exigences d’autorisation pour l’application Azure Functions

Lorsqu’une fonction externe est appelée, Snowflake envoie une commande HTTP POST au service proxy (par exemple, le service Gestion des API Azure), qui relaie POST au service distant (par exemple la fonction Azure).

Chacune de ces deux étapes doit être soumise à des exigences d’autorisation, ce que vous précisez généralement :

  • L’autorisation nécessaire pour appeler le service Gestion des API.

  • L’autorisation nécessaire pour appeler des fonctions dans l’application Azure Functions qui contient votre fonction Azure.

Cette section décrit comment demander une autorisation pour votre application Azure Functions. Le service Gestion des API est créé ultérieurement, de sorte que ses exigences en matière d’autorisation soient également précisées ultérieurement.

Lorsque Snowflake s’authentifie avec votre application Azure Functions, Snowflake utilise le flux d’octroi d’identifiants de connexion du client OAuth avec Azure AD.

Pour plus de détails sur le flux d’octroi des informations d’identification du client, voir la documentation Microsoft : informations de connexion client.

Ce flux d’identifiants de connexion du client nécessite l’inscription d’une application Azure AD qui représente l’application Azure Functions.

Cette section contient les instructions pour créer l’inscription de l’application Azure AD pour l’application Azure Functions. Par exemple, vous pouvez paramétrer votre application Azure Functions pour exiger l’authentification Azure AD. Pour configurer l’autorisation via Azure AD, vous devez :

  • Créer une inscription d’application Azure AD, qui est une entité basée sur Azure AD représentant un identificateur d’identité ou de ressource (c’est-à-dire ce que vous voulez protéger).

  • Associez l’inscription de l’application Azure AD à l’application Azure Functions pour laquelle vous voulez exiger une authentification.

Note

Pour les fonctions Azure, le moyen le plus rapide de créer une inscription d’application Azure AD est d’activer l’authentification Azure AD pour le service, comme documenté ci-dessous. Si vous utilisez un service distant autre qu’une fonction Azure, utilisez la page App registrations pour créer une nouvelle inscription d’application Azure AD pour votre service distant.

Pour plus de détails sur l’inscription d’une application, voir la documentation Microsoft :

Activer l’authentification App Service pour l’application Azure Functions

Avant d’exécuter les étapes ci-dessous, vous devez vous trouver sur l’écran Function App de votre application Azure Functions.

  1. Dans le volet de gauche du menu, cherchez la section nommée Settings et cliquez sur Authentication.

    Si la marge de gauche affiche le menu Developer (avec Code + Test, Integration, etc.), alors si vous avez une barre de défilement en bas de votre écran, essayez de faire glisser la barre de défilement vers la gauche pour revenir à la section Function App ou App Service puis cherchez Settings.

  2. Cliquez sur le bouton Add identity provider.

  3. Dans le menu déroulant Identity provider, sélectionnez Microsoft.

  4. Pour App registration type, sélectionnez Create new app registration.

  5. Dans le champ Name, tapez le nom de votre application.

  6. Pour Supported account types, sélectionnez Current tenant - Single tenant.

  7. Pour Restrict access, sélectionnez Require authentication.

  8. Pour Unauthenticated requests, sélectionnez HTTP 401 Unauthorized.

  9. Cliquez sur Next: Permissions. Examinez les autorisations.

  10. Cliquez sur Add. Une nouvelle application Azure AD est créée et la page de l’application s’affiche.

  11. Cliquez sur le lien qui indique le nom de votre application pour accéder à la page de votre application Azure AD.

  12. Trouvez le champ Application (client) ID.

    Enregistrez cet ID dans le champ Azure Function App AD Application ID de votre feuille de calcul de suivi.

    Important

    Veillez à copier l’ID et non le nom de l’application Azure AD. L’ID doit contenir un UUID.

Étape suivante

Étape 2 : Créer le service proxy (service de gestion des API Azure) dans le portail