【问题标题】:AWS Lambda finishes trigger another lambdaAWS Lambda 完成触发另一个 lambda
【发布时间】:2018-06-18 23:48:46
【问题描述】:

当我完成 AWS lambda 时,我想触发另一个 lambda 运行。第一个 lambda 让我们调用 X,它充满了异步代码,我不想弄乱它。我想我可以使用 cloudwatch 来表示 X 完成时调用 lambda Y。但我不知道该怎么做。

谁能帮我弄清楚当另一个 lambda 完成时如何运行 1 个 lambda?非常感谢

编辑

有人建议我包装所有异步调用并使用 SDK,重新编写此代码以使用新的 sdk 是不可行的。我正在寻找的是一种监视 lambda 何时完成然后调用另一个 lambda 的方法。更多的是观察者模式而不是通知者模式。

【问题讨论】:

标签: node.js amazon-web-services lambda


【解决方案1】:

让您的第一个 Lamba 在 SNS 上发送消息。然后configure CloudWatch to monitor SNS,结果是运行你的第二个 Lambda。

【讨论】:

  • 这个问题是,我不知道第一个 lambda 什么时候结束。使用所有异步方法,它可以随时使用。
  • 您需要一个控制流来处理这些异步调用。请参阅 npm 包 async 以确保在调用最终回调(成功发送 SNS、错误停止或日志)之前完成所有异步调用。类似的控制流程可以用 Promises 来完成。
  • 听起来你继承了一堆糟糕的异步代码,看起来你应该修复它
【解决方案2】:

aws-sdk 允许您实例化一个新的 Lambda 对象,并且假设您知道要执行的第二个 lambda 的 ARN,您可以在异步代码完成后调用它。

对于您在第一个 lambda 中的给定代码,与此类似的东西应该可以工作...

const AWS = require('aws-sdk')
const lambda = new AWS.Lambda(/* Options object, look in docs */)

asynchronousOperations()
    .then(() => {
        lambda.invoke({
            FunctionName: SECOND_LAMBDA_ARN,
            InvocationType: TYPE,
            Payload: JSON.stringify(PAYLOAD_OBJ_IF_YOU_HAVE_ONE),
            // other options you may want
        })
    })

【讨论】:

    【解决方案3】:

    您可以通过包装回调函数来触发您的 lambda 来进行快速修复。

    let wrap = (originalFunction) => {
        return (event, context, callback) => {
            let overwriteCallback = (err, data) => {
                // do your stuff here
                // publish to sns to run your lambda
                // or directly run your lambda
                // then finally run callback
    
                callback(err, data)
            }
            originalFunction(event, context, overwriteCallback);
        }
    }
    
    module.exports = wrap((event, context, callback) => {
        //original mess we don't want to touch
    })
    

    如果它较旧,您可能还想覆盖 context.succeed();上下文.失败(); context.done()

    您可以在此处找到有关这些方法的文档: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-using-old-runtime.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 2019-11-09
      • 2017-03-14
      • 2019-01-11
      • 2020-11-06
      • 2019-04-03
      相关资源
      最近更新 更多