如何在另一个 lambda 之后执行 AWS lambda

Posted

技术标签:

【中文标题】如何在另一个 lambda 之后执行 AWS lambda【英文标题】:How to execute AWS lambda after another lambda 【发布时间】:2020-08-07 22:19:52 【问题描述】:

我想用 AWS Lambda 函数实现的场景:

    调用 Lambda 并接收响应。 收到响应后,我需要执行另一个 Lambda 函数,该函数完成自己的工作。

我的痛点是如何在没有第二次调用的情况下触发第二个 Lambda。我正在尝试在 AWS Step Functions 中执行此操作,但是,我相信我无法从第一个函数返回某些内容,然后继续执行第二个函数,或者我可以吗?

【问题讨论】:

您当然可以将一个 Step 的输出传递到另一个 Step 的输入。见:Input and Output Processing in AWS Step Functions 【参考方案1】:

您可以使用aws lambda destinations 来实现此目的。

对于成功或失败等每个执行状态,您可以选择以下四个目标之一:另一个 Lambda 函数、SNS、SQS 或 EventBridge。 Lambda 还可以配置为将不同的执行结果路由到不同的目的地。

这个post 可能会给你一些见解。

【讨论】:

【参考方案2】:

这可以通过 AWS Step Function 本身轻松实现。您可以简单地为您的 Lambda 分别创建两个任务状态,如果您不想在任何 lambda 中传递任何输入,那也可以,因为它根本没有必要。

简而言之,您的简单步进函数将如下所示:

这将按顺序运行。

您可以像这样简单地定义您的状态:

"States": 
    "FirstLambda": 
      "Type": "Task",
      "Resource": "<first-lambda-arn>",
      "TimeoutSeconds": 9000,
      "Next": "SecondLambda"
    ,
    "SecondLambda": 
      "Type": "Task",
      "Resource": "<second-lambda-arn>",
      "TimeoutSeconds": 9000,
      "End": true
    
  

如果你不想,你不需要将任何东西作为有效负载传递给 lambda。如果需要,您可以在上面的第一个状态定义(第一个 Lambda 的定义)中使用 "ResultPath":"$.output" 将第一个 lambda 的输入传递给另一个 lambda 函数,并在下一个的有效负载中传递该 $.output

【讨论】:

【参考方案3】:

可能的解决方案:

    创建 SQS 队列 将返回对象作为消息放入队列中 将 SQS 队列设置为第二个 lambda 的触发器,并从事件对象中获取 SQS 队列消息

您可以在docs找到更多相关信息

【讨论】:

如果我正确理解了你的建议,它会将数据传递给第二个 lambda,我不需要那个,我不关心第一个 fn 的返回对象。我只需要第一个 lambda 返回给调用者,然后触发第二个 lambda 的执行。 将数据传递给第二个 lambda 是可选的,但通过使用这种方法,您实际上可以在完成第一个 lambda 时调用另一个 lambda。 但也许我误解了你,也许你想从客户端调用第二个 lambda?【参考方案4】:

我的一些 lambda 函数之间有类似的设置。

first 收到来自 first 的响应时,我只会让 调用服务second lambda 函数的指定端点发送一个 http 请求em> lambda 函数。

这当然需要第二个 lambda 函数设置一个端点来触发作业。

【讨论】:

以上是关于如何在另一个 lambda 之后执行 AWS lambda的主要内容,如果未能解决你的问题,请参考以下文章

是否可以让 AWS Lambda 函数保持温暖?

如果通过验证,AWS lambda 读取 zip 文件执行验证并解压缩到 s3 存储桶

如何将解组事件用于 go1.x 的 lambda 容器映像中 AWS 定义的类型,并提供为基础

AWS Lambda - 调用另一个 lambda 函数的方法

在推送到 Codecommit 时需要特定的提交消息 AWS Lambda

从 Lambda 函数内部访问 AWS CloudFormation ARN