Comment transmettre des données via une API REST API Passerelle vers une fonction Lambda backend ou un point de terminaison HTTP ?

Lecture de 6 minute(s)
0

Je souhaite que mon API REST Amazon API Gateway transmette les données à une fonction AWS Lambda principale et à un point de terminaison HTTP. Quelle est la marche à suivre ?

Brève description

Pour configurer une API REST afin de transmettre des données à une fonction Lambda principale, utilisez une intégration personnalisée Lambda.

Pour transmettre des paramètres de chaîne de requête à un point de terminaison HTTP, utilisez une intégration personnalisée HTTP.

**Important :**Assurez-vous que les données d'entrée sont fournies comme charge utile de la demande d'intégration. Il est recommandé d'utiliser un modèle de cartographie pour fournir la charge utile. Pour plus d'informations, voir Mapper les charges utiles de demande et de réponse entre la méthode et l'intégration.

Solution

Créer une fonction Lambda pour gérer les en-têtes personnalisés de votre API d'API Passerelle

1.    Ouvrez la console Lambda.

2.    Choisissez Create function (Créer une fonction). La page Create function (Créer une fonction) s'ouvre avec l'option Author from scratch (Créer à partir de zéro) sélectionnée.

3.    Dans le volet Informations de base, procédez comme suit : Pour Nom de la fonction, entrez un nom qui décrit l'objectif de votre fonction. Par exemple : MapTemplate. Dans le champ Runtime (Exécution), choisissez Python 3.9.

