如何让 AWS Lambda 在 EBS 快照完成时触发

How to get AWS Lambda to trigger when an EBS snapshot completes

我正在创建一堆 EBS 快照作为 AWS Lambda 的一部分。我需要在这些快照完成时捕获事件,以便我可以基于这些创建一个 ec2 实例。

我可以使用 snapshot waiter 但此轮询和有时创建快照可能需要很长时间。我不想让 Lambda 保持 运行 一段时间,而且 Lambda 的最长时间似乎是五分钟。我查看了 CloudWatch 和 AWS Config 以查看是否可以捕获快照事件,但没有成功。

您是正确的 -- 没有通知事件 表示 EBS 快照已完成。相反,您需要检查状态,直到状态更改为 completed.

AWS Lambda 函数可以运行最多5 分钟并且让 Lambda 函数等待外部进程不是一个好的架构,这也是正确的.

相反,您可以分解架构

  • 让您现有的流程触发 EBS 快照,然后将消息推送到 SQS 队列
  • 安排 Lambda 函数(例如每 5 分钟一次)来检查 SQS 队列。如果存在消息:
    • 从消息中检索有关实例和快照的详细信息
    • 检查快照的状态
    • 如果状态为completed,执行流程中的下一步

缺点是即使队列中没有消息,计划的 Lambda 函数也会触发。 Lambda 函数将很快退出(成本:100 毫秒)。

替代方法是在 Amazon EC2 实例(或连接到 Internet 的任何计算机上)上 运行 cron 脚本 t2.nano 实例每天大约 15.6c,这可能比调度 Lambda 函数更昂贵。如果您已经有一个正在使用的实例,则不会产生额外费用。

AWS Cloudwatch Events 中快照完成时现在有一个新事件:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-cloud-watch-events.html