2015-08-17 2 views
4

Я искал документацию AWS Lambda, но не смог найти ответ на свою проблему.AWS Lambda Payloads

Есть ли способ получить доступ ко всему корпусу запроса из функции лямбда (написанной в node.js)?

Параметр event, похоже, содержит только разобранные свойства JSON.

ответ

2

Ваш орган запроса должен находиться в XML или JSON, чтобы иметь доступ к нему в вашей функции Lambda. Вам необходимо указать, как он обрабатывается/отображается и проходит через раздел Integration Request панели API Gateway.

+0

Не могли бы вы настроить параметры запроса без использования API-шлюза? – user2976753

+0

Как бы вы выполнили функцию лямбда? – kixorz

+0

Планирование внутри AWS CloudWatch – user2976753

0

В качестве альтернативы вы можете рассмотреть возможность создания лямбда в качестве прокси-сервера, если он работает лучше для вашего прецедента. Недавно я нашел больше людей, использующих эту технику.

http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html

Запрос как следующее:

POST /testStage/hello/world?name=me HTTP/1.1 
Host: gy415nuibc.execute-api.us-east-1.amazonaws.com 
Content-Type: application/json 
headerName: headerValue 

{ 
    "a": 1 
} 

Будет заводиться отправка следующие данные о событии в вашей функции AWS Lambda:

{ 
    "message": "Hello me!", 
    "input": { 
    "resource": "/{proxy+}", 
    "path": "/hello/world", 
    "httpMethod": "POST", 
    "headers": { 
     "Accept": "*/*", 
     "Accept-Encoding": "gzip, deflate", 
     "cache-control": "no-cache", 
     "CloudFront-Forwarded-Proto": "https", 
     "CloudFront-Is-Desktop-Viewer": "true", 
     "CloudFront-Is-Mobile-Viewer": "false", 
     "CloudFront-Is-SmartTV-Viewer": "false", 
     "CloudFront-Is-Tablet-Viewer": "false", 
     "CloudFront-Viewer-Country": "US", 
     "Content-Type": "application/json", 
     "headerName": "headerValue", 
     "Host": "gy415nuibc.execute-api.us-east-1.amazonaws.com", 
     "Postman-Token": "9f583ef0-ed83-4a38-aef3-eb9ce3f7a57f", 
     "User-Agent": "PostmanRuntime/2.4.5", 
     "Via": "1.1 d98420743a69852491bbdea73f7680bd.cloudfront.net (CloudFront)", 
     "X-Amz-Cf-Id": "pn-PWIJc6thYnZm5P0NMgOUglL1DYtl0gdeJky8tqsg8iS_sgsKD1A==", 
     "X-Forwarded-For": "54.240.196.186, 54.182.214.83", 
     "X-Forwarded-Port": "443", 
     "X-Forwarded-Proto": "https" 
    }, 
    "queryStringParameters": { 
     "name": "me" 
    }, 
    "pathParameters": { 
     "proxy": "hello/world" 
    }, 
    "stageVariables": { 
     "stageVariableName": "stageVariableValue" 
    }, 
    "requestContext": { 
     "accountId": "12345678912", 
     "resourceId": "roq9wj", 
     "stage": "testStage", 
     "requestId": "deef4878-7910-11e6-8f14-25afc3e9ae33", 
     "identity": { 
     "cognitoIdentityPoolId": null, 
     "accountId": null, 
     "cognitoIdentityId": null, 
     "caller": null, 
     "apiKey": null, 
     "sourceIp": "192.168.196.186", 
     "cognitoAuthenticationType": null, 
     "cognitoAuthenticationProvider": null, 
     "userArn": null, 
     "userAgent": "PostmanRuntime/2.4.5", 
     "user": null 
     }, 
     "resourcePath": "/{proxy+}", 
     "httpMethod": "POST", 
     "apiId": "gy415nuibc" 
    }, 
    "body": "{\r\n\t\"a\": 1\r\n}", 
    "isBase64Encoded": false 
    } 
} 

Теперь у вас есть доступ ко всем заголовкам , url params, body и т. д. в каждом запросе.

1

Вы можете получить доступ к телу запроса в AWS Lambda, как только вы выставите его в шаблоне сопоставления тел.

  1. Откройте свой метод в API консоли шлюза
  2. Открыть Integration Request
  3. В Integration Request откройте Body Mapping Templates панели
  4. Добавить Content Type из application/json
  5. Нажмите на ваш свеж созданного application/json пункта
  6. Добавить следующий шаблон:
{ 
    "body" : $input.json('$') 
} 

После того, что вы можете получить доступ к телу запроса, как event.body в вашей Node.js лямбда функции.