amazon-web-services - 在 EC2 终止时调用脚本
问题描述
我必须在 AWS 自动缩放缩减事件期间采取某些措施。ec2 实例应该能够将一些日志和报告保存到 S3 存储桶。这可能需要 5 到 15 分钟。
我已经有一个在终止时调用的脚本:
ln -s /etc/ec2-termination /etc/rc0.d/S01ec2-termination
然而,脚本在 5 分钟内突然结束。我正在考虑利用 AWS LifeCycle 挂钩来延长 EC2 的生命周期。文档并不清楚以类似于用户数据脚本的方式调用脚本。
有多种方法可以使用 AWS lambda 或 SNS 来接收通知。这可以潜在地用于通知 ec2。
但是,我想知道这个问题是否有更简单的解决方案。有没有办法注册一个带有生命周期钩子的脚本,该钩子在缩减事件中被调用。
解决方案
不。
实例被终止的事实在 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以触发实例上的代码
简单多了!
推荐阅读
- python - Elastic Beanstalk 最大环境变量长度
- sql-server - 无法生成 SSPI 上下文
- docker - 无法从外部应用程序连接到 Kafka
- python - Python将变量的内容复制到剪贴板
- paypal - 从 Magento 结帐中删除 Paypal Credit
- flutter - 如何将数据从方法 _callLogs 传递到正文并打印?
- java - 我的 .jar 可执行文件仅在命令行中正常工作,但在通过资源管理器单击它时不能正常工作(相同位置)
- r - 如何在函数中将“一切可能”传递给 by?
- c++ - 在 VS Code 中使用离线 cppreference 获取上下文帮助
- java - 如何生成 @CreatedDate LocalDateTime 作为时间戳?