Création d’un exemple de fonction externe à l’aide d’un modèle de gestionnaire des ressources Azure

Ce document montre comment créer un exemple de fonction externe sur Microsoft Azure en utilisant un modèle Azure Resource Manager (ARM).

Snowflake fournit un modèle avec lequel vous pouvez commencer. Ce modèle masque certains détails du processus de création et code en dur certains noms (par exemple le nom du déclencheur) et fonctionnalités. Lorsque vous êtes prêt à créer votre propre fonction externe personnalisée, vous pouvez soit personnaliser une copie du modèle, soit suivre les instructions plus souples disponibles sur Création d’une fonction externe sur Microsoft Azure à l’aide du portail Azure .

Note

Ces instructions supposent que vous connaissez déjà l’administration de Microsoft Azure. Ces instructions décrivent les étapes générales que vous devez exécuter, mais ne décrivent pas en détail l’interface utilisateur, car l’interface pourrait changer.

Dans ce chapitre :

Voir aussi :

Introduction

Le modèle ARM exécute les deux étapes suivantes de la création d’une fonction externe :

  • Création du service à distance (par exemple, la fonction Azure).

  • Création et configuration du service proxy (par ex. le service Gestion des API Azure).

Le modèle aussi :

  • Crée un compte de stockage nécessaire au service de la fonction Azure.

  • Ajoute une politique validate-JWT à l’instance de gestion des API afin d’accroître la sécurité du service de gestion des API Azure. Cependant, vous devez mettre à jour manuellement la politique JWT avant de l’utiliser.

Pour télécharger le modèle depuis Snowflake, pointez votre navigateur vers le référentiel Snowflake dans GitHub.

Planification de votre fonction externe sur Azure

Conditions préalables

Vous avez besoin des éléments suivants :

  • Un compte avec Azure, y compris des privilèges pour :

    • Créer des fonctions Azure.

    • Créer une passerelle API en utilisant la gestion des API.

  • Un compte Snowflake dans lequel vous disposez des privilèges ACCOUNTADMIN ou un rôle avec le privilège CREATE INTEGRATION.

Vous devriez déjà disposer des informations suivantes :

Azure AD Tenant ID: _____________________________________

Il s’agit d’un UUID qui est généralement formaté de manière à ressembler à 12345678-abcd-1234-efab-123456789012, où chaque caractère qui n’est pas un tiret est un chiffre hexadécimal.

