スタック作成中に AWS CloudFormation スタックが ROLLBACK_IN_PROGRESS 通知を取得したときに、E メールで通知されるようにしたい。このような E メールアラートを設定するにはどうすればよいですか?

ROLLBACK_IN_PROGRESS の CloudFormation スタック通知に対する E メールアラートを送信するには、以下のステップに従い、Amazon Simple Notification Service (Amazon SNS) および AWS Lambda を使用します。

  1. E メールアラートのための SNS トピックおよびサブスクリプションを作成します。
  2. Lambda が SNS トピックに E メールアラートを発行できるよう、AWS Identity and Access Management (IAM) ポリシーを作成します。
  3. IAM ポリシーを Lambda の IAM ロールにアタッチします。
  4. Lambda 関数を作成し、作成した IAM ロールを割り当てます。
  5. Lambda 関数に通知するため、2 番目の SNS トピックおよびサブスクリプションを作成します。
  6. "ROLLBACK_IN_PROGRESS" 通知が届いたら SNS トピックに E メールアラートを発行するスクリプトで、Lambda 関数を更新します。
  7. Lambda 関数に通知する SNS トピックにすべての通知を送信するよう、CloudFormation スタックを設定します。

この手順の終了後の通知プロセスは以下の通りです。

  1. CloudFormation スタックは Lambda 関数に通知する SNS トピックにすべての通知を送信します。
  2. Lambda 関数は通知を解析し、E メールアラートが設定された 2 番目の SNS トピックに "ROLLBACK_IN_PROGRESS" 通知だけを送信します。
  3. この 2 番目の SNS トピックはさらに、"ROLLBACK_IN_PROGRESS" メッセージの受信者に E メールを送信します。

E メールアラート用に SNS トピックおよびサブスクリプションを作成する

1.    Amazon SNS コンソールを開きます。

2.    ナビゲーションペインで、[トピック] を選択します。そして、[新しいトピックの作成] を選択します。

3.    [トピック名] にトピック名を入力します。

4.    [表示名] に表示名を入力します。

5.    [トピックを作成] を選択します。

6.    トピックの ARN を書き留めます。この ARN は、後のステップで必要になります。

7.    トピックをリソースリストから選択します。そして、[アクション]を選択し、[トピックへのサブスクライブ] を行います。

8.    [プロトコル] で [E メール] を選択します。

9.    [エンドポイント] に E メールアドレスを入力します。

10.   [サブスクリプションの作成] を選択します。

11.   ステップ 9 で入力した E メールアドレスに、Amazon SNS から サブスクリプションの確認を求める E メールが届きます。確認を求める E メールメッセージで、[サブスクリプションを確認] を選択します。

Lambda が SNS トピックに E メールアラートを発行できるように IAM ポリシーを作成する

注意: このポリシーは、Lambda に Amazon CloudWatch Logs への書き込みも許可します。

1.    IAM コンソールを開きます。

2.    ナビゲーションペインで、[ポリシー] を選択し、[ポリシーの作成] を選択します。

3.    [JSON] ビューを選択します。そして、以下のポリシーをコピーし、貼り付けます。
注意: {SNS topic ARN for email alerts} を E メールアラート用に作成した SNS トピックの ARN に置き換える必要があります。

