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

This topic provides detailed instructions for creating an Azure Function for use as the remote service for your external function.

Dans ce chapitre :

Créer l’application de la fonction Azure

Créez une application Azure Function 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 Function en suivant les instructions de la documentation Microsoft : Application Azure Function.

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

    • Lorsque vous saisissez un nom dans le champ Function App Name:extui:, enregistrez également ce nom dans le champ « Nom d’application Azure Function » 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 de fonction Azure (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 de fonction Azure 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.

    Record this name in the « HTTP-Triggered Function name » field in your tracking worksheet.

  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."
           };
       }
    };
    
  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" ] ]
}

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

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

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

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

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 de fonction Azure qui contient votre fonction Azure.

Cette section décrit comment demander une autorisation pour votre application de fonction Azure. 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 de fonction Azure, Snowflake utilise le flux d’octroi d’informations d’identification 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’informations d’identification du client nécessite l’inscription d’une application Azure AD qui représente l’application de fonction Azure.

Cette section contient les instructions pour créer l’inscription de l’application Azure AD pour l’application Azure Function. Par exemple, vous pouvez paramétrer votre application de fonction Azure 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 de fonction Azure 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 Function

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

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

    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. Trouvez le bouton intitulé App Service Authentication et faites-le passer de Off à On.

    Si vous ne pouvez pas modifier les paramètres sur cette page Authentication / Authorization , voir le conseil de dépannage Impossible de modifier les paramètres pendant la création de la fonction Azure.

  3. Trouvez le menu déroulant Action to take when request is not authenticated et sélectionnez Log in with Azure Active Directory.

  4. Sous Authentication Providers, sélectionnez Azure Active Directory si cette option n’est pas déjà sélectionnée.

  5. Cliquez sur Azure Active Directory, ce qui vous amène à l’écran Azure Active Directory Settings .

Enregistrez l’application Azure AD

À présent, vous devriez être sur l’écran Azure Active Directory Settings. Pour enregistrer l’application AD pour votre application Azure Function :

  1. Faites passer le premier bouton Management mode de Off à Express ou Advanced. Les instructions suivantes supposent que vous avez choisi Express.

  2. Trouvez le deuxième bouton Management mode et sélectionnez Create New AD App ou Select Existing AD App.

    Pour cette démonstration, sélectionnez Create New AD App à moins que vous n’ayez déjà une inscription de l’application Azure AD que vous souhaitez utiliser.

  3. Par défaut, le nom d’inscription de l’application Azure AD est le même que le nom de l’application de fonction Azure. Ce nom doit apparaître dans le champ Create App. Vous pouvez changer ce nom si vous le souhaitez.

    Inscrivez le nom d’enregistrement d’application Azure AD dans le champ « Nom de l’inscription d’application Azure Function AD » de la feuille de calcul de suivi.

  4. Cliquez sur le bouton OK en bas à gauche de votre fenêtre. Cela crée une inscription d’application Azure AD et vous renvoie à l’écran App Service Authentication / Authorization .

  5. Vérifiez que le bouton App Service Authentication est On.

  6. Cliquez sur le bouton Save qui se trouve près du coin supérieur gauche du panneau principal (à droite du panneau de menu).

La plupart des étapes précédentes sont également documentées dans la documentation de Microsoft : Configurer un fournisseur d’authentification.

Vérifier l’application Azure AD

Maintenant que votre application Azure AD est inscrite, l’étape suivante consiste à vérifier que l’application est bien répertoriée sous App registrations :

  1. Ouvrez un nouvel onglet du navigateur et allez sur http://portal.azure.com, puis cliquez sur App registrations.

    Si ce n’est pas visible, cherchez App registrations dans la fenêtre de recherche Microsoft Azure en haut de l’écran.

    Vous devriez maintenant être sur l’écran App registrations où vous devriez voir deux onglets, All applications et Owned applications.

  2. Sélectionnez l’onglet All applications s’il n’est pas déjà sélectionné.

  3. Cliquez sur le nom de l’inscription d’application Azure AD que vous venez de créer pour votre application de fonction Azure.

    Note

    Vous pouvez utiliser la barre de recherche pour rechercher votre application Azure AD par son nom. Pour ce faire, entrez les premiers caractères du nom. La barre de recherche suppose que vous tapez la première partie du nom. Elle ne recherche pas la sous-chaîne spécifiée partout dans les noms de fonctions.

    Ce qui vous amène à l’écran App registrations.

  4. Sur l’écran des inscriptions des applications qui décrit l’application Azure AD pour votre application de fonction Azure, vous devez voir le nom de votre application Azure AD.

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