エンジョイ AWS!
サーバーワークス エンジニアの伊藤Kです。
AWSアカウントの管理者をされている方で、例えばユーザーが自由にEC2インスタンスを構築できるよう権限を委任した場合に、
利用料チェックの観点から、EC2が構築されたこと自体は検知したい、といったニーズはあるのではないでしょうか。
そんなときにきっと役に立つ、「AWSアカウントでEC2インスタンスがローンチされたときにメール通知」の方法を紹介します。
構成
Amazon CloudWatch Eventsで、AWS Configの「ResourceDiscovered」イベントをトリガーとして、Amazon SNSでEメールを送信します。

手順
前提として、以下の2点は完了していることとします
- AWS Configの有効化
- 通知用メールアドレスへEメールを送信するSNS Topicの作成(ここでは「Default_Topic」という名前で作成したものとします)

それでは手順です。
以下、 公式のドキュメント に沿って進めていきます。
マネジメントコンソールからCloudWatchを開いて、
左のメニューから「イベント」 → 「ルール」を選択し、「ルールの作成」をクリックします。

「ルールを作成する」画面で「イベントパターン」を選択し、
「サービス別のイベントに一致するイベントパターンの構築」プルダウンリストを開いて、
「カスタムイベントパターン」を選択します。
「カスタムイベントパターンの構築」に、公式ドキュメントから以下のイベントパターンの例をコピーして貼り付けます。

{
"source": [
"aws.config"
],
"detail-type": [
"Config Configuration Item Change"
],
"detail": {
"messageType": [
"ConfigurationItemChangeNotification"
],
"configurationItem": {
"resourceType": [
"AWS::EC2::Instance"
],
"configurationItemStatus": [
"ResourceDiscovered"
]
}
}
}
「ターゲットの追加」をクリックします。

ターゲットのドロップダウンメニューを選択し、「SNS トピック」 を選択します。
「トピック」で通知Eメール送信用のトピックを選択します。
「インプットトランスフォーマー」を選択します。

「入力パス」テキストボックスに、公式ドキュメントから以下のパスの例をコピーして貼り付けます。
{
"awsRegion": "$.detail.configurationItem.awsRegion",
"awsAccountId": "$.detail.configurationItem.awsAccountId",
"resource_type": "$.detail.configurationItem.resourceType",
"resource_ID": "$.detail.configurationItem.resourceId",
"configurationItemCaptureTime": "$.detail.configurationItem.configurationItemCaptureTime"
}
「入力テンプレート」テキストボックスに、公式ドキュメントから以下のサンプルテンプレートをコピーして貼り付けます。
"On <configurationItemCaptureTime> AWS Config service recorded a creation of a new <resource_type> with Id <resource_ID> in the account <awsAccountId> region <awsRegion>. For more details open the AWS Config console at https://console.aws.amazon.com/config/home?region=<awsRegion>#/timeline/<resource_type>/<resource_ID>/configuration"

「設定の詳細」をクリックします。
「ルールの詳細を設定する」画面で「名前」に任意の名前を入力し、
「状態」は「有効化」にチェックが入った状態で「ルールの作成」をクリックします。

ルールの一覧に作成したルールが表示され、ステータスが緑の丸になっていることを確認します。

いざ検知
では、EC2を1インスタンス起動(ローンチ)してみます。
新規ローンチのみが対象で、既にあるインスタンスの起動が誤検知されないことを確認するために、既存のインスタンスの停止 → 開始も同時間帯に実施しました。

起動から15分で、対象の1台のみ綺麗にメールが届きました!
インスタンスIDも確認できます。

気になるお値段は
毎月110円前後で済みそうです。
| CloudWatch Events | 100万件までは 1 USD |
| AWS Config | 今回の設定前から記録は動いている前提のため、今回は追加で料金は発生しない |
| SNS | 無料枠で済みそう ・毎月最初の 100 万 Amazon SNS リクエストは無料 ・Email/Email-JSON 1,000 件まで無料 |
それでは、楽しいAWSライフを!
