opswitchでインスタンスの自動起動/停止を設定し、失敗時の挙動を確認しました
いわさです。
弊社から提供している、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をコールして投げっぱなしで終わるのではなく、ステータスの判定とエラーメッセージの通知まで行ってくれます。
万が一、なんらかの要因でジョブに失敗した場合も検知し、エラーメッセージも添付されているため対処を行うことが出来そうです。