Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Didacticiel : Utiliser Lambda avec Amazon API Gateway
Dans ce didacticiel, vous allez créer une API REST par le biais de laquelle vous pouvez invoquer une fonction d'événement Lambda à l'aide d'une requête HTTP. Votre fonction d'événement Lambda effectue des opérations de création, de lecture, de mise à jour et de suppression (CRUD) sur une table DynamoDB. Cette fonction est fournie ici à titre de démonstration, mais vous apprendrez à configurer une API REST API Gateway capable d'appeler n'importe quelle fonction d'événement Lambda.
L'utilisation d'API Gateway fournit aux utilisateurs un point de terminaison HTTP sécurisé pour appeler votre fonction d'événement Lambda et peut aider à gérer de gros volumes d'appels vers votre fonction en limitant le trafic et en validant et en autorisant automatiquement les appels d'API. API Gateway fournit également des contrôles de sécurité flexibles à l'aide de Gestion des identités et des accès AWS (IAM) et d'Amazon Cognito. Ceci est utile pour les cas d’utilisation où une autorisation préalable est requise pour les appels à votre application.
Astuce
Lambda propose deux méthodes pour invoquer votre fonction via un point de terminaison HTTP : API Gateway et URL de fonction Lambda. Si vous ne savez pas quelle est la meilleure méthode pour votre cas d’utilisation, consultez Sélectionnez une méthode pour appeler votre fonction d'événement Lambda à l'aide d'une requête HTTP.
Pour terminer ce didacticiel, vous devez suivre les étapes suivantes :
-
Créez et configurez une fonction d'événement Lambda en Python ou Node.js pour effectuer des opérations sur une table DynamoDB.
-
Créez une API REST dans API Gateway pour vous connecter à votre fonction d'événement Lambda.
-
Créez une table DynamoDB et testez-la avec votre fonction d'événement Lambda dans la console.
-
Déployer votre API et tester la configuration complète en utilisant curl dans un terminal.
En effectuant ces étapes, vous apprendrez à utiliser API Gateway pour créer un point de terminaison HTTP capable d'invoquer en toute sécurité une fonction d'événement Lambda à n'importe quelle échelle. Vous apprendrez également à déployer votre API, à la tester dans la console et en envoyant une requête HTTP à l'aide d'un terminal.
Création d’une stratégie d’autorisations
Avant de créer un rôle d'exécution pour votre fonction d'événement Lambda, vous devez d'abord créer une politique d'autorisation pour autoriser votre fonction à accéder aux ressources requises AWS . Pour ce didacticiel, la politique permet à Lambda d'effectuer des opérations CRUD sur une table DynamoDB et d'écrire sur Amazon Logs. CloudWatch
Pour créer la politique
-
Ouvrez la page stratégies
de la console IAM. -
Choisissez Créer une stratégie.
-
Choisissez l’onglet JSON, puis collez la stratégie personnalisée suivante dans l’éditeur JSON.
-
Choisissez Suivant : Balises.
-
Choisissez Suivant : Vérification.
-
Sous Examiner une stratégie, pour le Nom de la stratégie, saisissez
lambda-apigateway-policy. -
Choisissez Créer une stratégie.
Créer un rôle d’exécution
Un rôle d'exécution est un rôle Gestion des identités et des accès AWS (IAM) qui accorde à une fonction d'événement Lambda l'autorisation d' Services AWS accès et de ressources. Pour permettre à votre fonction d’effectuer des opérations sur une table DynamoDB, vous attachez la politique d’autorisation que vous avez créée à l’étape précédente.
Pour créer un rôle d’exécution et attacher votre politique d’autorisations personnalisée
-
Ouvrez la page Rôles
de la console IAM. -
Sélectionnez Créer un rôle.
-
Pour le type d’entité de confiance, choisissez Service AWS , puis pour le cas d’utilisation, choisissez Lambda.
-
Choisissez Suivant.
-
Dans la zone de recherche de stratégie, entrez
lambda-apigateway-policy. -
Dans les résultats de la recherche, sélectionnez la stratégie que vous avez créée (
lambda-apigateway-policy), puis choisissez Suivant. -
Sous Role details (Détails du rôle), pour Role name (Nom du rôle), saisissez
lambda-apigateway-role, puis sélectionnez Create role (Créer un rôle).
Création de la fonction d'événement Lambda
-
Ouvrez la page Event Functions
de la console Lambda et choisissez Create Event Function. -
Choisissez Créer à partir de zéro.
-
Sous Nom de la fonction, saisissez
LambdaFunctionOverHttps. -
Pour Runtime, choisissez le dernier runtime Node.js ou Python Runtime.
-
Sous Permissions (Autorisations), développez Change default execution role (Modifier le rôle d’exécution par défaut).
-
Sélectionnez Utiliser un rôle existant, sélectionnez le rôle
lambda-apigateway-roleque vous avez créé précédemment. -
Choisissez Create Event Function.
-
Dans le volet Source du code, remplacez le code par défaut par le code suivant Node.js ou le code Python.
Note
Dans cet exemple, le nom de la table DynamoDB est défini comme une variable dans le code de votre fonction. Dans une application réelle, passer ce paramètre comme une variable d’environnement et éviter de coder en dur le nom de la table constitue une bonne pratique. Pour plus d'informations, consultez la section Utilisation de variables d' AWS Lambda environnement.
-
Dans la section DÉPLOYER, choisissez Déployer pour mettre à jour le code de votre fonction :
Tester la fonction d'événement
Avant d’intégrer votre fonction à API Gateway, confirmez que vous avez déployé la fonction avec succès. Utilisez la console Lambda pour envoyer un événement de test à votre fonction.
-
Dans la page de votre fonction de la console Lambda, choisissez l’onglet Tester.
-
Défilez jusqu’à la section JSON d’événement et remplacez l’événement par défaut par ce qui suit. Cet événement correspond à la structure attendue par la fonction d'événement Lambda.
{ "operation": "echo", "payload": { "somekey1": "somevalue1", "somekey2": "somevalue2" } } -
Sélectionnez Tester).
-
Sous Exécution de la fonction : succès, développez Détails. Vous devriez voir la réponse suivante :
{ "somekey1": "somevalue1", "somekey2": "somevalue2" }
Créer une API REST avec API Gateway
Au cours de cette étape, vous créez l'API REST API Gateway que vous utilisez pour appeler votre fonction d'événement Lambda.
Pour créer l’API
-
Ouvrez la console API Gateway
. -
Sélectionnez Create API (Créer une API).
-
Dans la boîte de dialogue API REST, choisissez Créer.
-
Sous Détails de l’API, laissez Nouvelle API sélectionnée et pour Nom de l’API, saisissez
DynamoDBOperations. -
Sélectionnez Create API (Créer une API).
Créez une ressource sur votre API REST
Pour ajouter une méthode HTTP à votre API, vous devez d’abord créer une ressource pour que cette méthode puisse fonctionner. Ici, vous créez la ressource pour gérer votre table DynamoDB.
Pour créer la ressource
-
Dans la console API Gateway
, sur la page Ressources de votre API, choisissez Créer une ressource. -
Dans Détails de la ressource, pour Nom de la ressource saisissez
DynamoDBManager. -
Choisissez Create Resource.
Création d’une méthode HTTP POST
Dans cette étape, vous créez une méthode (POST) pour votre ressource DynamoDBManager. Vous liez cette POST méthode à votre fonction d'événement Lambda afin que, lorsque la méthode reçoit une requête HTTP, API Gateway invoque votre fonction d'événement Lambda.
Note
Dans le cadre de ce didacticiel, une méthode HTTP (POST) est utilisée pour appeler une seule fonction d'événement Lambda qui exécute toutes les opérations sur votre table DynamoDB. Dans une application réelle, la meilleure pratique consiste à utiliser une fonction d'événement Lambda et une méthode HTTP différentes pour chaque opération. Pour plus d’informations, consultez Le monolithe Lambda
Pour créer la méthode POST
-
Sur la page Ressources de votre API, assurez-vous que la ressource
/DynamoDBManagerest surlignée. Ensuite, dans le volet Méthodes, choisissez Créer une méthode. -
Pour Type de méthode, sélectionnez POST.
-
Pour Type d’intégration, laissez la Fonction Lambda sélectionnée.
-
Pour la Fonction Lambda, choisissez l’Amazon Resource Name (ARN) pour votre fonction (
LambdaFunctionOverHttps). -
Choisissez Créer une méthode.
Créez une table DynamoDB
Créez une table DynamoDB vide sur laquelle votre fonction d'événement Lambda effectue des opérations CRUD.
Créer le tableau DynamoDB
-
Ouvrez la page Tables (Tables)
de la console DynamoDB. -
Choisissez Créer un tableau.
-
Sous Détails du tableau, procédez comme suit :
-
Sous Nom du tableau, saisissez
lambda-apigateway. -
Pour Clé de partition, saisissez
id, et conservez le type de données défini comme Chaîne.
-
-
Sous Table settings (Paramètres de la table), conservez les Default settings (Paramètres par défaut).
-
Choisissez Créer un tableau.
Test de l’intégration d’API Gateway, Lambda et DynamoDB
Vous êtes maintenant prêt à tester l'intégration de votre méthode API API Gateway à votre fonction d'événement Lambda et à votre table DynamoDB. À l’aide de la console API Gateway, vous envoyez des demandes directement à votre méthode POST en utilisant la fonction de test de la console. Dans cette étape, vous utilisez d’abord une opération create pour ajouter un nouvel élément à votre table DynamoDB, puis vous utilisez une opération update pour modifier l’élément.
Test 1 : Pour créer un nouvel élément dans votre table DynamoDB
-
Dans la console API Gateway
, choisissez votre API ( DynamoDBOperations). -
Choisissez la méthode POST sous la ressource
DynamoDBManager. -
Choisissez l’onglet Test. Vous devrez peut-être choisir la flèche droite pour afficher l’onglet.
-
Sous Méthode de test, laissez les Chaînes de requête et les En-têtes vides. Pour Corps de requête, collez l’élément JSON suivant :
{ "operation": "create", "payload": { "Item": { "id": "1234ABCD", "number": 5 } } } -
Sélectionnez Tester).
Les résultats qui s’affichent à la fin du test doivent indiquer le statut
200. Ce code d’état indique que l’opérationcreatea réussi.Pour confirmer, vérifiez que votre table DynamoDB contient maintenant le nouvel élément.
-
Ouvrez la page Tables
de la console DynamoDB et choisissez la table lambda-apigateway. -
Choisissez Explore table items (Explorer les éléments de la table). Dans le volet Items returned (Éléments retournés), vous devriez voir un élément avec l’id
1234ABCDet le numéro5. Exemple :
Test 2 : Pour mettre à jour l’élément dans votre table DynamoDB
-
Dans la Console API Gateway
, revenez à l’onglet Test votre méthode POST. -
Sous Méthode de test, laissez les Chaînes de requête et les En-têtes vides. Pour Corps de requête, collez l’élément JSON suivant :
{ "operation": "update", "payload": { "Key": { "id": "1234ABCD" }, "UpdateExpression": "SET #num = :newNum", "ExpressionAttributeNames": { "#num": "number" }, "ExpressionAttributeValues": { ":newNum": 10 } } } -
Sélectionnez Tester).
Les résultats qui s’affichent à la fin du test devraient montrer l’état
200. Ce code d’état indique que l’opérationupdatea réussi.Pour confirmer, vérifiez que l’élément dans votre table DynamoDB a été modifié.
-
Ouvrez la page Tables
de la console DynamoDB et choisissez la table lambda-apigateway. -
Choisissez Explore table items (Explorer les éléments de la table). Dans le volet Items returned (Éléments retournés), vous devriez voir un élément avec l’id
1234ABCDet le numéro10.
Déploiement de l’API
Pour qu’un client puisse appeler l’API, vous devez créer un déploiement et une étape associée. Une étape représente un instantané de votre API, y compris ses méthodes et intégrations.
Pour déployer l’API
-
Ouvrez la page APIs (Les API) de la console API Gateway
et choisissez l’API DynamoDBOperations. -
Sur la page Ressources de votre API, choisissez Deploy API (Déployer l’API).
-
Pour Stage (Étape), choisissez *New stage* (Nouvelle étape), puis pour Stage name (Nom de l’étape), saisissez
test. -
Choisissez Déployer.
-
Dans le volet Stage details (Détails de l’étape), copiez Invoke URL (URL d’invocation). Vous l'utiliserez à l'étape suivante pour appeler votre fonction à l'aide d'une requête HTTP.
Utilisez curl pour appeler votre fonction d'événement à l'aide de requêtes HTTP
Vous pouvez désormais appeler votre fonction d'événement Lambda en envoyant une requête HTTP à votre API. Au cours de cette étape, vous créez un nouvel élément dans votre table DynamoDB, puis vous effectuez des opérations de lecture, de mise à jour et de suppression sur cet élément.
Pour créer un élément dans votre table DynamoDB à l’aide de curl
-
Ouvrez un terminal ou une invite de commande sur votre machine locale et exécutez la commande
curlsuivante en utilisant l’URL d’invocation que vous avez copiée à l’étape précédente. Cette commande utilise les options suivantes :-
-H: ajoute un en-tête personnalisé à la demande. Ici, le paramètre spécifie le type de contenu comme étant du JSON. -
-d: envoie des données dans le corps de la demande. Cette option utilise une méthode HTTP POST par défaut.
Si l’opération a réussi, vous devriez voir une réponse renvoyée avec un code d’état HTTP de 200.
-
-
Vous pouvez également utiliser la console DynamoDB pour vérifier que le nouvel élément figure dans votre table en procédant comme suit :
-
Ouvrez la page Tables
de la console DynamoDB et choisissez la table lambda-apigateway. -
Sélectionnez Explore table items (Explorer les éléments de la table). Dans le volet Items returned (Éléments retournés), vous devriez voir un élément avec l’id
5678EFGHet le numéro15.
-
Pour lire l’élément dans votre table DynamoDB à l’aide de curl
-
Dans votre terminal ou invite de commande, exécutez la commande
curlsuivante pour lire la valeur l’élément que vous venez de créer. Utilisez votre propre URL invoquée.Vous devriez obtenir un résultat semblable à l'un des suivants selon que vous avez choisi le code de fonction Node.js ou le code de fonction Python :
Pour mettre à jour l’élément dans votre table DynamoDB à l’aide de curl
-
Dans votre terminal ou invite de commande, exécutez la commande
curlsuivante pour mettre à jour l’élément que vous venez de créer en modifiant la valeurnumber. Utilisez votre propre URL invoquée. -
Pour confirmer que la valeur de
numberde l’élément a été mise à jour, exécutez une autre commande de lecture :
Pour supprimer l’élément dans votre table DynamoDB à l’aide de curl
-
Dans votre terminal ou invite de commande, exécutez la commande
curlsuivante pour supprimer l’élément que vous venez de créer. Utilisez votre propre URL invoquée. Confirmez que l’opération de suppression a réussi. Dans le volet Items returned (Éléments retournés) de la page Explore items (Explorer les éléments) de la console DynamoDB, vérifiez que l’élément avec l’id
5678EFGHn’est plus dans la table.
Nettoyer vos ressources (facultatif)
Vous pouvez maintenant supprimer les ressources que vous avez créées pour ce didacticiel, sauf si vous souhaitez les conserver. En supprimant AWS les ressources que vous n'utilisez plus, vous évitez des frais inutiles pour votre Compte AWS.
Pour supprimer la fonction d'événement Lambda
-
Ouvrez la page Event Functions
de la console Lambda. -
Sélectionnez la fonction d'événement que vous avez créée.
-
Sélectionnez Actions, Supprimer.
-
Saisissez
confirmdans la zone de saisie de texte et choisissez Delete (Supprimer).
Pour supprimer le rôle d’exécution
-
Ouvrez la page Roles (Rôles)
de la console IAM. -
Sélectionnez le rôle d’exécution que vous avez créé.
-
Sélectionnez Supprimer.
-
Saisissez le nom du rôle dans le champ de saisie de texte et choisissez Delete (Supprimer).
Pour supprimer l’API
-
Ouvrez la page API
de la console API Gateway. -
Sélectionnez l’API que vous avez créée.
-
Sélectionnez Actions, Supprimer.
-
Sélectionnez Supprimer.
Pour supprimer la table DynamoDB
-
Ouvrez la page Tables (Tables)
de la console DynamoDB. -
Sélectionnez la table que vous avez créée.
-
Choisissez Supprimer.
-
Saisissez
deletedans la zone de texte. -
Choisissez Supprimer la table.
Si vous rencontrez des erreurs lors de l'appel de votre fonction via API Gateway, consultezGestion des erreurs Lambda avec une API Gateway.