当前位置: 首页 > 知识库问答 >
问题:

从Nodejs中的Dynamodb Steam调用AWS Lambda

丁学
2023-03-14

当我尝试从AWS控制台运行lambda函数时,代码工作正常。由于我想仅在添加了新的Dynamo DB记录时运行特定代码,因此我想从dymanoDB流插入事件中运行lambda函数。我尝试了以下代码,似乎lambda没有调用。

serverless.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个答案

陶高峻
2023-03-14

而不是告诉一个lambda函数调用另一个。配置相关的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>

一旦插入了什么,您的第二个代码段就会响应。第三个片段似乎与DB流无关。

 类似资料:
  • 问题内容: 我的API有ExpressJS路由,我想从NodeJS内调用它 在我的 ./routes/api.js 文件中 因此,如果我想从前端调用其所有查找内容,但是我需要从NodeJS脚本的另一个方面进行调用,而不必在第二个位置再次重新定义整个函数 我曾尝试从内部使用HTTP模块,但出现“ ECONNREFUSED”错误 我了解Express背后的想法是创建路线,但是如何在内部调用它们 问题答

  • 问题内容: 我有一个通常从命令行启动的Java程序。从命令行启动后,Java程序将一直运行直到被按下Ctrl + C退出或杀死另一个脚本中的命令为止。Java程序向控制台输出错误消息(如果有)。 现在,我想开发基于Express的NodeJs Web应用程序。当用户单击链接(运行)时,单击处理程序将调用Ajax请求,这将导致后端NodeJs脚本运行该Java程序(如果尚未运行)。另一个链接(停止)

  • 问题内容: 我正在寻找逐步调试NodeJS服务器代码的有效方法。目前,我使用了数十个console.log(),这非常困难。完美的工具是允许我检查堆栈中每个变量的值并逐行跟踪程序的工具。首选OS = MacOS / Linux。可能吗? 问题答案: 这个怎么样? 您可以尝试测试Nodeclipse 0.2.0 beta版。 http://www.tomotaro1065.com/nodeclips

  • 我在nodejs中运行一个python脚本。但是我想保持开放,然后从nodejs调用def函数几次。我怎么能做到这一点。 ################################################################################### 测验派克

  • 我正在我的页面welcomeuser中从此路由获取数据 现在我想使用这个锚标记从来到WelcomeUser.ejs页面的value1中获取userid。我该怎么做呢?这是上面WelcomePage.ejs中的一行,我正在其中获取整个数据。

  • 本文向大家介绍NodeJs的回调有什么用吗?相关面试题,主要包含被问及NodeJs的回调有什么用吗?时的应答技巧和注意事项,需要的朋友参考一下 由于Node的IO操作是异步的,不知道什么时候执行完毕,用户为了拿到异步操作的结果,采取回调函数的方式拿到操作的结果。因此回调中采取错误优先原则,防止异步操作中有错误,而拿不到错误结果。