My __ 노트

AWS PHD 알람 설정 (2) - CloudFormation으로 SNS와 ChatBot을 이용하여 알림 전송 본문

클라우드/AWS(클라우드)

AWS PHD 알람 설정 (2) - CloudFormation으로 SNS와 ChatBot을 이용하여 알림 전송

블루빔 2023. 10. 6. 10:00

계정이 한 두 개일 경우 콘솔에서 직접 설정하여도 무리가 없지만 계정이 수십 개일 경우 반복되는 작업 진행으로 인해 업무 효율이 떨어질 수 있으므로 코드 스택으로 한 번에 설정할 수 있는 방법을 찾았습니다.

해당 글은 CloudFormation으로 SNS와 ChatBot을 이용하여 Slack에 알람을 보내는 방법에 대해 기재하였으며 아키텍처는 아래와 같습니다. 

콘솔에서 직접 설정하는 방법에 대해서는 해당 글을 참고 하시기 바랍니다.
☞ 콘솔에서 설정하기 

 

목차
▶ 필요한 사전 작업
▶ Cloudformation 스택코드 - yaml 형식

필요한 사전 작업

    ⊙ Chatbot에서 채팅 클라이언트 구성을 한 후 생성한 slack workspace에서 WorkSpace ID를 복사해 두어야 합니다.

 

    ⊙  알람을 전송할 슬랙 채널 ID를 복사해 두어야 합니다. 

 

Cloudformation 스택 코드  -  yaml 형식

AWSTemplateFormatVersion: 2010-09-09
Description: SNS Topic for Health Issue Notice
Parameters:
  SlackWorkspaceID:
    Type: String
    Description: Slack Workspace ID for sending notifications
  SlackChannelId:
    Type: String
    Description: Slack Channel ID for sending notifications

slack workspace ID 와 slack 채널 ID 값을 지정할 수 있는 파라미터 코드를 작성합니다. 

 

Resources:
#SNS 주제 생성 
  SnsTopic:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: !Sub health-issue-topic

SNS 주제 생성을 설정합니다. 해당 설정은 콘솔에서 아래와 같은 부분입니다. 

 

 

Resources:
#SNS 주제에 사용될 액세스 정책 설정
  SnsTopicPolicy:
    Type: AWS::SNS::TopicPolicy
    Properties:
      PolicyDocument:
        Statement:
          - Effect: Allow
            Principal:
              Service: events.amazonaws.com
            Action: sns:Publish
            Resource: '*'
      Topics:
        - !Ref SnsTopic

콘솔에서 SNS 주제 생성 시 아래와 같은 액세스 정책이 기본으로 설정되어 있지만 스택으로 생성 시에는 사용할 액세스 정책을 지정해 주어야 합니다. 

 

 

Resources:
#Eventbridge 버스 규칙 생성 
  AWSEventRule:
    Type: AWS::Events::Rule
    Properties:
      State: ENABLED
      EventPattern:
        source:
          - aws.health
      Name: !Sub health-issue-event-rule
      Targets:
        - Id: !Sub health-issue-topic
          Arn: !Ref SnsTopic

EventPattern 은 콘솔에서 아래 이미지와 같이 이벤트 패턴 부분에 대한 설정이며 

Targets 은 콘솔에서 아래 이미지와 같이 대상에 대한 설정입니다. 

 

 

Resources:
#chatbot에 사용될 iam 역할
  ChatbotIamRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Sub chatbot-role
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service: chatbot.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/CloudWatchReadOnlyAccess

chatbot에 사용될 권한에 대한 설정이며 콘솔에서 아래와 같은 부분입니다. 

 

 

Resources:
#chatbot 설정
  ChatbotToSlack:
    Type: AWS::Chatbot::SlackChannelConfiguration
    Properties:
      ConfigurationName: !Sub chatbot-to-slack
      IamRoleArn: !GetAtt ChatbotIamRole.Arn
      SlackWorkspaceId: !Ref SlackWorkspaceID
      SlackChannelId: !Ref SlackChannelId
      SnsTopicArns: 
        - !Ref SnsTopic

slack workspace ID 와 slack channel ID 및 필요한 iam 권한에 대한 값을 지정 후 SNS 주제를 선택하여 chatbot을 설정합니다.

 

위 yaml 코드를 Cloudformation 스택에 올려 한 번에 PHD 알람 설정을 할 수 있으며 리소스 삭제 시에도 스택만 삭제하면 생성된 리소스들이 함께 삭제되는 이점이 있습니다.