CloudWatch アラームで Systems Manager Automation を自動実行する方法 ── EventBridge ルールでランブックを直接呼ぶ
記事の「実践」を 1 項目ずつ進めるためのページです。AWS マネジメントコンソールで操作したら、右の一覧にチェックを入れてください。チェックはこのブラウザに保存されます。
前提条件
- リージョン:
ap-northeast-1(東京) - 以下のリソースが作成済みであること
まだ用意していない場合は、「作り方の参考」の記事の手順で作れます。リソース名は、この記事の名前に読み替えてください。
| リソース種別 | リソース名 | 内容 | 作り方の参考 |
|---|---|---|---|
| EC2 インスタンス | soa-web | 再起動の対象(Amazon Linux 2023、t3.micro) | Amazon EC2 でインスタンスを起動しSSH接続する |
| CloudWatch アラーム | soa-web-status-check | soa-web の StatusCheckFailed_Instance が 1 以上で ALARM | Amazon CloudWatch でメトリクスとアラームを設定する |
| Automation ランブック(カスタム) | soa-RebootInstance | パラメータ InstanceId のインスタンスを再起動し、running になるまで待つ | ― |
| IAM ロール | soa-automation-reboot-role | ランブックが引き受けるロール(EC2 の再起動と参照を許可)。ランブックの AutomationAssumeRole の既定値に設定済み | ― |
| IAM ロール | soa-eventbridge-automation-role | EventBridge ルールのロール(soa-RebootInstance の開始と、soa-automation-reboot-role の iam:PassRole を許可) | ― |
作成するリソース一覧
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| EventBridge ルール | soa-alarm-to-automation | アラームの ALARM への変化を受けてランブックを実行する |
手順 1: ランブックの中身を確かめる
AWS マネジメントコンソールにログインし、リージョンが ap-northeast-1(東京)であることを確認します。上部の検索バーに Systems Manager と入力し、「Systems Manager」を選択します。
左側ナビゲーションの「変更管理ツール」→「ドキュメント」を選択し、「自分が所有」タブで soa-RebootInstance を開きます(上部の検索バーに soa-RebootInstance と入力して開いても構いません)。ドキュメントの詳細は英語で表示されます。「Content」タブで、ランブックの中身を確認します。
- パラメータ:
InstanceId(再起動するインスタンス)とAutomationAssumeRole(既定値はsoa-automation-reboot-roleの ARN) - ステップ
rebootInstance:aws:executeAwsApiで EC2 のRebootInstancesを呼ぶ - ステップ
waitForRunning:aws:waitForAwsResourcePropertyでインスタンスの状態がrunningになるまで待つ
続けて、EC2 のコンソールで soa-web のインスタンス ID(i- で始まる値)を控えておきます。手順 3 で使います。
手順 2: イベントパターンを書く
上部の検索バーに EventBridge と入力し、「Amazon EventBridge」を選択します。左側ナビゲーションの「ルール」を選択し、「ルールを作成」をクリックします。最初に「ビルダーモード」を選ぶ画面が出る場合は、「アドバンストビルダー」を選びます。
「ルールの詳細を定義」で、以下を設定して「次へ」をクリックします。
- 名前:
soa-alarm-to-automation - イベントバス:
default
「イベントパターンを構築」で、以下を設定します。
- イベントソース: 「AWS イベントまたは EventBridge パートナーイベント」
- 作成のメソッド: 「カスタムパターン (JSON エディタ)」
- イベントパターン: 次の JSON を貼り付ける
{
"source": ["aws.cloudwatch"],
"detail-type": ["CloudWatch Alarm State Change"],
"detail": {
"alarmName": ["soa-web-status-check"],
"state": {
"value": ["ALARM"]
}
}
}
「次へ」をクリックします。
手順 3: ターゲットにランブックを指定する
「ターゲットを選択」で、以下を設定します。
- ターゲットタイプ: 「AWS のサービス」
- ターゲットを選択: 「Systems Manager オートメーション」
- ドキュメント:
soa-RebootInstance - 「自動化パラメータを設定」: 値の指定方法は「定数」のまま、
InstanceIdに手順 1 で控えたインスタンス ID を入力する。AutomationAssumeRole - オプションにはランブックの既定値(soa-automation-reboot-roleの ARN)が入っているので、そのままにする - 実行ロール: 「既存のロールを使用」で
soa-eventbridge-automation-roleを選択
「次へ」をクリックし、タグの画面も「次へ」で進みます。確認画面で内容を確かめ、「ルールの作成」をクリックします。ルールの一覧に soa-alarm-to-automation が「有効」で表示されることを確認します。
手順 4: アラームを ALARM にする
ステータスチェックを本当に失敗させるのは難しいので、SetAlarmState でアラームの状態を一時的に ALARM にします。状態が変わるので、EventBridge には本物の状態変化と同じイベントが届きます。
コンソール下部の「CloudShell」をクリックし、次のコマンドを実行します。
aws cloudwatch set-alarm-state \
--alarm-name soa-web-status-check \
--state-value ALARM \
--state-reason "EventBridge から Automation を起動するテスト"
CloudWatch のコンソールで左側ナビゲーションの「アラーム」→「すべてのアラーム」を選択し、soa-web-status-check を開きます。「履歴」タブに、ALARM への状態の更新が記録されていることを確認します(次の評価で、アラームは実際のメトリクスに合わせて OK に戻ります)。
手順 5: ランブックが動いたことを確かめる
Systems Manager のコンソールで、左側ナビゲーションの「変更管理ツール」→「オートメーション」を選択します。ドキュメント名が soa-RebootInstance の実行が一覧に追加されています。実行 ID をクリックして、実行の詳細を開きます。
- 実行ステータスが「成功」になっている
- 「実行したステップ」に
rebootInstanceとwaitForRunningが並び、どちらも「成功」になっている - 折りたたまれている「入力パラメータ」を展開すると、
InstanceIdがsoa-webのインスタンス ID になっている
EC2 のコンソールで soa-web を選択し、「ステータスとアラーム」タブ、または「モニタリング」タブでインスタンスが稼働中のままであることも確認できます。