首页 > 解决方案 > 在 EC2 终止时调用脚本

问题描述

我必须在 AWS 自动缩放缩减事件期间采取某些措施。ec2 实例应该能够将一些日志和报告保存到 S3 存储桶。这可能需要 5 到 15 分钟。

我已经有一个在终止时调用的脚本:

ln -s /etc/ec2-termination /etc/rc0.d/S01ec2-termination

然而,脚本在 5 分钟内突然结束。我正在考虑利用 AWS LifeCycle 挂钩来延长 EC2 的生命周期。文档并不清楚以类似于用户数据脚本的方式调用脚本。

有多种方法可以使用 AWS lambda 或 SNS 来接收通知。这可以潜在地用于通知 ec2。

但是,我想知道这个问题是否有更简单的解决方案。有没有办法注册一个带有生命周期钩子的脚本,该钩子在缩减事件中被调用。

标签: amazon-web-servicesamazon-ec2lifecycle-hook

解决方案


不。

实例被终止的事实在 AWS 基础设施中进行管理。Auto Scaling 无法“进入”EC2 实例以触发任何事情。

相反,您需要在实例上编写一些代码来检查实例是否处于终止状态,然后采取适当的措施。

一个例子可能是:

  • Lifecycle Hook通过 Amazon SNS发送通知
  • Amazon SNS触发 AWS Lambda 函数
  • Lambda 函数可以向实例添加标签(例如 Terminating = Yes)
  • EC2 实例上的脚本每 15 秒触发一次,以检查与 EC2 实例(在其上运行)关联的标签。如果它找到标签,它会触发关闭过程。

(注意在关机过程中脚本不会再次触发,否则它可能会尝试每 15 秒执行一次关机过程!)

或者,将关闭信息存储在 Systems Manager Parameter Store 或数据库中,但使用标签似乎具有很好的可扩展性!

更新后的版本:

感谢 raevilman 的想法:

  • Lifecycle Hook通过 Amazon SNS发送通知
  • Amazon SNS触发 AWS Lambda 函数
  • Lambda 函数调用AWS Systems Manager Run Command以触发实例上的代码

简单多了!


推荐阅读