AWS CloudFormation 스택이 ROLLBACK_IN_PROGRESS 상태가 될 경우 이메일 알림을 받으려면 어떻게 해야 합니까?
스택 생성 시 내 AWS CloudFormation 스택이 ROLLBACK_IN_PROGRESS 상태로 전환될 때 이메일 알림을 수신하고 싶습니다.
간략한 설명
해결 방법 섹션의 단계를 완료하면 알림이 다음과 같은 방식으로 작동합니다.
- AWS CloudFormation 스택은 AWS Lambda 함수에 알림을 전달하는 Amazon SNS(Amazon Simple Notification Service) 주제에 모든 알림을 전송합니다.
- Lambda 함수는 아림을 구분 분석하고 "ROLLBACK_IN_PROGRESS" 알림을 이메일 알림용으로 구성된 두 번째 Amazon SNS 주제에 전송합니다.
- 이 두 번째 SNS 주제는 "ROLLBACK_IN_PROGRESS" 메시지와 관련하여 구독자에게 이메일을 전송합니다.
해결 방법
이메일 알림을 위한 SNS 주제 및 구독 생성
1. Amazon SNS 콘솔을 엽니다.
2. 탐색 창에서 [주제]를 선택합니다.
참고: 기존 주제를 사용하려면 리소스 목록에서 해당 주제를 선택한 다음 7단계로 건너뜁니다.
3. 주제 생성을 선택하십시오.
4. [이름]에 주제 이름을 입력합니다.
5. [표시 이름]에 표시 이름을 입력합니다.
6. [주제 생성]을 선택합니다.
7. 나중에 사용하기 위해 주제의 Amazon 리소스 이름(ARN)을 기록해 둡니다.
8. [구독 생성]을 선택합니다.
9. [주제 ARN]에 7단계에서 기록한 SNS 주제 ARN을 선택합니다.
10. [프로토콜]에서 [이메일]을 선택합니다.
11. [엔드포인트]에 이메일 주소를 입력합니다.
12. [구독 생성(Create subscription)]을 선택합니다.
참고: 11단계에서 입력한 이메일 주소로부터 Amazon SNS의 구독 확인 이메일을 수신하게 됩니다.
13. 확인 이메일 메시지에서 [구독 확인(Confirm subscription)]을 선택합니다.
브라우저에서 구독 확인 메시지를 확인할 수 있습니다.
Lambda가 이메일 알림을 위해 SNS 주제에 게시할 수 있도록 허용하는 AWS Identity and Access Management(IAM) 정책 생성
참고: 이 정책은 Lambda가 Amazon CloudWatch Logs에 로그를 작성하는 것도 허용합니다.
1. IAM 콘솔을 엽니다.
2. 탐색 창에서 정책을 선택합니다.
3. 정책 생성을 선택합니다.
4. [JSON] 탭을 선택한 다음 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:*:*:*" } ] }
참고: awsExampleSNSTopicARN을 이메일 알림을 위해 생성했던 SNS 주제에 대한 ARN으로 바꾸십시오.
5. [정책 검토]를 선택합니다.
6. [이름]에 정책 이름을 입력합니다.
7. [정책 생성]을 선택합니다.
Lambda용 IAM 정책에 IAM 정책 연결
1. IAM 콘솔을 엽니다.
2. 탐색 창에서 역할을 선택합니다.
3. [역할 생성(Create role)]을 선택합니다.
4. [신뢰할 수 있는 유형의 개체 선택(Select type of trusted entity)] 섹션에서 [AWS 서비스(AWS service)]를 선택합니다.
5. [이 역할을 사용할 서비스 선택(Choose the service that will use this role)] 섹션에서 [Lambda]를 선택합니다.
6. [다음: 권한]을 선택합니다.
7. 검색 모음에서 앞에서 생성한 정책의 이름을 입력하고 해당 정책을 선택합니다.
8. [다음: 태그]를 선택한 다음 IAM 태그를 작성합니다(선택 사항).
9. [다음: 검토]를 선택합니다.
10. [역할 이름]에 역할 이름을 입력합니다.
11. [역할 생성(Create role)]을 선택합니다.
Lambda 함수를 생성하고 사용자가 만든 IAM 역할 지정
1. Lambda 콘솔을 엽니다.
2. [함수 생성(Create function)]을 선택합니다.
3. [새로 작성]을 선택합니다.
4. [이름]에 Lambda 함수의 이름을 입력합니다.
5. [런타임]에서 [Node.js 10.x]를 선택합니다.
6. [실행 역할(Execution role)]에서 [기존 역할 사용(Use an existing role)]을 선택합니다.
7. [기존 역할]에서 앞에서 생성한 IAM 역할을 선택합니다.
8. [함수 생성(Create function)]을 선택합니다.
Lambda 함수에 알림을 전달할 두 번째 SNS 주제 및 구독 생성
1. Amazon SNS 콘솔을 엽니다.
2. 탐색 창에서 [주제]를 선택합니다.
3. 주제 생성을 선택하십시오.
4. [이름]에 주제 이름을 입력합니다.
5. [표시 이름]에 표시 이름을 입력합니다.
6. [주제 생성]을 선택합니다.
7. 나중에 사용하기 위해 주제의 ARN을 기록해 둡니다.
8. [구독 생성]을 선택합니다.
9. [주제 ARN]에 7단계에서 기록한 SNS 주제 ARN을 선택합니다.
10. [프로토콜]에서 [AWS Lambda]를 선택합니다.
11. [엔드포인트]에서 앞서 생성한 Lambda 함수를 선택합니다.
12. [구독 생성(Create subscription)]을 선택합니다.
SNS 주제에 게시하는 스크립트로 Lambda 함수 업데이트
1. Lambda 콘솔을 엽니다.
2. 탐색 창에서 [함수]를 선택한 다음 앞에서 생성한 함수를 선택합니다.
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); }); }
참고: awsExampleSNSTopicARN을 이메일 알림을 위해 생성했던 SNS 주제에 대한 ARN으로 바꾸십시오.
4. [Designer] 보기의 [트리거 추가(Add triggers)] 섹션에서 [SNS]를 선택합니다.
5. [트리거 구성(Configure triggers)] 섹션의 [SNS 주제(SNS topic)]에서 Lambda 함수에 알림을 전달하기 위해 생성한 SNS 주제를 선택합니다.
6. [추가]를 선택합니다.
7. [저장(Save)]을 선택합니다.
Lambda 함수에 알림을 전달하는 SNS 주제에 모든 알림을 전송하도록 AWS CloudFormation 스택 설정
1. AWS CloudFormation 콘솔을 열고 설정 마법사의 단계에 따라 스택을 생성합니다.
2. [알림 옵션]에서 [기존 Amazon SNS 주제]를 선택합니다.
3. Lambda 함수에 알림을 전달하기 위해 생성했던 SNS 주제를 선택합니다.
4. 설정 마법사의 단계를 완료하여 스택을 생성합니다.
AWS 명령줄 인터페이스(AWS CLI)를 사용하여 스택을 생성하는 경우 -notification-arns 명령을 사용합니다. 이 명령은 Lambda 함수에 알리는 알림을 SNS 주제로 전송합니다. 그런 다음, SNS 주제의 값을 SNS ARN으로 설정합니다.
관련 정보
관련 콘텐츠
- 질문됨 5년 전lg...
- 질문됨 5년 전lg...
- 질문됨 4달 전lg...
- 질문됨 2달 전lg...
- 질문됨 2년 전lg...
- AWS 공식업데이트됨 2달 전
- AWS 공식업데이트됨 일 년 전