AWS CloudFormation 스택 생성 중에 스택에서 ROLLBACK_IN_PROGRESS 알림이 발생하는 경우 이메일을 받고 싶습니다. 이러한 이메일 알림을 설정하려면 어떻게 해야 합니까?

다음 단계에 따라 Amazon Simple Notification Service(Amazon SNS) 및 AWS Lambda를 사용하여 ROLLBACK_IN_PROGRESS CloudFormation 스택 알림에 대한 이메일 알림을 보내십시오.

  1. 이메일 알림에 대한 SNS 주제 및 구독을 생성합니다.
  2. 이메일 알림의 SNS 주제에 대한 Lambda의 게시를 허용하는 AWS Identity and Access Management(IAM) 정책을 생성합니다.
  3. Lambda의 IAM 역할에 IAM 정책을 연결합니다.
  4. Lambda 함수를 생성하고 이전에 생성한 IAM 역할을 할당합니다.
  5. Lambda 함수에 알림을 제공하는 두 번째 SNS 주제 및 구독을 생성합니다.
  6. "ROLLBACK_IN_PROGRESS" 알림이 발생할 때 이메일 알림에 대한 SNS 주제에 게시하는 스크립트로 Lambda 함수를 업데이트합니다.
  7. Lambda 함수에 알림을 제공하는 SNS 주제로 모든 알림을 전송하도록 CloudFormation 스택을 설정합니다.

이 절차를 완료한 후의 알림 프로세스는 다음과 같습니다.

  1. CloudFormation 스택이 Lambda 함수에 알림을 제공하는 SNS 주제로 모든 알림을 전송합니다.
  2. Lambda 함수가 알림을 구문 분석하고 "ROLLBACK_IN_PROGRESS" 알림만 이메일 알림이 구성된 두 번째 SNS 주제로 전송합니다.
  3. 이 두 번째 SNS 주제는 이메일 구독자에게 “ROLLBACK_IN_PROGRESS” 메시지를 전송합니다.

이메일 알림에 대한 SNS 주제 및 구독 생성

1.    Amazon SNS 콘솔을 엽니다.

2.    탐색 창에서 [Topics]를 선택합니다. 그런 다음 [Create new topic]을 선택합니다.

3.    [Topic name]에 주제 이름을 입력합니다.

4.    [Display name]에 표시 이름을 입력합니다.

5.    [Create topic]을 선택합니다.

6.    주제의 ARN을 기록합니다. 이후 단계에서 ARN이 필요합니다.

7.    리소스 목록에서 주제를 선택합니다. 그런 다음 [Actions, Subscribe to topic]을 선택합니다.

8.    [Protocol]에서 [Email]을 선택합니다.

9.    [Endpoint]에 이메일 주소를 입력합니다.

10.   [Create subscription]을 선택합니다.

11.   9단계에서 입력한 이메일 주소로 Amazon SNS의 구독 확인 이메일이 전송됩니다. 확인 이메일 메시지에서 [Confirm subscription]을 선택합니다.

이메일 알림의 SNS 주제에 대한 Lambda의 게시를 허용하는 AWS IAM 정책 생성

참고: 이 정책은 Amazon CloudWatch Logs에 대한 Lambda의 쓰기도 허용합니다.

1.    IAM 콘솔을 엽니다.

2.    탐색 창에서 [Policies]를 선택한 다음 [Create policy]를 선택합니다.

3.    [JSON] 보기를 선택합니다. 그런 다음 다음 정책을 복사하고 붙여 넣습니다.
참고: {SNS topic ARN for email alerts}를 이메일 알림에 대해 생성한 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]를 선택합니다.

Lambda의 IAM 역할에 IAM 정책 연결

1.    IAM 콘솔을 엽니다.

2.    탐색 창에서 [Roles]를 선택한 다음 [Create role]을 선택합니다.

3.    [Select type of trusted entity] 아래에서 [AWS service]를 선택합니다.

4.    [Choose the service that will use this role] 아래에서 [Lambda]를 선택합니다.

5.    [Next: Permissions]를 선택합니다.

6.    검색 상자에 생성한 정책 이름을 입력합니다. 그런 다음 정책을 선택합니다.

7.    [Next: Review]를 선택합니다.

8.    [Role name]에 역할 이름을 입력합니다.

9.    [Create role]을 선택합니다.

Lambda 함수 생성 및 이전에 생성한 IAM 역할 할당

1.    AWS Lambda 콘솔을 엽니다.

2.    [Create function]을 선택합니다.

3.   [Author from scratch]를 선택합니다.

4.    [Name]에 Lambda 함수의 이름을 입력합니다.

5.    [Runtime]에서 [Node.js 4.3]을 선택합니다.

6.    [Role]에서 [Choose an existing role]을 선택합니다.

7.    [Existing role]에서 이전에 생성한 IAM 역할을 선택합니다.

8.    [Create function]을 선택합니다.

Lambda 함수에 알림을 제공하는 두 번째 SNS 주제 및 구독 생성

1.    Amazon SNS 콘솔을 엽니다.

2.    탐색 창에서 [Topics]를 선택합니다. 그런 다음 [Create new topic]을 선택합니다.

3.    [Topic name]에 주제 이름을 입력합니다.

4.    [Display name]에 표시 이름을 입력합니다.

5.    [Create topic]을 선택합니다.

6.    리소스 목록에서 주제를 선택합니다. 그런 다음 [Actions, Subscribe to topic]을 선택합니다.

7.    [Protocol]에서 AWS Lambda를 선택합니다.

8.    [Endpoint]에서 이전에 생성한 Lambda 함수를 선택합니다.

9.    [Create subscription]을 선택합니다.

ROLLBACK_IN_PROGRESS 알림이 발생할 때 이메일 알림에 대한 SNS 주제에 게시하는 스크립트로 Lambda 함수 업데이트

1.    이전에 생성한 Lambda 함수를 엽니다.

2.    [Function code] 보기에서 코드 섹션을 다음 스크립트로 바꿉니다.
참고: {SNS topic ARN for email alerts}를 이메일 알림에 대해 생성한 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] 보기 위)의 [Add triggers]에서 [SNS]를 선택합니다.

4.    [Configure triggers]에서 [ SNS topic]에 대해 Lambda 함수에 알림을 제공하기 위해 생성한 SNS 주제를 선택합니다.

5.    [Add]를 선택합니다.

6.  [Save]를 선택합니다.

Lambda 함수에 알림을 제공하는 SNS 주제로 모든 알림을 전송하도록 CloudFormation 스택 설정

AWS CloudFormation 콘솔에서 스택을 생성하는 경우 다음 단계를 수행하십시오.

1.    [Options]에서 [Advanced]를 확장합니다.

2.    [Notification options]에서 [Existing Amazon SNS topic]을 선택합니다.

3.    Lambda 함수에 알림을 제공하기 위해 생성한 SNS 주제를 선택합니다.

4.    스택 생성 단계를 계속합니다.

AWS CLI(AWS 명령줄 인터페이스)를 사용하여 스택을 생성하는 경우 --notification-arns 명령을 사용하여 Lambda 함수에 알림을 전송하는 SNS 주제에 알림을 전송합니다. SNS 주제의 ARN을 값으로 입력합니다.


페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시된 날짜: 2017년 7월 3일

업데이트된 날짜: 2018년 5월 17일