Вызов AWS Lambda из Dynamodb Steam в Nodejs

#amazon-web-services #aws-lambda #amazon-dynamodb-streams

Вопрос:

Когда я пытаюсь запустить функцию lambda из консоли AWS, код работает нормально. Поскольку я хочу запустить определенный код только в том случае, если добавлена новая запись dynamo DB, я хочу запустить функцию lambda из события вставки потока dymanoDB. Я попробовал следующий код, похоже, лямбда не вызывается.

Разрешение в файле.yml без сервера

   - Effect: "Allow"
    Action:
      - "lambda:InvokeFunction"
    Resource: 
      - "*"
 

Код для потока DynamoDB

  

exports.main = async (event) => {
    const records = event.Records.filter((record) => {
        if (record.eventName.toUpperCase() === "INSERT") {
            const recordType = record.dynamodb.NewImage.type.S;

            if (recordType.toUpperCase() === "TRA") {
                 // here I capture the value for the arguments. They work fine
                 inkvokeTraLamda(keyword, key, tag);
            }  
        }
    });
};
 

Функция, в которой вызывается лямбда

 const AWS = require("aws-sdk");
const lambda = new AWS.Lambda({ region: "us-west-1" });
exports.inkvokeTraLamda = async function invoke(
    keyword,
    key,
    tag
) {
    const playload = {
        keyword,
        key,
        tag,
    };

    const LambdaPromise = (params) => lambda.invoke(params).promise();

    const resp = await LambdaPromise(params);
    console.log(resp);
    return resp;  
};


 

Я буду очень признателен вам за ваше руководство.

Ответ №1:

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

   events:
  - stream:
      type: dynamodb
      batchSize: 1
      # INFO: Batch Window size in seconds allows you to wait as long as 300s to build a batch before invoking a function.
      # Now, a function is invoked when one of the following conditions is met: the payload size reaches 6MB, the Batch Window reaches its maximum value, or the Batch Size reaches its maximum value.
      # With Batch Window, you can increase the average number of records passed to the function with each invocation.
      batchWindow: 5
      # This gives the option to recursively split the failed batch and retry on a smaller subset of records, eventually isolating the metadata causing the error.
      bisectBatchOnFunctionError: true
      maximumRetryAttempts: 3
      maximumRecordAgeInSeconds: 120

      arn:
        Fn::GetAtt:
          - <TableName>
          - <TableStreamArn>
 

Как только что-то будет вставлено, ваш второй фрагмент кода ответит. Третий фрагмент, по-видимому, не связан с потоками БД.