opswitchでインスタンスの自動起動/停止を設定し、失敗時の挙動を確認しました

2020.12.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

弊社から提供している、AWS運用かんたん自動化ツール"opswitch" を使って、EC2インスタンスとAuroraクラスターの自動起動・自動停止をスケジューリングしました。
その際に、万が一自動起動・停止に失敗していた場合どういう挙動になるのか、気づくことが出来るか、オペレーターが対応できるか、を確認したため記します。

本記事では設定も行いますが、opswitchの自動起動設定方法、ステータスのチェック方法、失敗時の通知方法などの各設定方法の詳細はユーザーズマニュアルに記載がありますのでご参照ください。

通知設定

opswitchから、通知先メールアドレスを設定します。
デフォルトでは通知先メールアドレスが設定されていませんでしたので設定しました。

EC2起動ジョブを作成する際、「終了時のステータス:チェックする」を設定します。

ジョブ失敗時の確認

ここでは、EBSデタッチ済みの停止インスタンスをopswitchのジョブで起動させてみました。

ジョブを実行すると、リトライしています。

即座に失敗通知を送信するのではなく、9回までリトライします。
ジョブが失敗した場合のリトライ

また、リトライ間隔は長くなります。

リトライ間隔は1秒後、2秒後、4秒後・・・64秒後、128秒後、256秒後のように徐々に長くなります。

私が試した際は、ジョブの手動実行操作から失敗の通知まで25分ほどかかりました。

sys@opswitch.io から失敗通知のメールが送信されます。

-------------------------------------------------------------------------------------------
タスク名: EC2起動
タスク種別: EC2インスタンスの起動・停止
ターゲットタグKey: iwasa
ターゲットタグValue: iwasa
タスク実行結果: 失敗
開始日時: 2020-12-15 15:22:29
終了日時: 2020-12-15 15:22:29
-------------------------------------------------------------------------------------------
EC2インスタンスID: i-0dfe764b74c59a521
エラーメッセージ: Error change state instance : An error occurred (InvalidParameterValue) when calling the StartInstances operation: Invalid value 'i-0dfe764b74c59a521' for instanceId. Instance does not have a volume attached at root (/dev/xvda)
-------------------------------------------------------------------------------------------

起動したEC2インスタンス数: 0
-------------------------------------------------------------------------------------------

タスク名: EC2起動
タスク種別: EC2インスタンスの起動・停止
ターゲットタグKey: iwasa
ターゲットタグValue: iwasa
タスク実行結果: 失敗
開始日時: 2020-12-15 15:23:52
終了日時: 2020-12-15 15:23:53
-------------------------------------------------------------------------------------------
EC2インスタンスID: i-0dfe764b74c59a521
エラーメッセージ: Error change state instance : An error occurred (InvalidParameterValue) when calling the StartInstances operation: Invalid value 'i-0dfe764b74c59a521' for instanceId. Instance does not have a volume attached at root (/dev/xvda)
-------------------------------------------------------------------------------------------

起動したEC2インスタンス数: 0

エラー情報はリトライの数だけのエラーメッセージがひとつのメールにまとまって送信されます。
また、失敗ステータスだけでなく、エラーメッセージも通知内容に含まれています。

冗長なため詳細は割愛しますが、EC2の停止、Auroraクラスター起動・停止の挙動もEC2起動失敗と同様の結果となりました。(失敗原因はIAMポリシーでの拒否設定)

-------------------------------------------------------------------------------------------
タスク名: Aurora停止
タスク種別: DBクラスター起動・停止
ターゲットタグKey: iwasa
ターゲットタグValue: iwasa
タスク実行結果: 失敗
開始日時: 2020-12-15 15:30:30
終了日時: 2020-12-15 15:30:30
-------------------------------------------------------------------------------------------
ターゲットリソース ID: database-1
エラーメッセージ: Error change state db cluster : An error occurred (AccessDenied) when calling the StopDBCluster operation: User: arn:aws:sts::550669467088:assumed-role/opswitch-stack-IAMRole-HUB89YQNLIWZ/e8c23402-47ce-417b-915d-8b7bdb5e4f9c is not authorized to perform: rds:StopDBCluster on resource: arn:aws:rds:ap-northeast-1:550669467088:cluster:database-1 with an explicit deny
-------------------------------------------------------------------------------------------

まとめ

起動・停止APIをコールして投げっぱなしで終わるのではなく、ステータスの判定とエラーメッセージの通知まで行ってくれます。
万が一、なんらかの要因でジョブに失敗した場合も検知し、エラーメッセージも添付されているため対処を行うことが出来そうです。