AWS EC2 实例上的触发事件 stop/terminate

Trigger event on AWS EC2 instance stop/terminate

当 EC2 实例 stopped/terminated 时,是否有某种方法可以触发事件(例如 运行 将一些日志推送到 S3 的脚本)?

我研究过使用 /usr/lib/systemd/system 中的服务触发脚本,但我还没有成功。我听说实例上的网络功能可以在触发服务之前关闭,如果为真,这可能就是脚本未正确执行的原因。

您可以使用 CloudWatch 触发事件,例如将特定事件的日志推送到 S3...在此处了解更多信息:https://aws.amazon.com/cloudwatch/

所以答案并不是真正特定于 AWS,但它现在对我有用(在 EC2 实例停止和终止时测试)。

  1. 我创建了一个 system.d 服务文件:

/usr/lib/systemd/system/my_shutdown.服务

[Unit]
Description=my_shutdown Service
Before=shutdown.target reboot.target halt.target
Requires=network-online.target network.target

[Service]
KillMode=none
ExecStart=/bin/true
ExecStop=/path/to/my_script.sh
RemainAfterExit=yes
Type=oneshot

[Install]
WantedBy=multi-user.target
  1. 已将此服务添加到 multi-user.target:

systemctl enable my_shutdown.service

或者您可以手动创建符号链接:

ln -s /usr/lib/systemd/system/my_shutdown.service /etc/systemd/system/multi-user.target.wants/my_shutdown.service

  1. 启动服务并由 stopping/terminating 实例测试。

systemctl start my_shutdown.service

我的理解:

  • 描述:对我们服务的描述。
  • 之前:我们希望我们的服务在这些目标启动之前停止。
  • 要求:我们的服务要求网络功能可用。在我们的服务 starts/stops 之前,不得停止这些目标。
  • 杀戮模式:none;不要杀死我们的进程。
  • 执行开始:/bin/true;一个除了 returns 之外什么都不做的命令成功了。 运行服务什么时候开始。
  • ExecStop:运行 的脚本。 运行服务什么时候停止。
  • RemainAfterExit:认为我们的服务处于活动状态,即使它的所有进程都已退出。
  • 类型:oneshot;预计进程必须在 systemd 启动后续单元之前退出。
  • WantedBy:我们要添加服务的目标。

参考文献:

  1. https://www.freedesktop.org/software/systemd/man/systemd.service.html
  2. https://www.freedesktop.org/software/systemd/man/systemd.kill.html#
  3. https://www.freedesktop.org/software/systemd/man/systemd.special.html
  4. https://www.freedesktop.org/software/systemd/man/systemd.target.html