Exposer une Function App avec Azure API Management

Kevin Bacas
Publié par Kevin
Catégorie : API Management / Azure / Function app
25/07/2019

De la même manière que d’autres ressources sont exposables sous forme d’ API, vous pouvez exposer les fonctions Azure que vous développez depuis Azure API Management (APIM). L’avantage de passer par cette méthode est que vous pouvez soumettre vos fonctions aux mêmes règles que vos API. En effet, vous pouvez appliquer exactement les mêmes règles d’authentification, de cache ou encore de limite d’appel par seconde que vos APIs.
Tout cela peut se faire sans une seule ligne de code, c’est ce que nous allons voir dans cet article.

 

Un exemple simple: Azure Function

Commençons par créer une fonction simple que nous exposerons à travers API Management plus tard.
Cette fonction prend en paramètre un nom et renvoie la chaîne « Hello <nom> » si celui-ci est bien présent.

module.exports = async function(context, req) {
  context.log("JavaScript HTTP trigger function processed a request.");
  if (req.query.name || (req.body && req.body.name)) {
    context.res = { body: "Hello " + (req.query.name || req.body.name) };
  } else {
    context.res = {
      status: 400,
      body: "Please pass a name on the query string or in the request body"
    };
  }
};

 

Pour qu’une fonction Azure soit exposée depuis APIM, elle doit utiliser un trigger HTTP (invocable par une requête HTTP). Malheureusement, vos autres fonctions ne sont pas candidates à une exposition via APIM.

Une fois votre fonction Azure disponible, vous pouvez l’exposer depuis le Portail Publisher d’APIM en ajoutant un nouveau endpoint. Pour cela, il faut se rendre sur le portail de l’API Management et cliquer sur API, vous arriverez sur cette page :

Selection function app apim

 

En cliquant sur « Function App », vous allez trouver une pop-up qui vous guidera pour l’ajout de votre Function App :

 

En cliquant sur Browse, vous trouverez la liste de vos function apps et les fonctions qu’elles contiennent :

 

Une fois que vous aurez validé, la pop-up sera remplie avec des valeurs en fonction du nom de votre Function App, vous pouvez les changer si besoin :

 

Le premier avantage d’importer une function app dans l’API Management, c’est que la clé d’accès à la fonction n’a pas besoin d’être renseignée lorsque vous appelez l’APIM. En effet, lors de l’import d’une fonction, APIM génère un paramètre (settings). Celui-ci est retranscrit par la Gateway APIM avant l’appel de la fonction à travers la policy « set-backend-service » :

En cas de changement de token sur vos fonctions, vous devez bien évidemment mettre à jour ce paramètre généré automatiquement par APIM.

Nous pouvons maintenant appeler notre fonction à travers l’API Management :

 

Ajout de policies API Management

 

Comme mentionné dans l’introduction, il est possible d’ajouter des policy à cette Fonction Azure.
Dans cet exemple, nous allons ajouter une policy qui refuse l’appel de la fonction d’API si le header HTTP « BLOG_MW » n’est pas présent avec la valeur « FROM_BLOG » :

<check-header name="BLOG_MW" failed-check-httpcode="403" failed-check-error-message="BLOG_MW header is not filled with the correct value" ignore-case="true">
  <value>FROM_BLOG</value>
</check-header>

Dans cette exemple, Azure APIM bloque l’appel sur la partie front-end, cela signifie qu’APIM ne sollicite même pas la Function App.
L’appel sans le header nous donne donc cette erreur :

 

Ajoutons le header dans l’appel à l’API Management :

 

Avec ce header, nous avons bien maintenant une réponse de la Function App :

 

Ajout de nouvelles fonctions

 

Si vous voulez en ajouter d’autres fonctions au sein de la même Function App, vous pouvez le faire directement depuis l’onglet « Platform features » de la Function App.
Vous pouvez cliquer sur le lien « API Management » dans la section « API » :

 

Vous pourrez alors demander l’import des fonctions dans APIM:

 

Cette méthode est plus simple et plus rapide mais ne peut pas marcher pour le premier ajout. Vous pouvez donc utiliser cette fonctionnalité uniquement quand la Function App est déjà présente dans l’API Management.

 

Conclusion

Nous avons donc vu comment publier des Azure Function dans un service Azure API Management uniquement grâce au portail Azure. Les function de vos Function app peuvent utiliser les fonctions exposés par votre. Cela permet de soumettre vos Function App à votre gouvernance d’API et de proposer à vos partenaires de les utiliser sur besoin.