Чтение параметров событий AWS лямбда - PullRequest
0 голосов
/ 30 августа 2018

У меня есть лямбда-функция (Node.js 4.3), как показано ниже:

exports.handler = function(event, context, callback) {
    console.log('Received event:', JSON.stringify(event, null, 2));
    var greeter = 'World';
    if (event.greeter && event.greeter!=="" && event.greeter1 && event.greeter1!=="") {
        console.log('Received 1');
        greeter =  event.greeter + event.greeter1 ;
    } else if (event.body && event.body !== "") {
         console.log('Received Body');
        var body = JSON.parse(event.body);
        if (body.greeter && body.greeter !== "") {
            greeter = body.greeter;
        }
    } else if (event.queryStringParameters && event.queryStringParameters.greeter && event.queryStringParameters.greeter !== "") {
        greeter = event.queryStringParameters.greeter;
    } else if (event.headers && event.headers.greeter && event.headers.greeter != "") {
        greeter = event.headers.greeter;
    }
    res.body = "Hello, " + greeter + "!";
    callback(null, res);
};

Работает нормально, когда я тестирую функцию с помощью тестовой консоли, и выдает правильный вывод, как показано ниже:

Response:
{
  "statusCode": 200,
  "headers": {
    "Content-Type": "*/*"
  },
  "body": "Hello, maximJane!"
}

Однако, когда я пытаюсь протестировать его, используя мой API-шлюз (интеграция AWS Lambda Proxy в API-шлюз), он просто рассматривает один аргумент в основном как «приветствующий». «greeter1» вообще не рассматривается.

Я перепробовал все варианты, но почему-то он читает только 1 аргумент.

1 Ответ

0 голосов
/ 31 августа 2018

AWS Lambda автоматически отслеживает функции Lambda от вашего имени и сообщает о показателях через Amazon CloudWatch. Вы можете проверить это (перейдите на вкладку мониторинга лямбда-функции, затем нажмите «Просмотр в CloudWatch»). Вы увидите, что событие имеет только параметр «greeter» (console.log('Received event:', JSON.stringify(event, null, 2)); также печатает для регистрации).

Это произошло из-за того, что вы не сопоставили каждый из параметров в своем API шлюза. Вы можете сделать это в «Запрос на интеграцию» / «Шаблон отображения» свойств вашего метода.

enter image description here

Узнайте, как отобразить его в Справочная информация о шаблоне сопоставления шлюза API , в разделе «Доступ к переменной $ input».

enter image description here

Ваш шаблон должен выглядеть примерно так:

{
    "greeter": "$input.params('greeter')",
    "greeter1": "$input.params('greeter1')",
    "Data": $input.json('$')
}
  • $ input.params - отображать данные из параметра
  • $ input.json ('$') - отобразить данные из тела запроса (если это post или put)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...