我正在尝试将lambda函数串在一起。第一个lambda函数在30分钟的计时器上抓取数据并将其放入S3存储桶中,下一个lambda函数检索并解析该数据并将其放入单独的S3存储桶中,最后一个函数对该数据进行分析并发送用户(在本例中为我本人)通过python smtplib模块发送结果电子邮件。
我不想让最后两个lambda函数在计时器上运行,而是希望在第一个函数完成时触发第二个函数,而在第二个函数完成时触发最后一个函数。以及删除第一个S3存储桶中的两个文件夹和第二个S3存储桶中的内容,以节省内存和处理时间。
是否有一种方法可以完全在AWS Web界面中执行此操作,而不是重写已有的python代码?
答案 0 :(得分:3)
这听起来像您有一个step functions可以满足的用例。
您将添加一个流,该流具有第一个Lambda调用,然后,如果调用成功,则第二个Lambda函数将在两者之间传递输入/输出。
您将更新计划的操作以执行步骤功能,而不是第一个Lambda。
答案 1 :(得分:2)
这可以通过使用S3 Put事件作为Lambda的触发器来完成。
第二个和第三个lambda可以具有S3放置事件触发器。
Timer Put Event Put Event
-------Lambda_1 -> S3 ------------> Lambda_2 --> S3 ------------> Lambda_3 ---> Email
检查以下链接以获取更多信息:
答案 2 :(得分:1)
另一种可能涉及重写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
)
相比之下,我发现步进函数要复杂得多。
答案 3 :(得分:0)
另一种方法是lambda destinations
。
此功能提供对Lambda函数调用的可见性,并将执行结果路由到AWS服务,从而简化了事件驱动的应用程序并降低了代码复杂性。您可以选择以下四个目标之一:另一个Lambda函数,SNS,SQS或EventBridge。
您可以将lambda成功绑定到另一个lambda(destination),并将结果绑定到另一个lambda。
答案 4 :(得分:0)
这里的所有答案都有效。总结一下,您可以:
所有这些都可以满足您的要求,这是一些额外的信息。
希望有帮助。