CloudWatch 이벤트 규칙에 대한 기본 Amazon SNS 이메일 제목 줄 “AWS 알림 메시지”를 변경하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 1월 6일

여러 이벤트 소스가 있는 Amazon CloudWatch 이벤트 규칙에서 이메일 알림을 수신하도록 Amazon Simple Notification Service(Amazon SNS)를 구성했습니다. 알림을 트리거하는 이벤트를 기반으로 기본 SNS 이메일 제목 줄 “AWS 알림 메시지” 및 본문 복사본을 사용자 지정하려면 어떻게 해야 합니까?

간략한 설명

현재 Amazon SNS 콘솔을 사용하여 특정 CloudWatch 이벤트 규칙에 따라 Amazon SNS 이메일의 메시지를 사용자 지정할 수 있는 방법은 없습니다.

대신 Amazon SNS 주제가 아닌 Lambda 함수를 CloudWatch 이벤트 규칙의 타겟으로 사용합니다. 그런 다음 CloudWatch 이벤트 규칙으로 트리거할 때 Amazon SNS 주제에 사용자 지정 메시지를 게시하도록 Lambda 함수를 구성합니다.

로직이 작동하는 방법은 다음과 같습니다.

  1. CloudWatch 이벤트 규칙이 트리거됩니다.
  2. Lambda 함수는 CloudWatch 이벤트 규칙의 페이로드를 사용하여 호출합니다.
  3. 함수는 Amazon SNS 게시 API를 호출합니다.
  4. Amazon SNS는 사용자 지정 제목 및/또는 메시지가 포함된 이메일 알림을 전송합니다.

해결 방법

참고: AWS 명령줄 인터페이스(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

CloudWatch 이벤트 규칙의 타겟으로 설정된 AWS Lambda 함수를 생성합니다.

자세한 내용은 CloudWatch 이벤트를 사용하여 AWS Lambda 함수 예약을 참조하세요.

중요: Lambda 함수의 실행 역할에 Amazon SNS 주제에 게시할 권한이 있는지 확인하세요. 예를 들어 함수의 실행 역할에 AWS 관리형 정책AWSLambdaBasicExecutionRole이 있는 경우 AmazonSNSFullAccess 정책을 실행 역할에 연결해야 합니다.

Lambda 함수가 CloudWatch 이벤트 규칙의 타겟으로 설정되면 다음 리소스 기반 정책이 함수에 자동으로 추가됩니다.

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "AWSEvents_CWRule_CustomEmailSubject_Id196649187337",
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "<Lambda-function-ARN>",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "<Cloudwatch-event-rule-ARN>"
        }
      }
    }
  ]
}

Amazon SNS 주제에 사용자 지정 이메일 제목 또는 사용자 지정 메시지를 게시하도록 Lambda 함수 구성

자세한 내용은 게시(API 참조)를 참조하세요.

중요: 다음 코드 조각은 참조용입니다. 테스트 전에 프로덕션 환경에서 코드 조각을 사용해서는 안 됩니다.

예제 Python 게시 API 호출

import boto3
import json
sns_arn = "<SNS_TOPC_ARN>"

def lambda_handler(event, context):
    client = boto3.client("sns")
    resp = client.publish(TargetArn=sns_arn, Message=json.dumps(event), Subject="<CUSTOM_SUBJECT>")
예제 JavaScript/NodeJS 게시 API 호출
const AWS = require('aws-sdk');

exports.handler = (event, context, callback) => {
    let sns = new AWS.SNS();
    sns.publish({
    TopicArn: '<SNS_TOPIC_ARN>',
    Message: JSON.stringify(event), 
    Subject: '<CUSTOM_SUBJECT>'
    }, function(error, data){
       if(error) console.log(error, error.stack);
       callback(error, data);
     });
};

중요: <SNS_TOPIC_ARN><CUSTOM_SUBJECT>에 대한 값을 사용자 고유의 입력으로 바꿨는지 확인합니다.

이렇게 하면 Lambda 함수를 사용하여 CloudWatch 이벤트 규칙의 이메일 제목이나 메시지를 사용자 지정하고 Amazon SNS 주제에 전달할 수 있습니다.