4.    Pour Permissions (Autorisations), développez Change default execution role (Modifier le rôle d'exécution par défaut).

5.    Choisissez Use an existing role (Utiliser un rôle existant). Une liste déroulante des rôles existants s'affiche.

6.    Pour Existing role (Rôle existant), choisissez le rôle d'exécution Lambda que vous avez créé précédemment.

7.    Choisissez Create function (Créer une fonction).

8.    Dans l'onglet Code, dans Source du code, remplacez le code du fichier lambda_function.py par le suivant :

import json

def lambda_handler(event, context):
    print(event)
    return {
        'statusCode': 200,
        'body': json.dumps(event) # returning the data sent to backend lambda function as API response.
    }

9.    Choisissez Deploy (Déployer).

Pour plus d'informations, consultez Création de fonctions Lambda avec Python.

Transmettre les données à la fonction Lambda du backend ou au point de terminaison HTTP

1.    Ouvrez la console API Gateway.

2.    Sélectionnez Create API (Créer une API).

-ou-

Si vous utilisez API Passerelle pour la première fois, une page vous présentant les fonctionnalités de l'outil s'affiche. Dans API REST, choisissez Build (Créer). Lorsque la fenêtre contextuelle Create Example API (Créer l'exemple d'API) apparaît, choisissez OK.

3.    Pour Choose an API type (Choisir un type d'API), dans le panneau API REST, choisissez Build.

4.    Sous Create new API (Créer une nouvelle API), choisissez New API (Nouvelle API).

5.    Dans Paramètres, procédez comme suit : Pour Nom de l'API, entrez un nom qui décrit l'objectif de votre API. Par exemple : MappingTemplateTutorial. (Facultatif) Pour Description, écrivez une brève description de l'objectif de votre API. Par exemple, Envoyer des données à la fonction Lambda du backend ou au point de terminaison HTTP. Pour Endpoint Type (Type de point de terminaison), choisissez Regional.

6.    Sélectionnez Create API (Créer une API).

Configurez les ressources, le point d'intégration et le modèle de body mapping de votre API

1.    Dans la console API Gateway, choisissez le nom de l'API que vous avez créée à l'étape précédente. La page Ressources de votre API s'ouvre.

2.    Sur la page Ressources, choisissez Actions. Choisissez ensuite Create Resource (Créer une ressource).

3.    Dans le volet Nouvelle ressource enfant, pour Configurer en tant que ressource proxy, sélectionnez l'icône en forme de coche, puis choisissez Créer une ressource.

4.    Sur la page**/{proxy+} - ANY - Setup**, procédez comme suit :

  • Pour Integration type (Type d'intégration), choisissez Lambda Function (Fonction Lambda).
  • Pour Lambda Region, choisissez la Région AWS qui héberge votre fonction.
  • Pour Lambda Function, entrez le nom de la fonction MappingTemplateTutorial.

Choisissez Save (Enregistrer). Une fenêtre contextuelle Add Permission to Lambda Function (Ajouter une autorisation à la fonction lambda) apparaît, choisissez OK.

7.    Sur la page**/{proxy+} - ANY - Method Execution**, choisissez Integration Request.

8.    Sur la page**/{proxy+} - ANY** - Integration Request, procédez comme suit :

  • Décochez la case Utiliser l'icône d'intégration du proxy Lambda. Une fenêtre contextuelle Basculer vers l'intégration Lambda s'affiche.
  • Dans la fenêtre contextuelle, cliquez sur OK. Une fenêtre contextuelle Add Permission to Lambda Function (Ajouter une autorisation à la fonction Lambda)apparaît. Dans la fenêtre contextuelle, cliquez sur OK
  • Développez Mapping Templates (Modèle de mappage).
  • Pour Request body passthrough, choisissez When there are no templates defined (recommended).

Choisissez Add mapping template (Ajouter un modèle de mappage). Pour Content-Type, saisissez application/json. Ensuite, choisissez l'icône de coche.

9.    Choisissez la liste déroulante Generate template, puis Method Request passthrough.

10.    Dans l'éditeur de modèle de mappage, entrez ce qui suit :

##  See http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html
#set($allParams = $input.params())
{
"method" : "$context.httpMethod", ## API method
"authcontext" : "$context.authorizer.stringkey", ## Optional output from Lambda Authorizers
## passthrough body
"body-json" : $input.json('$'),
## passthrough headers, querystrings and path parameters
"params" : {
#foreach($type in $allParams.keySet())
    #set($params = $allParams.get($type))
"$type" : {
    #foreach($paramName in $params.keySet())
    "$paramName" : "$util.escapeJavaScript($params.get($paramName))"
        #if($foreach.hasNext),#end
    #end
}
    #if($foreach.hasNext),#end
#end
}
}

11.    Choisissez Save (Enregistrer).

12.    Choisissez Method Execution pour revenir à la page**/{proxy+} - ANY - Method Execution**.

13.    Choisissez Method Response pour configurer une réponse de méthode valide.

14.    Sur la page**/{proxy+} - ANY - Method Response**, choisissez Add Response.

15.    Pour le code d'état HTTP, entrez 200. Ensuite, choisissez l'icône de coche.

16.    Choisissez Actions pour déployer l'API à une étape.

Déployer votre API vers une nouvelle étape

1.    Suivez les instructions de la section Déployer une API REST vers une étape. Pour plus d'informations, consultez la section Configuration d'une étape à l'aide de la console API Gateway.

2.    Dans le panneau Stage Editor (Éditeur d'étape), copiez l'URL d'appel dans le presse-papiers.

Exemple d'URL d'appel de l'API REST

https://1a2bc3d456.execute-api.us-east-1.amazonaws.com/stage

Tester votre configuration

Pour confirmer que toutes les données sont transmises à la fonction Lambda du backend ou au point de terminaison HTTP par votre API, exécutez la commande curl suivante :

Important : remplacez https://restApiId.execute-api.region.amazonaws.com/stageName par l'URL d'appel de votre API.

curl -i --location --request POST 'https://1a2bc3d456.execute-api.us-east-1.amazonaws.com/stage/path1/path2?query1=querystring1&query2=querystring2' --header 'header1: value1' --header 'header2: value2' --header 'Content-Type: application/json' --data-raw '{"keybody":"valuebody"}'

La sortie de commande inclut toutes les données reçues par la fonction Lambda principale vers le client. Vous pouvez mettre à jour le message de sortie de votre environnement.

Remarque : pour installer curl sous Windows, consultez la section Téléchargements sur le site Web Git. Pour plus d'informations sur curl, consultez le site Web du projet curl.


informations connexes

Didacticiel : Créer une passerelle API REST API Passerelle avec l'intégration non-proxy Lambda

Configuration de transformations de données pour les API REST

Comment transmettre des en-têtes personnalisés via API Passerelle à une fonction Lambda en utilisant une intégration Lambda personnalisée ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans