如何在另一个 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 读取 zip 文件执行验证并解压缩到 s3 存储桶
如何将解组事件用于 go1.x 的 lambda 容器映像中 AWS 定义的类型,并提供为基础
AWS Lambda - 调用另一个 lambda 函数的方法