AWS CloudWatch EventsでEC2停止時にSNSでメールを通知する方法

投稿者: | 2020-07-23

今回はAWSのCloudWatch Eventsを使い、EC2インスタンス停止時にSNSから指定したメールアドレスにメール通知を行う方法について説明します。

今回の処理の流れについて

今回の処理の流れは以下の通りとなります。

EC2インスタンスのステータスが「stopped」に変更された時、CloudWatch EventsでSNSをターゲットとし、指定したメールアドレスにメールを通知する流れになります。

VPCの作成

初めにVPCとサブネットを作成します。VPCコンソールの左側ペインから「VPC」を選択し「VPCの作成」をクリックします。

「VPCの作成」画面で名前タグとIPv4 CIDRブロックを設定し「作成」をクリックします。設定値は画像の通りとします。名前タグとIPv4 CIDRブロック以外はデフォルト値とします。

VPC作成後、サブネットを作成します。VPCコンソールの左側ペインから「サブネット」を選択し「サブネットの作成」をクリックします。

「サブネットの作成」画面で名前タグとVPC、アベイラビリティーゾーン、IPv4 CIDRブロックを設定し「作成」をクリックします。設定値は画像の通りとします。VPCは作成したVPCを指定し、アベイラビリティーゾーンは自身が使用しているリージョンから任意のアベイラビリティーゾーンを設定します。IPv4 CIDRブロックは「10.0.1.0/24」で設定します。

EC2の作成

VPCとサブネット作成後、サブネットにEC2インスタンスを作成します。EC2コンソールの左側ペインから「インスタンス」を選択し「インスタンスの作成」をクリックします。

「Amazon マシンイメージ(AMI)」画面で「Amazon Linux AMI」を選択します。

「インスタンスタイプの選択」画面では「t2.micro」を選択し「次のステップ:インスタンスの詳細の設定」をクリックします。

「インスタンスの詳細の設定」画面でネットワークとサブネットの項目を設定し「次のステップ:ストレージの追加」をクリックします。ネットワークとサブネットについては、作成したVPCとサブネットを設定します。それ以外の項目についてはデフォルト値とします。

「ストレージの追加」画面はデフォルトの設定で「次のステップ:タグの追加」をクリックします。

「タグの追加」画面でキー値に「Name」、値に「TestEC2」を設定し「次のステップ:セキュリティグループの設定」をクリックします。

「セキュリティグループの設定」画面でセキュリティグループ名と説明を設定し「確認と作成」をクリックします。

「インスタンス作成の確認」画面で設定内容に問題なければ「起動」をクリックします。

キーペア作成画面では、今回は「キーペアなしで続行」を選択し「このAMIに組み込まれたパスワードがわからないと、このインスタンスに接続できないことを認識しています。」にチェックを入れ「インスタンスの作成」をクリックします。

※注意
今回はEC2に対して何もしないため「キーペアなしで続行」を選択していますが、EC2でWebサーバ等を構築、運用等を行う際にはセキュリティを確保するため必ずキーの作成もしくは既存のキーを使用するようにしてください。

SNSトピック・サブスクリプションの作成

EC2作成後、SNSのトピックとサブスクリプションを作成します。SNSコンソールの左側ペインから「トピック」を選択し「トピックの作成」をクリックします。

「トピックの作成」画面で名前と表示名を設定し「トピックの作成」をクリックします。名前と表示名以外はデフォルト値とします。

トピック作成後、SNSコンソールの左側ペインから「サブスクリプション」を選択し「サブスクリプションの作成」をクリックします。

「サブスクリプションの作成」画面でトピックARNに作成したトピックを設定し、プロトコルにEメール、エンドポイントにメールを通知するメールアドレスを設定し「サブスクリプションの作成」をクリックします。それ以外の項目はデフォルト値とします。

サブスクリプション作成後、エンドポイントに設定したメールアドレスへサブスクリプションの確認メールが届くため、「Confirm subscription」をクリックします。

ブラウザでサブスクリプションの確認ができたらSNSの設定は完了です。

CloudWatch Eventsの作成

SNSでトピックとサブスクリプション作成後、CloudWatch Eventsの設定をします。CloudWatchコンソールの左側ペインから「ルール」を選択し「ルールの作成」をクリックします。

「ルールを作成する」画面でサービス名に「EC2」、イベントタイプに「EC2 Instance State-change Notification」を設定します。インスタンスの状態は「特定の状態」を選択し、対象のインスタンスは「任意のインスタンス」を選択します。ターゲットは「SNSトピック」を選択しトピックにSNSで作成したトピックを設定後「設定の詳細」をクリックします。

「ルールの詳細を設定する」画面で名前を設定し「ルールの作成」をクリックします。

動作確認

全ての設定完了後、処理の流れ通りに実行されるか動作を確認します。EC2コンソールの左側ペインから「インスタンス」を選択し、「アクション > インスタンスの状態 > 停止」をクリックしインスタンスを停止します。

インスタンスのステータスが「stopped」に変更されたことを確認します。

インスタンス停止後、サブスクリプションで登録したメールアドレスにインスタンスの停止を通知するメールが届いていれば成功です。