Comment puis-je transmettre des en-têtes personnalisés via API Gateway à une fonction Lambda avec intégration (sans proxy) personnalisée Lambda ?
Je souhaite configurer une fonction AWS Lambda via une intégration personnalisée (sans proxy) afin de traiter les en-têtes personnalisés transmis via mon API Amazon API Gateway.
Brève description
Par défaut, une fonction Lambda traite uniquement le corps de la requête de méthode qu'elle reçoit d'une demande d'API API Gateway. Pour transmettre des en-têtes personnalisés d'une API API Gateway à une fonction Lambda, utilisez un modèle de mappage de corps. L'API envoie d'abord la requête d'API mise à jour à une fonction Lambda pour traiter les en-têtes. Puis, la fonction Lambda renvoie une ou plusieurs valeurs d'en-tête issues de la requête d'API d'origine.
Résolution
Configurer les autorisations IAM requises
Suivez les instructions de la section Contrôler l'accès à une API REST avec des autorisations IAM.
Pour tester cette procédure, créez un rôle AWS Identity and Access Management (IAM), puis associez les stratégies gérées par AWS AmazonAPIGatewayInvokeFullAccess et AmazonAPIGatewayPushToCloudWatchLogs. Pour plus d'informations, consultez la section Stratégies gérées par AWS.
Créer une fonction Lambda pour gérer les en-têtes personnalisés de votre API API Gateway
Procédez comme suit :
- Ouvrez la console Lambda.
- Sélectionnez Créer une fonction. La page Créer une fonction s'ouvre avec l'option Créer à partir de zéro sélectionnée.
- Dans le volet Informations de base, effectuez les actions suivantes :
Dans Nom de la fonction, saisissez un nom qui décrit l'objectif de votre fonction. Exemple : CustomHeaders.
Dans Exécution, sélectionnez Node.js 20.x. - Sous Autorisations, développez le menu déroulant Modifier le rôle d'exécution par défaut.
- Sélectionnez Utiliser un rôle existant. Une liste déroulante des rôles existants s'affiche.
- Dans Rôle existant, choisissez le rôle d'exécution Lambda que vous avez créé précédemment.
- Sélectionnez Créer une fonction.
- Dans le volet Source du code, remplacez le code index.mjs dans le volet de l'éditeur par le code suivant :
Sélectionnez Déployer.export const handler = async (event, context, callback) => { callback(null, "The custom header " +event.headers["header1"] +" has been processed successfully by AWS Lambda via Amazon API Gateway"); };
Pour plus d'informations, consultez la section Création de fonctions Lambda avec Node.js.
Créer une API REST pour API Gateway
Procédez comme suit :
- Ouvrez la console API Gateway.
- Sélectionnez Créer une API.
-ou-
Si vous utilisez API Gateway pour la première fois, une page vous présentant les fonctionnalités d’API Gateway s'affiche. Dans API REST, sélectionnez Créer. - Dans la section Créer une API REST, sélectionnez Nouvelle API sous Détails de l'API.
- Dans Nom de l'API, saisissez un nom qui décrit l'objectif de votre API. Exemple : SendtoLambda.
(Facultatif) Dans Description, saisissez une brève description de l'objectif de votre API.
Dans Type de point de terminaison, sélectionnez Régional. - Sélectionnez Créer une API.
Configurer le modèle de mappage de corps et des points d'intégration de votre API
Procédez comme suit :
-
Ouvrez la console API Gateway.
-
Choisissez le nom de l'API que vous avez créée précédemment. La page Ressources de votre API s'ouvre.
-
Sur la page Ressources, sélectionnez Créer une ressource.
-
Dans le volet Créer une ressource, effectuez les actions suivantes :
Dans Nom de la ressource, saisissez un nom qui décrit la ressource. Exemple : HeadersResource.
Sélectionnez Créer une ressource. -
Choisissez la ressource que vous avez créée, puis sélectionnez Créer une méthode.
-
Dans le volet Créer une méthode, effectuez les actions suivantes :
Dans type de méthode, choisissez POST dans la liste déroulante.
Dans Type d'intégration, sélectionnez Fonction Lambda.
Vérifiez que l'intégration de proxy Lambda est désactivée.
Dans Fonction Lambda, choisissez la région AWS qui héberge votre fonction, puis saisissez le nom de la fonction Lambda ou Amazon Resource Name (ARN).
Sélectionnez Créer une méthode. Cette action accorde automatiquement à API Gateway l'autorisation d'invoquer votre fonction Lambda. -
Choisissez POST pour la méthode de ressource que vous avez créée à l'étape précédente. Puis, dans le volet Exécution de la méthode, sélectionnez Requête d'intégration.
-
Dans le volet Requête d’intégration, sélectionnez Modifier, puis effectuez les actions suivantes :
Dans Transmission du corps de la demande, sélectionnez Lorsqu'aucun modèle n'est défini (recommandé).
Développez Modèles de mappage en bas du volet.
Choisissez Ajouter un modèle de mappage.
Dans Type de contenu, saisissez application/json. -
Dans l'éditeur de corps du modèle, saisissez les informations suivantes :
{ "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 } }
-
Sélectionnez Enregistrer.
Déployer votre API vers une nouvelle étape
Procédez comme suit :
- Suivez les instructions pour déployer une API REST vers une étape. Pour plus d'informations, consultez la section Configurer une étape pour une API REST dans API Gateway.
- Cliquez sur le bouton Déployer l'API.
- Dans la fenêtre contextuelle Déployer l’API, saisissez un nouveau nom pour l’étape, puis sélectionnez Déployer.
- Développez l'étape dans le volet Étapes pour afficher la ressource et la méthode que vous avez créées lors des étapes précédentes.
- Sélectionnez POST comme méthode de ressource et copiez l’URL d’invocation dans votre presse-papiers.
Exemple d'URL d'invocation d'API REST
https://1a2bc3d456.execute-api.region.amazonaws.com/stageName/resourceName
Tester votre configuration
Pour vérifier que votre API et votre fonction Lambda traitent les en-têtes, exécutez la commande curl suivante :
curl -H "Content-Type: application/json" -H "header1: value1" -X POST -d "{\"API_body\": \"This is the body\"}" https://restApiId.execute-api.region.amazonaws.com/stageName/resourceName
Remarque : Remplacez par l'URL d’invocation de votre API.
Exemple de sortie
"The custom header value1 has been processed successfully by AWS Lambda via Amazon API Gateway"
Remarque : Pour installer curl sous Windows, consultez la section Téléchargements sur le site Web de Git. Pour plus d'informations sur curl, consultez le site Web du projet curl.
Informations connexes
Configurer les transformations de données dans API Gateway
Contenus pertinents
- demandé il y a 9 moislg...
- demandé il y a 3 moislg...
- demandé il y a un anlg...
- demandé il y a 2 anslg...
- AWS OFFICIELA mis à jour il y a 4 mois
- AWS OFFICIELA mis à jour il y a 3 mois
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 ans