Comment passer d'une chaîne de requête ou un paramètre de route pour AWS Lambda de Passerelle API Amazon
par exemple, si nous voulons utiliser
GET /user?name=bob
ou
GET /user/bob
Comment voulez-vous passer ces deux exemples, en tant que paramètre à la fonction Lambda?
J'ai vu quelque chose sur la définition d'une "mappés" dans la documentation, mais je ne trouve pas que ce paramètre dans la Passerelle API console.
method.request.path.parameter-name
pour un chemin de paramètre nomméparameter-name
tel que défini dans la Méthode de Demande de page.method.request.querystring.parameter-name
pour un paramètre de chaîne de requête nomméeparameter-name
tel que défini dans la Méthode de Demande de page.
Je ne vois pas l'une de ces options, même si j'ai défini une chaîne de requête.
Vous devez vous connecter pour publier un commentaire.
En septembre 2017, vous n'avez plus à configurer les mappages d'accéder à la demande du corps.
Tout ce que vous devez faire est de vérifier, "Utilisation Lambda Proxy intégration", en vertu de l'Intégration de la Demande, en vertu de la ressource.
Vous serez alors en mesure d'accéder à des paramètres de requête, chemin des paramètres et des en-têtes comme
RequestHandler
offre?/user/bob
mais comment voulez-vous cartebob
àname
?event
objet si une fonction lambda est écrite à l'aide de C#.NET Core?Les étapes pour obtenir ce travail sont:
À l'intérieur de la Passerelle API Console ...
Resources -> Integration Request
application/json
dans le champ content-type, même si elle montre une valeur par défaut (si vous ne le faites pas, il ne sera pas enregistré et ne sera pas vous donner un message d'erreur)mettre cela dans le mappage d'entrée
{ "name": "$input.params('name')" }
cliquez sur la case à cocher en regard des modèles de liste déroulante (je suppose que c'est ce qui la sauve)
J'ai utilisé ce modèle de mappage pour lui donner du Corps, en-Têtes, une Méthode, un Chemin d'URL et les Paramètres de Chaîne de Requête pour le Lambda de l'événement. J'ai écrit un billet de blog expliquant le modèle plus en détail: http://kennbrodhagen.net/2015/12/06/how-to-create-a-request-object-for-your-lambda-event-from-api-gateway/
Ici est le Modèle de Mappage, vous pouvez utiliser:
deploy
l'api une fois de plus. Une fois que j'ai déployé l'api avec la nouvelle cartographie, il a très bien fonctionné. Merci une tonne.Ces jours-ci une liste déroulante modèle est inclus dans la Passerelle API Console sur AWS.
Pour votre API, cliquez sur le nom de la ressource... puis OBTENIR
Développer "Body Mapping De Modèles"
Type dans
pour le Type de Contenu (doit être explicitement saisi au clavier) et cliquez sur la coche
Une nouvelle fenêtre va s'ouvrir avec les mots "Générer un modèle" et un menu déroulant (voir l'image).
Sélectionnez
Puis cliquez sur enregistrer
Pour accéder à toutes les variables, il suffit d'utiliser la syntaxe suivante (c'est Python)
par exemple, URL:
Vous pouvez obtenir des variables comme suit:
Donc il n'est pas nécessaire explicitement le nom ou la carte de chaque variable que vous désirez.
La accepté de répondre à fonctionné pour moi, mais en expansion sur gimenete réponse, je voulais un modèle générique je pourrais utiliser pour passer à travers toutes les requêtes/chemin/en-tête params (juste comme des chaînes de caractères pour l'instant), et j'ai trouvé le modèle suivant. Je poste ici au cas où quelqu'un le trouve utile:
Afin de passer des paramètres à une fonction lambda vous avez besoin pour créer un mappage entre la Passerelle API demande et votre fonction lambda. Le plan est fait dans le
Integration Request
->Mapping templates
section de la sélection de la Passerelle API de ressources.Créer un mappage de type
application/json
, puis sur la droite, vous allez modifier (cliquez sur le crayon) sur le modèle.Un modèle de mappage est en fait un modèle de Vitesse où vous pouvez utiliser fi, de boucles et de cours d'impression variables sur elle. Le modèle a ces variables injecté où vous pouvez accéder aux paramètres de chaîne de requête, demander à en-têtes, etc. individuellement. Avec le code suivant, vous pouvez re-créer l'ensemble de la chaîne de recherche:
Remarque: cliquez sur le symbole pour enregistrer le modèle. Vous pouvez tester vos modifications avec le bouton "test" dans votre ressource. Mais afin de tester les paramètres de chaîne de requête dans la console AWS, vous aurez besoin de définir les noms de paramètre dans la
Method Request
section de votre ressource.Remarque: vérifiez le Vitesse Guide De L'Utilisateur pour plus d'informations sur la Vitesse de création de modèles de langue.
Puis dans votre lambda modèle que vous pouvez faire pour obtenir la chaîne de requête analysée:
Actions>Deploy API
ensuite (j'ai perdu mon temps à l'oublier...). Les associés lambda arn faudra le changer immédiatement après le déploiement. Vous pouvez le vérifier enStages > #stage (like: prod) > Deployment History
.Dans le cadre d'essayer de répondre à une de mes questions ici, je suis tombé sur cette astuce.
Dans la Passerelle API de cartographie de modèle, utilisez la commande suivante pour vous donner la complète de chaîne de requête envoyé par le client HTTP:
L'avantage est que vous n'avez pas à vous limiter à un ensemble prédéfini de touches repérées dans votre chaîne de requête. Maintenant, vous pouvez accepter toutes les paires clé-valeur dans la chaîne de requête, si c'est la façon dont vous souhaitez gérer.
Remarque: Selon cette, seulement
$input.params(x)
est répertorié comme une variable disponible pour le VTL modèle. Il est possible que le fonctionnement interne peut changer etquerystring
peuvent ne plus être disponibles.Maintenant, vous devriez être en mesure d'utiliser le nouveau proxy intégration type Lambda afin d'obtenir automatiquement le montant total de la demande dans la forme standard, plutôt que de configurer les mappages.
voir: http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-set-up-lambda-proxy-integration-on-proxy-resource
Un grand nombre de réponses ici sont grands. Mais je voulais quelque chose d'un peu plus simple.
Je voulais quelque chose qui va travailler avec le "Hello World" de l'échantillon pour libre. Cela signifie que je voulais un simple produit un corps de requête qui correspond à la chaîne de requête:
Je pense que la réponse sommet, produit quelque chose de plus utile lors de la construction de quelque chose de réel, mais pour obtenir un rapide bonjour tout le monde exécute à l'aide d'un modèle à partir d'AWS cela fonctionne très bien.
Le paramètre suivant-exemple de mappage passe tous les paramètres, y compris le chemin, chaîne de requête et d'en-tête, grâce à l'intégration d'extrémité par l'intermédiaire d'une charge utile JSON
En effet, ce modèle de mappage des sorties tous les paramètres de la requête dans la charge utile, comme le décrit comme suit:
Copié à partir de la Amazon Passerelle API Developer Guide
OBTENIR /de l'utilisateur?nom=bob
OBTENIR /utilisateur/bob
La chaîne de requête est simple à analyser en javascript dans le lambda
pour OBTENIR /utilisateur?nom=bob
Cela ne résout pas le GET user/bob question de bien.
event.get('name')
a fonctionné pour moiLa fonction Lambda attend JSON entrée, par conséquent, l'analyse de la chaîne de requête est nécessaire. La solution est de changer la chaîne de requête JSON en utilisant le Modèle de Mappage.
Je l'ai utilisé pour C# .NET de Base, de sorte que la contribution qui est attendue devrait être un JSON avec "queryStringParameters" paramètre.
Suivre ces 4 étapes ci-dessous pour obtenir que:
application/json
contenu-tyap:Copier le modèle ci-dessous, qui analyse la chaîne de requête en JSON, et le coller dans le modèle de mappage:
Dans la Passerelle API, appelez votre fonction Lambda et ajouter la chaîne de requête suivante (pour l'exemple):
param1=111¶m2=222¶m3=333
Le modèle de mappage doit créer de la sortie JSON ci-dessous, qui est la entrée pour votre fonction Lambda.
Vous avez terminé. À partir de ce point, votre Lambda de la fonction logique peut utiliser les paramètres de chaîne de requête.
Bonne chance!
Vous pouvez utilisé Lambda comme "Lambda Proxy Intégration" ,ref ce [https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html#api-gateway-proxy-integration-lambda-function-python%5D , options avalible pour cette lambda sont
Pour Nodejs Lambda
'événement.les en-têtes', 'événement.pathParameters', 'événement.body', 'événement.stageVariables',
et l'événement.requestContext'
Pour Python Lambda
événement['headers']['parametername'] et ainsi de suite
Comme @la réponse de Jonathan, après que mark Utilisation Lambda Proxy intégration dans Intégration Demande, dans votre code source, vous devez mettre en œuvre en tant que ci-dessous le format de by-pass 502 Bad Gateway erreur.
NodeJS 8.10:
N'oubliez pas de déployer votre ressources à la Passerelle API avant de ré-exécution de votre API.
Réponse JSON juste de retour qui sont placés dans des corps est correct.
Donc, vous pourriez obtenir de chemin, paramètre, en-têtes, corps de la valeur de l'événement
Après la lecture de plusieurs de ces réponses, j'ai utilisé une combinaison de plusieurs en Août 2018, afin de récupérer la chaîne de requête params par lambda pour python 3.6.
Tout d'abord, je suis allé à la Passerelle API -> Mon API -> ressources (sur la gauche) -> Intégration de la Demande. Au bas, sélectionnez Modèles de Mapping ensuite pour le type de contenu entrez
application/json
.Ensuite, sélectionnez la Méthode de Demande de Relais et de modèle que Amazon propose et sélectionnez enregistrer et déployer votre API.
Puis, en lambda
event['params']
est la façon dont vous accédez à l'ensemble de vos paramètres. Pour la chaîne de requête:event['params']['querystring']