Полезные нагрузки AWS Lambda

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

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

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


person E. Lovelace    schedule 17.08.2015    source источник


Ответы (3)


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

person adamkonrad    schedule 17.08.2015
comment
Не могли бы вы настроить параметры запроса без использования API Gateway? - person user2976753; 28.12.2016
comment
Как бы вы выполнили лямбда-функцию? - person adamkonrad; 30.12.2016
comment
Планирование внутри AWS CloudWatch - person user2976753; 31.12.2016
comment
Вы не можете настраивать параметры в событии CloudWatch. - person adamkonrad; 02.01.2017

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

  1. Откройте свой метод в консоли API Gateway.
  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.

person David Salamon    schedule 03.02.2017

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

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

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

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, телу и т. Д. В каждом запросе.

person Dave Maple    schedule 02.01.2017