Python AWS Lambda函数完成触发另一个Lambda函数
我正在尝试将lambda函数串在一起。第一个lambda函数使用30分钟的计时器来抓取数据并将其放入S3存储桶中,下一个lambda函数检索并解析该数据并将其放入单独的S3存储桶中,最后一个函数对该数据执行分析,并通过pythons smtplib模块向用户(在本例中为我自己)发送一封结果电子邮件 我希望在第一个函数完成时触发第二个函数,在第二个函数完成时触发最后一个函数,而不是在计时器上运行最后两个lambda函数。同时,删除第一个S3存储桶中的两个文件夹和第二个S3存储桶中的内容,以节省内存和处理时间Python AWS Lambda函数完成触发另一个Lambda函数,python,amazon-web-services,amazon-s3,aws-lambda,Python,Amazon Web Services,Amazon S3,Aws Lambda,我正在尝试将lambda函数串在一起。第一个lambda函数使用30分钟的计时器来抓取数据并将其放入S3存储桶中,下一个lambda函数检索并解析该数据并将其放入单独的S3存储桶中,最后一个函数对该数据执行分析,并通过pythons smtplib模块向用户(在本例中为我自己)发送一封结果电子邮件 我希望在第一个函数完成时触发第二个函数,在第二个函数完成时触发最后一个函数,而不是在计时器上运行最后两个lambda函数。同时,删除第一个S3存储桶中的两个文件夹和第二个S3存储桶中的内容,以节省内存
有没有一种方法可以完全在AWS web界面中实现这一点,而不是重写我已有的python代码?这听起来像是您有一个可以通过以下方式实现的用例 您将添加一个调用了第一个Lambda的流,如果成功调用了第二个Lambda函数,则在两个Lambda之间传递输入/输出
您将更新计划的操作以执行step函数,而不是第一个Lambda。可以使用S3 Put事件作为Lambda的触发器 第二个和第三个lambda可以有S3PUT事件触发器
Timer Put Event Put Event
-------Lambda_1 -> S3 ------------> Lambda_2 --> S3 ------------> Lambda_3 ---> Email
另一个需要重写python代码的解决方案是:
import boto3
lambda_client = boto3.client('lambda')
payload = b'{"a": 1, "b": 2, "c": 3}'
response = lambda_client.invoke(
FunctionName="my-second-function",
InvocationType='Event',
Payload=payload
)
相比之下,我发现阶跃函数要复杂得多。另一种方法是
lambda destinations
这是一个提供Lambda函数调用可视性并将执行结果路由到AWS服务的功能,简化了事件驱动的应用程序并降低了代码复杂性。您可以从四个目的地中选择一个:另一个Lambda函数、SNS、SQS或EventBridge
您可以将lambda success绑定到另一个lambda(),并将结果绑定到另一个lambda。这里的所有答案都有效。总而言之,您可以:
- 当文件到达S3存储桶时触发lambda
- 使用阶跃函数依次协调3个lambda函数
- 使用Lambda destinations(成功时)编排工作流
- 对于S3选项,您可以指定哪些事件触发lambda(例如PutObject),甚至可以指定文件的前缀和后缀
- 对于Step函数,这是我最喜欢的选项。这是一个昂贵的选择(通常比lambda高5-10倍),但是,它实际上协调了所有事情,并且您从控制台获得的视图是惊人的。如果出现问题,很容易对其进行分类
- 对于Lambda目的地,还可以设置onFailure模式,以便在函数失败时收到警报。一旦成功,当然会导致下一个功能的问题
希望有帮助。hhm很有趣。我来看看,谢谢!对于S3,初始函数在执行过程中会将多个文件放入存储桶中,因此Put触发器是否会过早关闭?在这种情况下,一旦所有文件都上载到S3存储桶中,请在lambda中添加代码以创建一个类似“complete.txt”的文件并上载到S3存储桶中。使用后缀:*.txt放置此文件的S3 Put事件触发器S3 bucket中有两个文件夹,comments和articles,它们在执行期间被json数据填充。我假设这个complete.txt可以放在S3 bucket中,并调用将该文件放在lambda_handler.Yup末尾的代码。您可以在lambda_处理程序的末尾添加代码。它应该被称为Lambda中的最后一个操作。您可以将“complete.txt”文件放在S3存储桶中的任何位置。只需确保在所有文件上载到所有文件夹后添加它。JFYI。在添加触发器时,除了
后缀
之外,还有一个前缀
选项。在这里,您可以提到正在写入文件的文件夹。请注意,以防您计划在某个文件夹中编写complete.txt