2017-09-07 2 views
3

Je joue avec AWS Lambda + API Gateway + Serverless (Python). C'est étonnant!Comment récupérer les paramètres GET et POST dans une fonction AWS Lambda

Je pensais que le paramètre d'événement dans la fonction contient beaucoup d'informations, y compris les informations de requête HTTP

De plus, je trouve que

queryStringParameters 
body 

sont les clés qui maintiennent le GET et Paramètres POST.

"queryStringParameters": { 
    "name": "me" 
}, 

et

"body": "------WebKitFormBoundaryXAin8CB3c0fwFfAe\r\nContent-Disposition: form-data; name=\"sex\"\r\n\r\nmale\r\n------WebKitFormBoundaryXAin8CB3c0fwFfAe--\r\n", 

Comment pourrais-je obtenir un hachage/dictionnaire de la clé du corps ?

Merci

+0

Je pense que cette question a été répondu ici avant: https://stackoverflow.com/questions/34386869/how-do-i-pass-arguments-to-aws-lambda-functions-using-get-requests –

+0

Merci, oui, c'est utile. Mais j'espérais qu'il y aurait un moyen plus facile dans serverless.yml –

Répondre

0

S'il vous plaît utiliser "input.params de $ ('clés')".

S'il vous plaît créer un modèle de cartographie corporelle en réponse d'intégration de la passerelle API et essayez "input.params $ ('de YourQueryStringKey')"

Exemple,

{ 
 
"name" : "$input.params('name')" 
 
}

Puis, dans Lambda fonction que vous pouvez obtenir la valeur comme ci-dessous,

var name= event.name;

+0

Merci! Bien que, je voudrais configurer/définir ceci dans le fichier de configuration serverless.yml. Une idée? –

+0

Je n'ai pas beaucoup d'idée. Mais .yml sera votre défenition REST, que vous pouvez télécharger. Je pense que pour un petit service, il sera rapide de créer directement dans la console. –

+0

Merci, même s'il y aura beaucoup d'API que j'écrirai. Je suppose, je suis en train de comprendre si cela vaut la surcharge de configuration –

0

si vous voulez la liberté complète/une transparence totale dans Lambda, alors vous voudrez peut-être examiner l'intégration Lambda proxy

import json 

def endpoint(event, context): 
# With the Lambda proxy integration, API Gateway maps the entire client request to the 
# input event parameter of the backend Lambda function as follows: 
# { 
#  "resource": "Resource path", 
#  "path": "Path parameter", 
#  "httpMethod": "Incoming request's method name" 
#  "headers": {Incoming request headers} 
#  "queryStringParameters": {query string parameters } 
#  "pathParameters": {path parameters} 
#  "stageVariables": {Applicable stage variables} 
#  "requestContext": {Request context, including authorizer-returned key-value pairs} 
#  "body": "A JSON string of the request payload." 
#  "isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encode" 
# } 
    body = {} 
    body["event"] = event 

    # With the Lambda proxy integration, API Gateway requires the backend Lambda function 
    # to return output according to the following JSON format: 
    # { 
    #  "isBase64Encoded": true|false, 
    #  "statusCode": httpStatusCode, 
    #  "headers": { "headerName": "headerValue", ... }, 
    #  "body": "..." 
    # } 
    response = { 
     "statusCode": 200, 
     "isBase64Encoded": False, 
     "headers": {"x-test-header" : "foobar"}, 
     "body": json.dumps(body), 
    } 
    return response 

et dans le modèle

"paths": { 
    "/{proxy+}": { 
     "x-amazon-apigateway-any-method": { 
     "parameters": [{ 
      "name": "proxy", 
      "in": "path", 
      "required": true, 
      "type": "string" 
     }], 
     "produces": ["application/json"], 
     "responses": {}, 
     "x-amazon-apigateway-integration": { 
      "responses": { 
      "default": { 
       "statusCode": "200" 
      } 
      }, 
      "uri": "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:xxxx:function:yyy/invocations", 
      "passthroughBehavior": "when_no_match", 
      "httpMethod": "POST", 
      "cacheNamespace": "57w2aw", 
      "cacheKeyParameters": [ 
      "method.request.path.proxy" 
      ], 
      "contentHandling": "CONVERT_TO_TEXT", 
      "type": "aws_proxy" 
     } 
     } 
    } 
}