如何在EBS快照完成时启动AWS Lambda

时间:2016-11-01 03:56:05

标签: amazon-web-services amazon-ec2 aws-lambda aws-sdk amazon-cloudwatch

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

我可以使用snapshot waiter但是这个民意调查有时快照创建需要很长时间。我不希望Lambda继续运行一段时间,加上Lambda的最长时间似乎是五分钟。我查看了CloudWatch和AWS Config,看看我是否可以捕获快照事件但没有运气。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

相反,您可以拆分架构

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

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

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