AWS CloudFormation スタックが ROLLBACK_IN_PROGRESS ステータスになったときにメールアラートを受信するにはどうすればよいですか?
スタックの作成中に AWS CloudFormation スタックが ROLLBACK_IN_PROGRESS ステータスになったときに E メールアラートを受信したいと考えています。
簡単な説明
解決方法セクションの手順を完了すると、通知は次のように機能するようになります。
- AWS CloudFormation スタックは、すべての通知を AWS Lambda 関数に通知する Amazon Simple Notification Service (Amazon SNS) トピックに送信します。
- Lambda 関数は通知を解析し、「ROLLBACK_IN_PROGRESS」通知だけを E メールアラート用に設定された 2 番目の Amazon SNS トピックに送信します。
- この 2 番目の SNS トピックが、「ROLLBACK_IN_PROGRESS」メッセージに関する E メールをサブスクライバーに送信します。
解決方法
SNS トピックと E メールアラートのサブスクリプションを作成する
1. Amazon SNS コンソールを開きます。
2. ナビゲーション ペインで、[Topics] を選択します。
注意: 既存のトピックを使用するには、リソースリストからそのトピックを選択し、手順 7 に進みます。
3. [トピックを作成] を選択します。
4. [Name] に、トピック名を入力します。
5. [Display name] に、表示名を入力します。
6. [Create topic] を選択します。
7. 後で使用するために、トピックの Amazon リソースネーム (ARN) をメモします。
8. [Create subscription] を選択します。
9. [Topic ARN] で、手順 7 でメモした SNS トピックの ARN を選択します。
10. [Protocol] には [Email] を選択します。
11. [Endpoint] に、E メールアドレスを入力します。
12. [Create subscription] (サブスクリプションの作成) を選択します。
注意: 手順 11 で入力した E メールアドレスから、Amazon SNS のサブスクリプション確認メールが届きます。
13. 確認メールで [Confirm subscription] (サブスクリプションの確認) を選択します。
ブラウザにサブスクリプションの確認メッセージが表示されます。
Lambda が E メールアラート用に SNS トピックに発行できるようにする AWS Identity and Access Management (IAM) ポリシーを作成する
注意: このポリシーにより、Lambda は Amazon CloudWatch Logs に書き込むこともできます。
1. IAM コンソールを開きます。
2. ナビゲーションペインで、[ポリシー] を選択します。
3. [Create policy] を選択します。
4. [JSON] タブを選択して、コードエディタで以下のコードを入力します:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": [ "{awsExampleSNSTopicARN}" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" } ] }
注意: E メールアラート用に作成した SNS トピックの場合は、awsExampleSNSTopicARN を ARN に置き換えます。
5. [Review policy (ポリシーの確認)] を選択します。
6. [Name] に、ポリシー名を入力します。
7. [Create policy] (ポリシーの作成) を選択します。
IAM ポリシーを Lambda の IAM ロールにアタッチする
1. IAM コンソールを開きます。
2. ナビゲーションペインで、[Roles] を選択します。
3. [Create role] を選択します
4. [Select type of trusted entity] (信頼されたエンティティの種類の選択) セクションで、[AWS service] (AWS のサービス) を選択します。
5. [Choose the service that will use this role] (このロールを使用するサービスの選択) セクションで、[Lambda] を選択します。
6. [Next: Permissions] を選択します。
7. 検索バーで、前に作成したポリシーの名前を入力し、そのポリシーを選択します。
8. [Next:Tags] を選択してから、オプションの IAM タグを作成します。
9. [Next: Review] を選択します。
10. [Role name] に、ロール名を入力します。
11. [Create role] (ロールの作成) を選択します。
Lambda 関数を作成し、作成した IAM ロールを割り当てる
1. Lambda コンソールを開きます。
2. [Create function] を選択します。
3. [Author from scratch] を選択します。
4. [Name] に、Lambda 関数の名前を入力します。
5. [Runtime] で、[Node.js 10.x] を選択します。
6. [Execution role] (実行ロール) で、[Use an existing role] (既存のロールを使用する) を選択します。
7. [Existing role] で、前に作成した IAM ロールを選択します。
8. [Create function] (関数を作成) を選択します。
2 番目の SNS トピックとサブスクリプションを作成して、Lambda 関数に通知する
1. Amazon SNS コンソールを開きます。
2. ナビゲーション ペインで、[Topics] を選択します。
3. [トピックを作成] を選択します。
4. [Name] に、トピック名を入力します。
5. [Display name] に、表示名を入力します。
6. [Create topic] を選択します。
7. 後で使用するために、トピックの ARN をメモします。
8. [Create subscription] を選択します。
9. [Topic ARN] で、手順 7 でメモした SNS トピックの ARN を選択します。
10. [Protocol] で、[AWS Lambda] を選択します。
11. [Endpoint] で、作成した Lambda 関数を選択します。
12. [Create subscription] (サブスクリプションの作成) を選択します。
SNS トピックに発行するスクリプトを使用して Lambda 関数を更新する
1. Lambda コンソールを開きます。
2. ナビゲーションペインで、[Functions] を選択してから、前に作成した関数を選択します。
3. [Function code] (関数コード) セクションで、エディタペインに以下のスクリプトを入力します:
topic_arn = "{awsExampleSNSTopicARN}"; var AWS = require('aws-sdk'); AWS.config.region_array = topic_arn.split(':'); // splits the ARN into an 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); }); }
注意: E メールアラート用に作成した SNS トピックの場合は、awsExampleSNSTopicARN を ARN に置き換えます。
4. [Designer] (デザイナー) ビューの [Add triggers] (トリガーの追加) セクションで、[SNS] を選択します。
5. [Configure triggers] (トリガーの設定) セクションの [SNS topic] (SNS トピック) で、Lambda 関数に通知するために作成した SNS トピックを選択します。
6. [Add] を選択します。
7. [Save] (保存) を選択します。
Lambda 関数に通知する SNS トピックにすべての通知を送信するように AWS CloudFormation スタックを設定する
1. AWS CloudFormation コンソールを開き、セットアップウィザードの手順に従って スタックを作成します。
2. [Notification options] で、[Existing Amazon SNS topic] を選択します。
3. Lambda 関数に通知するために作成した SNS トピックを選択します。
4. セットアップウィザードの手順を完了して、スタックを作成します。
AWS コマンドラインインターフェイス (AWS CLI) を使用して スタックを作成する場合は、--notification-arns コマンドを使用します。このコマンドは、Lambda 関数への通知を SNS トピックに送信します。次に、SNS トピックの値を SNS ARN に設定します。
関連情報
関連するコンテンツ
- 質問済み 3ヶ月前lg...
- 質問済み 3ヶ月前lg...
- 質問済み 2ヶ月前lg...
- 質問済み 5年前lg...
- AWS公式更新しました 1ヶ月前
- AWS公式更新しました 25日前