Si vous ne connaissez pas encore votre ID de client AD Azure, vous pouvez le trouver en procédant comme suit :

  1. Connectez-vous au portail Azure (http://portal.azure.com).

  2. Dans les icônes Azure services en haut de la page, cliquez sur Azure Active Directory.

  3. Dans le menu de gauche, cherchez la section intitulée Manage, puis cliquez sur Properties sous celle-ci.

    L’ID de client Azure AD s’affiche dans le champ ID du client.

Ce document suppose que vous êtes un utilisateur du portail Azure expérimenté.

Feuille de calcul

Lorsque vous créez votre fonction externe, vous devez enregistrer des informations spécifiques (par exemple, le nom du service des gestion des API) que vous saisissez afin de pouvoir utiliser ces informations dans les étapes suivantes. La feuille de calcul ci-dessous vous aide à suivre ces informations.

Pour les informations codées en dur dans le modèle de gestion des ressources Azure fourni par Snowflake, les valeurs ont déjà été remplies ci-dessous.

==============================================================================================
====================================== Quick-start Worksheet =================================
==============================================================================================

----------------- Information about the Azure Function (remote service) ----------------------

HTTP-Triggered Function name...........: __________________ echo ________________

Azure function AD Application ID.......: ________________________________________

    (This is the "Application (client) ID" of the Azure AD app registration for the Azure function,
    and is used to fill in the "azure_ad_application_id" field in the "CREATE API INTEGRATION" command.
    This is in the form of a UUID.)


------------ Information about the Azure API Management Service (proxy service) --------------

API Management service name......: __________________________________________

API Management URL...............: __________________________________________

Azure Function HTTP Trigger URL..: __________________________________________

API Management API URL suffix....: __________________________________________


---------------- Snowflake API Integration and External Function Information -----------------

API Integration Name.......: _______________________________________________

AZURE_MULTI_TENANT_APP_NAME: _______________________________________________

AZURE_CONSENT_URL..........: _______________________________________________

External Function Name.....: _______________________________________________

Étape 1 : Créer une application Azure AD pour l’application de la fonction Azure

  1. Connectez-vous au portail Azure.

  2. Recherchez la page App registrations .

  3. Cliquez sur New registration, ce qui vous amène à l’écran Register an application .

  4. Entrez un nom unique pour votre application Azure AD .

  5. Enregistrez le nom de l’application Azure AD dans le champ de la feuille de calcul de démarrage rapide intitulé « Nom d’enregistrement de l’application AD de la fonction Azure ».

  6. Sous Supported account types, choisissez Accounts in this organizational directory only (Default Directory only - Single tenant).

  7. Cliquez sur Register.

    Cela vous amène à l’écran Home > App registrations et vous montre la nouvelle application Azure AD.

  8. Enregistrez le Application (client) ID de l’application Azure AD que vous venez de créer dans le champ de la feuille de calcul de démarrage rapide intitulé « ID de l’application AD de la fonction Azure ». Cet ID devrait prendre la forme d’un UUID.

Étape 2 : Créer la fonction Azure et le service de gestion des API en utilisant le modèle

  1. Accédez au portail Azure.

  2. Dans la barre de recherche Azure, cherchez Template.

  3. Sous Services, cliquez sur Deploy a custom template.

  4. Sélectionnez Build your own template in the editor.

  5. Sélectionnez Load file.

  6. Naviguez jusqu’au répertoire qui contient votre copie du modèle, puis sélectionnez ce modèle.

  7. Cliquez sur Save.

    Cela vous amène à l’écran Custom deployment .

  8. Sélectionnez un Resource group existant (ou créez un nouveau).

    Astuce

    Si vous créez un nouveau groupe de ressources uniquement pour cette démonstration, vous voudrez peut-être en enregistrer le nom afin de pouvoir le supprimer plus tard lorsque vous aurez terminé.

  9. Sélectionnez le Region approprié.

  10. Entrez un API Management Service Name.

  11. Enregistrez le nom du service de Gestion des API dans le champ de la feuille de calcul de démarrage rapide en tant que « Nom du service Gestion des API ».

  12. Dans le champ Function App Name, entrez un nom unique.

  13. Enregistrez le nom de l’application de la fonction dans le champ de la feuille de calcul de démarrage rapide intitulé « Nom de l’application de la fonction Azure ».

  14. Dans le champ Publisher email, entrez votre adresse électronique. (Microsoft vous envoie un courriel pour vous informer de la création du service de gestion des API).

  15. Dans le champ Azuread Application Id , entrez l” ID de l’application AD Azure que vous avez créée précédemment. Il s’agit de la valeur du champ de la feuille de calcul de démarrage rapide intitulé « ID de l’application AD de la fonction Azure ».

  16. Cliquez sur Review + create.

  17. Cliquez sur Create.

La création de l’application de la fonction Azure et du service de gestion des API prend généralement environ une demi-heure.

Afin de créer l’intégration API et la fonction externe, vous avez besoin de l’URL du service de gestion des API que vous pouvez obtenir en suivant les étapes ci-dessous après qu’Azure a fini de créer le service Gestion des API.

À ce stade, le portail Azure devrait afficher le message Your deployment is complete et devrait afficher Deployment name.

  1. Cliquez sur « Sorties » dans la colonne de gauche.

  2. Copiez la valeur de api Management URL dans le champ de la feuille de calcul de démarrage rapide intitulé « URL de gestion des API ».

  3. Copiez la valeur de azure Function Http Trigger URL dans le champ de la feuille de calcul de démarrage rapide intitulé « URL de déclencheur HTTP de la fonction Azure ».

Étape 3 : Créer l’intégration API

Maintenant que vous avez créé le service à distance (fonction Azure) et le service proxy (service de gestion des API), vous devez créer l’intégration de l’API.

Lorsque vous créez l’intégration de l’API, utilisez la valeur du champ de la feuille de calcul de démarrage rapide intitulé « URL de gestion des API » en tant que valeur pour la clause api_allowed_prefixes .

En utilisant les informations ci-dessus, exécutez les étapes des liens ci-dessous :

Retournez ensuite à cette page.

Etape 4 : Créer la fonction externe

Lorsque vous créez la fonction externe, on vous demande l’URL d’appel. Vous pouvez utiliser la valeur dans le champ de la feuille de calcul de démarrage rapide intitulé « URL du déclencheur HTTP de la fonction Azure » en tant qu’URL d’appel.

En utilisant les informations ci-dessus, exécutez les étapes du lien ci-dessous :

Créer la fonction externe.

Retournez ensuite à cette page.

Étape 5 : Mettre à jour la politique de sécurité sur le service Gestion des API Azure (service proxy)

Le modèle Azure Resource Manager fourni par Snowflake crée une politique de sécurité pour valider un JWT (jeton Web JSON) qui autorise Snowflake à appeler votre fonction Azure.

Cependant, il manque un champ à la politique de sécurité, que vous devez remplir. Depuis le portail Azure, exécutez les étapes suivantes :

  1. Sélectionnez API Management Services.

  2. Trouvez l’instance du service de gestion des API que vous avez créée. Le nom de cette instance est enregistré dans le champ de la feuille de calcul de démarrage rapide intitulé « Nom du service de gestion des API ».

  3. Cliquez sur le nom de l’instance du service de gestion des API.

  4. Sélectionnez APIs -> APIs.

  5. Sous All APIs, sélectionnez ext-func-api.

  6. Sélectionnez POST echo.

  7. Cliquez sur le bouton validate-JWT, qui se trouve dans la case Inbound processing .

    Si vous ne pouvez pas voir ce bouton, veuillez faire défiler la page vers le bas.

  8. Cherchez « SNOWFLAKE_SERVICE_PRINCIPAL_ID », et remplacez-le par l’ID de l’application Snowflake.

    Si vous n’avez pas encore l’ID de l’application Snowflake, vous pouvez l’obtenir en suivant les étapes suivantes :

    1. Dans la feuille de calcul, trouvez le AZURE_MULTI_TENANT_APP_NAME que vous avez rempli précédemment.

    2. Dans la zone de recherche du portail Azure, cherchez Enterprise Applications.

      Cela vous amène à l’écran Enterprise applications | All applications .

    3. Dans cet écran, recherchez le AZURE_MULTI_TENANT_APP_NAME.

      La zone de recherche des applications d’entreprise n’a pas d’étiquette. Recherchez un champ large juste au-dessus de la liste des applications d’entreprise. La zone pourrait indiquer quelque chose de similaire à First 50 shown, to search all of your applications, enter a display name or the application ID.

      Si vous ne trouvez pas de correspondance exacte pour le AZURE_MULTI_TENANT_APP_NAME, effectuez une nouvelle recherche en utilisant uniquement les premiers caractères de ce nom (si le nom contient un trait de soulignement, n’incluez pas le trait de soulignement ni aucun caractère après le trait de soulignement).

    4. Trouvez la valeur Application ID pour AZURE_MULTI_TENANT_APP_NAME.

  9. Cliquez sur Save.

Étape 6 : Appeler la fonction

Testez la fonction en suivant ces instructions :

Appelez la fonction externe.

Dépannage

La demande a échoué pour la fonction externe <nom_fonction_externe> avec une erreur de service à distance : 500

Cause possible :

Vous avez peut-être choisi la mauvaise option pour votre application AD Azure. Plus précisément, vous avez peut-être choisi Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox) plutôt que la bonne option Accounts in this organizational directory only (Default Directory only - Single tenant).

La demande a échoué pour la fonction externe <nom_fonction> avec une erreur de service à distance : 401 … « JWT Non valide »

Vous pourriez voir le message :

La demande a échoué pour la fonction externe <nom_fonction> avec une erreur de service à distance : 401 “{ « statusCode »: 401, « message »: « Invalid JWT. » }”

Cause possible :

Si vous utilisez le modèle Azure Resource Manager, vous n’avez peut-être pas mis à jour le JWT que le modèle a créé pour vous. La section Étape 5 : Mettre à jour la politique de sécurité sur le service Gestion des API Azure (service proxy) contient des instructions.