CodePipeline 실행 결과를 AWS ChatBot에서 Slack에 알리는 Cloudformation

AWS ChatBot에서 Slack에 쉽게 알림을 받게 되었기 때문에 역시 CodePipeline의 실행 결과를 Slack에 알리고 싶네요.

그래서 CodePipeline의 실행 결과를 통지하는 ChatBot을 가능한 한 CloudFormation으로 구성하고 싶습니다.

작업 공간 설정



가능한 한 CloudFormation에서. 왜냐하면 첫 번째 작업 공간의 클라이언트 설정은 CloudFormation을 지원하지 않기 때문입니다.
Slack에의 액세스권의 허가 스텝등이 있으므로 여기는 어쩔 수 없네요.
ChatBot의 클라이언트 설정은 콘솔에서 수행합니다.

참고 : AWS Chatbot을 사용하여 Slack에서 AWS 개발자 도구 알림을 받는 방법

위 문서의 2단계에서 Slack 권한 요청을 허용하고 클라이언트를 설정하는 부분만 완료하면 나머지 작업은 CloudFormation에서 작성할 수 있습니다.

ChatBot 채널 설정



ChatBot 클라이언트는 Slack 작업 공간과 일대일 관계에 있습니다.
채널은 그 안에 알림을 게시하는 슬랙 채널과 일대일에 해당합니다.

Slack의 채널 ID와 ChatBot의 작업 공간 ID를 인수로 취하는 다음 CFn에서 ChatBot 채널을 구성합니다.

chatbot-channel.yml
Parameters:
  NotifySlackChannel:
    Type: String
    Description: Slack Channel ID
  NotifyChatbotWorkspaceId:
    Type: String
    Description: Chatbot Workspace ID
Resources:
  PipelineNotificationChatbotRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Sub service-role-for-pipeline-notification-chatbot
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          -
            Effect: Allow
            Principal:
              Service:
                - chatbot.amazonaws.com
            Action:
              - sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/CloudWatchReadOnlyAccess
  PipelineNotificationChatbot:
    Type: AWS::Chatbot::SlackChannelConfiguration
    Properties:
      ConfigurationName: pipeline-notification-chatbot
      IamRoleArn: !GetAtt PipelineNotificationChatbotRole.Arn
      LoggingLevel: ERROR
      SlackChannelId: !Ref NotifySlackChannel
      SlackWorkspaceId: !Ref NotifyChatbotWorkspaceId

슬랙 채널 ID



채널 목록에서 해당 채널을 마우스 오른쪽 버튼으로 클릭하고 [기타 옵션] → [링크 복사]하여 편집기 등에 붙여넣은 URL 끝에 있는 문자열입니다.


https://example.slack.com/archives/${SlackChannelID} #<-ここ

작업 공간 ID



ChatBot의 작업 공간은 콘솔에서 ChatBot의 구성된 클라이언트를 열고 해당 작업 공간을 열어 확인할 수 있습니다.



CodePipeline 알림 만들기



DeveloperTools 관련 서비스의 통지를 작성하려면 CodeStartNotifications의 NotificationRule을 사용해 구축합니다.

참고 : CloudFormation - AWS::CodeStarNotifications::NotificationRule

빌드할 템플릿은 다음과 같습니다.

pipeline-notification-rule.yml
Parameters:
  PipelineName:
    Type: String
    Description: Target Pipeline Name
  ChatBotArn:
    Type: String
    Description: AWS ChatBot ARN
Resources:
  PipelineNotificationRule:
    Type: AWS::CodeStarNotifications::NotificationRule
    Properties:
      Name: pipeline-notification-rule
      DetailType: FULL
      Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref PipelineName ] ]
      EventTypeIds:
        - codepipeline-pipeline-pipeline-execution-succeeded
        - codepipeline-pipeline-pipeline-execution-failed
        - codepipeline-pipeline-pipeline-execution-canceled
      Targets:
        -
          TargetType: AWSChatbotSlack
          TargetAddress: !Ref ChatBotArn

EventTypeIds



통지할 이벤트 유형의 ID를 목록으로 지정합니다.
지원되는 ID 목록은 문서로 찾을 수 없지만 AWS CLI에서 검색할 수 있습니다.
aws codestar-notifications list-event-types --filters Name=SERVICE_NAME,Value=CodePipeline

위의 명령을 실행하면 CodePipeline에서 지원하는 이벤트 유형 목록을 얻을 수 있습니다.
{
    "EventTypes": [
        {
            "EventTypeId": "codepipeline-pipeline-action-execution-succeeded",
            "ServiceName": "CodePipeline",
            "EventTypeName": "Action execution: Succeeded",
            "ResourceType": "Pipeline"
        },
        {
            "EventTypeId": "codepipeline-pipeline-action-execution-failed",
            "ServiceName": "CodePipeline",
            "EventTypeName": "Action execution: Failed",
            "ResourceType": "Pipeline"
        },
        {
            "EventTypeId": "codepipeline-pipeline-stage-execution-started",
            "ServiceName": "CodePipeline",
            "EventTypeName": "Stage execution: Started",
            "ResourceType": "Pipeline"
        },
        ...
    ]
}

이 중에서 알림을 받으려는 이벤트를 선택하고 EventTypeIds로 지정합니다.

TargetType



TargetType에서 지정할 수 있는 값은 현재 다음 두 가지와 같습니다.


목표
Value


Amazon SNS 주제
SNS

AWS Chatbot client
AWSChatbotSlack


지정 가능한 값 목록을 찾을 수 없습니다.
현재는 다음 URL 샘플에서만 확인하고 있습니다.
참고 : AWS User Guide - View Notification Rule Targets

실행



지금까지 CloudFormation을 배포하면 CodePipeline을 실행한 후 알림이 Slack에 도착하게 됩니다.



통지의 Lambda 코드등을 쓰지 않고 Pipeline 결과가 Slack에 통지되는 것은 드문군요!

좋은 웹페이지 즐겨찾기