AWS Lambda не вызывается при использовании типа вызова «Событие» - PullRequest
1 голос
/ 21 марта 2019

У меня есть 2 лямбды, test1, которые вызывают test2.Я хочу вызвать test2 асинхронно с менталитетом «огонь и забыть».

Ниже приведен код для обеих лямбд.Когда я устанавливаю InvocationType на RequestResponse, функция вызывается и в CloudWatch появляется журнал.Когда я изменяю InvocationType на Event, в CloudWatch нет записи о вызываемой функции.

test1:

const AWS = require('aws-sdk');
const lambda = new AWS.Lambda();

exports.handler = async (event) => {
    const params = {
        'FunctionName': 'test2',
        'InvocationType': 'Event',
        'Payload': JSON.stringify('Hello')
    };

    const response = await lambda.invoke(params).promise();
    return response;
};

test2:

exports.handler = async (event) => {
    console.log(event);
    return 'Success';
};

Политика IAM включает разрешения на вызов (в противном случае тип RequestResponse также не будет работать).Я также читал о ограничениях на размер аргументов, которые вы можете передать , но в этом случае я передаю только "Hello" ... что дает?

РЕДАКТИРОВАТЬ: Я должен также добавить, что в каждом случае я получаю код ответа 202, который указывает на успешный вызов, я просто не вижу доказательств выполнения функции в журналах.

РЕДАКТИРОВАТЬ 2: Я добавил await в конце test1, но все еще не вижу никаких признаков того, что test2 был вызван в CloudWatch.

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Хорошо, теперь я вижу логи в Cloudwatch, что функция была вызвана.Раньше, даже после добавления await, я не получал их, но теперь он почему-то работает.

Спасибо всем за вашу помощь.

0 голосов
/ 21 марта 2019

Я думаю, что просто отсутствует await:

exports.handler = async (event) => {
    const params = {
        'FunctionName': 'test2',
        'InvocationType': 'Event',
        'Payload': JSON.stringify('Hello')
    };

    await lambda.invoke(params).promise();
};

Без await обещание от lambda.invoke(params).promise() завершает лямбда-выполнение без разрешения этого обещания.

Поскольку лямбда вызывается асинхронно, результат не возвращается.

Вы можете проверить журнал CloudWatch лямбды test2, чтобы узнать, был ли он вызван.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...