{   "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": [
                "{SNS topic ARN for email alerts}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
}

4.    [Review Policy (ポリシーのレビュー)] を選択します。

5.    [Name (名前)] には、ポリシー名を入力します。

6.    [Create policy (ポリシーの作成)] を選択します。

IAM ポリシーを Lambda の IAM ロールにアタッチする

1.    IAM コンソールを開きます。

2.    ナビゲーションペインで [ロール] を選択した後、[ロールの作成] を選択します。

3.    [Select type of trusted entity (信頼されたエンティティのタイプを選択)] で、[AWS サービス] を選択します。

4.    [このロールを使用するサービスを選択] で、[Lambda] を選択します。

5.    [Next: Permissions (次へ: アクセス許可)] を選択します。

6.    検索バーに、作成したポリシーの名前を入力します。そして、ポリシーを選択します。

7.    [Next: Review (次へ: 確認)] を選択します。

8.    [ロール名] に、ロール名を入力します。

9.    [ロールの作成] を選択します。

Lambda 関数を作成して、作成した IAM ロールを割り当てる

1.    AWS Lambda コンソールを開きます。

2.    [関数の作成] を選択します。

3.    [一から作成] を選択します。

4.    [名前] には、Lambda 関数の名前を入力します。

5.    [ランタイム] で、[Node.js 4.3] を選択します。

6.    [ロール] で、[Choose an existing role (既存のロールを選択)] を選択します。

7.    [既存のロール]で、作成した IAM ロールを選択します。

8.    [関数の作成] を選択します。

2 番目のSNS トピックおよびサブスクリプションを作成して、Lambda 関数に通知する

1.    Amazon SNS コンソールを開きます。

2.    ナビゲーションペインで、[トピック] を選択します。そして、[新しいトピックの作成] を選択します。

3.    [トピック名] にトピック名を入力します。

4.    [表示名] に表示名を入力します。

5.    [トピックを作成] を選択します。

6.    トピックをリソースリストから選択します。そして、[アクション]を選択し、[トピックへのサブスクライブ] を行います。

7.    [プロトコル]で、[AWS Lambda] を選択します。

8.    [エンドポイント]で、作成した Lambda 関数を選択します。

9.    [サブスクリプションの作成] を選択します。

ROLLBACK_IN_PROGRESS 通知が届いたら SNS トピックに E メールアラートを発行するスクリプトで Lambda 関数を更新する

1.    作成した Lambda 関数を開きます。

2.    [Function code (関数コード)] ビューで、コードセクションを以下のスクリプトで置き換えます。
注意: {SNS topic ARN for email alerts} を E メールアラート用に作成した SNS トピックの ARN に置き換える必要があります。さらに、AWS.config.region の値をユースケースでの正しい値に置き換える必要があります。

topic_arn = "{SNS topic ARN for email alerts}";
var AWS = require('aws-sdk'); 
AWS.config.region_array = topic_arn.split(':'); // splits the ARN in to and array 
AWS.config.region = AWS.config.region_array[3];  // makes the 4th variable in the array (will always be the region)

// ####################   BEGIN LOGGING   ########################

console.log(topic_arn);   // just for logging to the that the var was parsed correctly
console.log(AWS.config.region_array); // to see if the SPLIT command worked
console.log(AWS.config.region_array[3]); // to see if it got the region correctly
console.log(AWS.config.region); // to confirm that it set the AWS.config.region to the correct region from the ARN

// ####################  END LOGGING (you can remove this logging section)  ########################

exports.handler = function(event, context) {
    const message = event.Records[0].Sns.Message;
    if (message.indexOf("ROLLBACK_IN_PROGRESS") > -1) {
        var fields = message.split("\n");
        subject = fields[11].replace(/['']+/g, '');
        send_SNS_notification(subject, message);   
    }
};

function send_SNS_notification(subject, message) {
    var sns = new AWS.SNS();
    subject = subject + " is in ROLLBACK_IN_PROGRESS";
    sns.publish({ 
        Subject: subject,
        Message: message,
        TopicArn: topic_arn
    }, function(err, data) {
        if (err) {
            console.log(err.stack);
            return;
        } 
        console.log('push sent');
        console.log(data);
    });
}

3.    [Designer (デザイナー)] ビュー ([Function code (関数コード)] ビューの上)の [トリガーの追加] で、[SNS] を選択します。

4.    [トリガーの設定] の [SNS トピック] で、Lambda 関数に通知するために作成した SNS トピックを選択します。

5.    [追加] を選択します。

6.    [保存] を選択します。

Lambda 関数に通知する SNS トピックにすべての通知を送信するよう、CloudFormation スタックを設定する

AWS CloudFormation コンソールでのスタックの作成を使用している場合は、以下のステップに従います。

1.    [オプション] で、[詳細] を展開します。

2.    [通知オプション] で、[既存の Amazon SNS トピック] を選択します。

3.    Lambda 関数に通知するために作成した SNS トピックを選択します。

4.    スタックを作成するステップに従って、続行します。

AWS コマンドラインインターフェイス (AWS CLI) でスタックを作成を使用している場合は、--notification-arns コマンドを使用して、Lambda 関数に通知する SNS トピックに通知を送信します。SNS トピックの ARN を値として入力します。


このページは役に立ちましたか? はい | いいえ

AWS サポートナレッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。

公開日: 2017 年 7 月 3 日

更新: 2018 年 5 月 17 日