Amazon CloudWatch 경보를 Microsoft Teams에 게시했습니다.

Amazon Lambda의 blueprint에 "cloudwatch-alarm-to-slack"이라는 것이 있었기 때문에,
이를 약간 개선하여 CloudWatch 경보를 Microsoft Teams에 게시했습니다.

이런 이미지입니다.


SNS 주제 만들기



먼저 SNS 주제를 만듭니다.


CloudWatch 알람 만들기



그런 다음 CloudWatch 알람을 생성합니다.
무엇이든 좋기 때문에 이번에는 EC2 CPU 사용률 알람을 만들었습니다.


Microsoft Teams 커넥터 만들기



커넥터를 추가하려면 채널 이름 옆의 다른 옵션 아이콘 …
클릭한 다음 커넥터를 클릭합니다.


Incomming Webhook을 추가합니다.


커넥터 이름을 입력합니다.
이미지를 설정하면 메시지의 게시자가 알기 쉽습니다.


만들기 버튼을 누르면 다음과 같이 Webhook URL이 표시되므로 복사해 둡니다.


AWS KMS로 Webhook URL 암호화



Microsoft Teams Incomming Webhook을 만들 때 생성된 Webhook URL
AWS KMS(Key Management Service)로 암호화합니다.

AWS KMS에서 마스터 키 생성



암호화할 마스터 키를 만듭니다.


별칭을 입력합니다.


만들 수 있었습니다.


AWS CLI로 Webhook URL 암호화



암호화는 AWS CLI에서 수행됩니다.
설치되어 있지 않은 경우는 여기 로부터 취득할 수 있습니다.

마스터 키의 별칭 이름을 지정하여 Webhook URL을 암호화합니다.

명령 형식은 다음과 같습니다.
aws kms encrypt --key-id alias/<作成したエイリアス名> --plaintext="<WebhookURL>"

<작성한 별칭 이름>과 을 바꿉니다.
다만, 의 선두의 https://는 제거합니다.
그렇지 않으면 오류가 발생합니다.
나는 여기에서 빠졌습니다.

예)
AWSCLI>aws kms encrypt --key-id alias/WebhookURL-MsTeams
--plaintext="outlook.office365.com/webhook/xxxx/IncomingWebhook/xxxxxx"
{
    "KeyId": "arn:aws:kms:us-east-1:xxxx:key/xxxxxxx",
    "CiphertextBlob": "〇〇〇〇〇〇"
}

출력 된 "CiphertextBlob"의 값이 "암호화 된 Webhook URL"이므로,
반드시 삼가합시다.
※ 잊어버리면 나중에 볼 수 없으므로 다시 암호화가 필요합니다.

Amazon Lambda 생성



Select blueprint 화면에서 cloudwatch-alarm-to-slack-python을 선택합니다.


트리거는 SNS이며 주제는 처음에 만든 것을 선택합니다.


코드를 편집합니다.
slack channel 은 불필요하므로, 다음의 선택된 행은 삭제합니다.


나중에 slack에 대한 메시지와 Microsoft Teams에 대한 메시지는 형식이 다르므로
그 부분도 변경합니다.

변경 전
    slack_message = {
        'channel': SLACK_CHANNEL,
        'text': "%s state is now %s: %s" % (alarm_name, new_state, reason)
    }

    req = Request(HOOK_URL, json.dumps(slack_message))

변경 후
    notification_message = {
        'title': "CloudWatchからのお知らせ",
        'text': "%s state is now %s: %s" % (alarm_name, new_state, reason)
    }

    req = Request(HOOK_URL, json.dumps(notification_message))

Lambda Function 완성


트리거를 활성화합니다.


확인해보기



어떻게 하면 확인할 수 있는지 고민했지만 Amazon CloudWatch 문서에 실렸습니다.

AWS CLI에서 알람 상태를 ALARM으로 변경합니다.
AWSCLI>aws cloudwatch set-alarm-state --alarm-name Jenkins_CPU-70% --state-reason "test" --state-value ALARM

제대로 게시되었습니다.


요약



이번에는 blueprint를 조금 만지기만 하면 Microsoft Teams에 게시할 수 있었습니다.
간단하게 실현할 수 있으므로, 여러가지 일에 사용해 갈 수 있을까라고 생각했습니다.

slack이나 Microsoft Teams 등에 정보를 집계하면 매우 편리하네요.

좋은 웹페이지 즐겨찾기