Comment créer une fonction AWS Lambda pour traiter des en-têtes personnalisés de messages transmis via une API créée dans Amazon API Gateway ?

Par défaut, une fonction Lambda reçoit uniquement le corps de requête reçu par une API créée dans API Gateway.

Pour transmettre des en-têtes personnalisés depuis une API Amazon API Gateway vers une fonction Lambda, servez-vous de l'utilitaire curl pour envoyer un message à API Gateway via un modèle de mappage de corps de manière à extraire les en-têtes personnalisés ajoutés au message.

L'API envoie le message mis à jour à une fonction Lambda afin qu'elle traite les en-têtes, et renvoie une ou plusieurs valeurs d'en-tête du message d'origine.

Créer la fonction Lambda

Avant de commencer, assurez-vous d'avoir configuré les autorisations nécessaires pour Lambda et Amazon API Gateway comme décrit dans Authentification et contrôle d'accès pour AWS Lambda et Définition d'autorisations IAM pour l'accès à API Gateway. Créez un rôle test et attachez les stratégies gérées AmazonAPIGatewayInvokeFullAccess et AmazonAPIGatewayPushToCloudWatchLogs.

1.    Ouvrez la console Lambda, puis choisissez Create function (Créer une fonction).

2.    Choisissez Créer à partir de zéro. Pour Name (Nom), entrez un nom significatif. Dans le champ Exécution, choisissez Node.js 6.10. Pour Role (Rôle), sélectionnez le nom du rôle test que vous avez créé précédemment.

3.    Sélectionnez Create function.

4.    Pour Function code (Code de fonction), remplacez le code dans index.js par les informations suivantes :

exports.handler = (event, context, callback) => {
// TODO implement
callback(null, "This message header was processed by Amazon " +event.headers["header1"]);
};

5.    Choisissez Save.

Créer l'API API Gateway

1.    Dans la console API Gateway, choisissez Create API (Créer l'API).

2.    Sélectionnez New API (Nouvelle API). Pour API name (Nom de l'API), entrez SendtoLambda, puis choisissez Create API (Créer l'API).

3.    Sélectionnez Resources (Ressources) dans le volet de navigation, ouvrez le menu Actions , puis choisissez Create Resource (Créer la ressource).

4.    Pour Resource Name (Nom de la ressource), entrez HeadersResource, puis choisissez Create Resource (Créer la ressource).

5.    Ouvrez Actions, puis choisissez Create Method (Créer la méthode).

6.    Dans le menu déroulant sous /headersresource, choisissez POST, puis cliquez sur la case à cocher.

7.    Configurez votre point d'intégration :
Pour Integration type (Type d'intégration), choisissez Lambda Function (Fonction Lambda).
Pour Lambda Region (Région Lambda), choisissez votre région.
Pour Lambda Function (Fonction Lambda), entrez CustomHeaders.

8.    Choisissez Save.

9.    Sélectionnez Integration Request (Demande d'intégration).

10.   Développez Body Mapping Templates (Modèles de mappage de corps), et pour Request body passthrough (Transmission du corps de la demande), choisissez When there are no templates defined (recommended) (Lorsqu'aucun modèle n'est défini (recommandé)).

11.   Choisissez Add mapping template (Ajouter un modèle de mappage).

12.   Pour Content-Type, entrez application/json, puis cliquez sur la case à cocher.

13.   Ajoutez les informations suivantes dans la section d'entrée :

{
    "method": "$context.httpMethod",
    "body" : $input.json('$'),
    "headers": {
        #foreach($param in $input.params().header.keySet())
        "$param": "$util.escapeJavaScript($input.params().header.get($param))"
        #if($foreach.hasNext),#end
        #end
    }
}

14.   Sélectionnez Sauvegardez.

15.   Dans le menu Actions, choisissez Deploy API (Déployer l'API).

16.   Pour l'étape de déploiement, choisissez [New Stage] ([Nouvelle étape]), puis entrez un Stage name (Nom d'étape) (par exemple, « prod », « test » ou « beta »).

17.   Choisissez Déploiement. Notez l'URL qui s'affiche à côté de Invoke URL (Appeler l'URL) en haut de Stage Editor (Éditeur d'étape).

18.   Utilisez l'utilitaire curl pour envoyer un message à API Gateway. Cet exemple renvoie la valeur de l'en-tête header1 référencé par la fonction Lambda.

curl -H "Content-Type: application/json" -H "header1: API Gateway and AWS Lambda" -X POST -d "{\"API_body\": \"This is the body\"}" https://<api-id>.execute-api.<region>.amazonaws.com/<stage>/headersresource

Si ce processus aboutit, vous verrez la sortie suivante :

"This message header was processed by Amazon API Gateway and AWS Lambda"

Remarque : Pour installer curl sous Windows, envisagez de télécharger Git for Windows, qui inclut le shell bash GNU et d'autres outils Linux tels que curl, tail, cat, grep, gzip et Perl.


Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support

Date de publication : 10/06/2016

Date de mise à jour : 31/07/2018