始めに
以前、以下の記事で書いたように、EC2起動時に自信を監視するCW AlarmをUserdata使用で作成しました。
https://qiita.com/namely_/items/bbe02769c4fbe6114655
今回は、それの延長で、EC2が終了される前にCW Alarmも一緒に削除する仕組みを作りました。
起動時にはUserdataで仕込むことができますが、終了時にはそういったオプションはないと思うので、Systemdを活用しました。
Shell
# Service 作成
sudo vi dele.service
-------
[Unit]
## 説明
Description=delete
## shutdownされる前に実行
Before=shutdown.target
[Service]
## シングルジョブを行い終了する
Type=oneshot
## systemd はプロセスが終了した後もサービスがアクティブだとみなす。
## この設定が今回必要だったかは不明
RemainAfterExit=true
## 終了時のシェル
ExecStop=/home/xx/shutdownScript.sh
[Install]
## shutdown時に動かすサービスなのだから、shutdown.targetでは?
## と思ったが、なぜか通らなかったので、multi-user.targetに。
WantedBy=multi-user.target
-------
sudo mv dele.service /etc/systemd/system/dele.service
sudo mkdir /home/xx/
# スクリプト作成
sudo vi shutdownScript.sh
-----------
#!/bin/bash
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
export AWS_DEFAULT_REGION=
aws cloudwatch delete-alarms --alarm-names ec2-$InstanceId-cpu-alarm
-----------
sudo mv shutdownScript.sh /home/xx/
sudo chmod u+x /home/xx/shutdownScript.sh
sudo systemctl daemon-reload
sudo systemctl start dele --now
sudo systemctl enable dele
Created symlink /etc/systemd/system/multi-user.target.wants/dele.service → /etc/systemd/system/dele.service.
テストとして、EC2をterminateさせると、作成したAlarmが消えていると思います。
参考
https://qiita.com/comwing65/items/3386a061aeb3d2f81b81
https://kernhack.hatenablog.com/entry/2014/12/08/000708
参考にさせていただきました。ありがとうございます。
備考
Linux、本当に難しいのと、かなり奥が深いことを実感しました。
何か間違っている記載ありましたら教えていただけると嬉しいです。