EC2インスタンスの変化時(開始・停止)にメール通知やSMS通知を行う方法をご紹介します。
- Amazon EventBridge
- Amazon Simple Notification Service
を利用します。次のような構成です。
手順
最初にAmazon SNSを利用して「トピック」と「サブスクリプション」を作成します。次に、EventBridgeでEC2インスタンスの状態変化をトリガにして、作成したトピックを選択すれば完成です。
私は次のように理解しています。
Amazon SNS:トピックとサブスクリプションを作成
SNSサービスの「トピック」より「トピックの作成」をクリックします。
「トピックの作成」画面となるため、タイプ「スタンダード」を選択して、任意名前を入力して作成します。今回、他はデフォルトのまま進めます。
続いて、このトピックに括り付ける通知先エンドポイント「サブスクリプション」を作成していきます。
最初にEメールのサブスクリプションを作成します。
作成完了するとステータスは「保留中の確認」となります。
確認メールが入力したメール先に届いているため、確認を行うと、ステータスは「確認済み」となります。
続いて、同様に「SMS」用のサブスクリプションを作成します。(画面には載せてませんが、確認を行わないと、ステータスが確認済みになりません。SMSの場合は確認番号入力です。)
以上でSNS側の準備は完了です。
Amazon EventBridge:イベントを作成
EventBridgeサービスの「ルール」より「ルールの作成」をクリックします。
ルール名を入力します。
続いて「パターンを定義」では、任意EC2の状態変化時(今回はrunning, stopped)にイベントが発火するように設定します。
- イベントパターン
- イベント一致パターン:サービスごとの事前定義パターン
- サービスプロバイダー:AWS
- サービス名:EC2
- イベントタイプ:EC2 instance State-change Notification
- 特定の状態:running, stopped
- 個別のインスタンスID:対象のインスタンスID
ターゲットを選択では、「SNSトピック」として、先ほどSNSで作成したトピックを選択します。
設定は以上となります。お疲れ様でした。
該当EC2を開始すると次のような通知が届きます(SMSの場合も同等です)。
(参考) 文面を調整
デフォルトだと、状態変化時のJSON内容がそのまま届くため、通知文面を以下公式の手順に沿って調整します。
ここでは「The EC2 instance i-xxxxxx has changed state to running.」のような、文面にカスタマイズしていきます。該当イベント@ターゲットの「入力の設定」において、入力トランスフォーマーを選択します。
◆入力パス(特定JSONデータを変数として定義)
{"state" : "$.detail.state", "instance" : "$.detail.instance-id"}
◆入力テンプレート(変数をテンプレートに当てはめる)
→ ここでの変数は<>で囲われた、instance, stateです。
"The EC2 instance <instance> has changed state to <state>."
EC2の停止操作を行ったところ、以下の文面で通知が届きました。
先ほどのJSONベタとは異なり、シンプルになりました。
これ以上のカスタマイズ(インスタンスIDではなく、Nameタグを使う等)は、現時点ではLamdbaでガリガリと書くしかなさそうです。今後のバージョンアップに期待します。
(ご参考) コスト
■EventBridge
AWS のサービスによって発行されたすべての状態変更イベントは無料です。
■SNS
エンドポイントの種類 | 無料利用枠 | 料金 |
---|---|---|
モバイルプッシュ通知 | 100 万件の通知 | 0.50USD/100 万通知 |
Email/Email-JSON | 1,000 件の通知 | 2.00USD/10 万通知 |
ヘビーに使わない限り、通知に関するコストはあまり気にしなくてよさそうです。
まとめ
EC2インスタンスの状態変化時にメールやSMS通知を行う方法をご紹介しました。AWSのサービスを使うことで、簡単に通知処理を構築することが出来ます。本記事は基本的な内容になるため、しっかり抑えれば様々なケースにも適用できると思います。
最後までご覧いただき、ありがとうございました。
コメント