[AWS] Lambda를 활용한 메시지 자동 전달 - MS Teams편

안녕하세요~~ 차니에요!
오늘은 지난 Slack에 이어서 Teams로 메시지 보내는 법을 포스팅하겠습니다~!

etc-image-0
미리보기

 

1. MS Teams Incoming Web Hook 추가

etc-image-1

Teams에 접속 후 웹훅을 추가 할 채널에 마우스 우클릭 한 뒤 Connectors로 진입합니다.

etc-image-2

Incoming Webhook 항목을 추가해줍시다!

etc-image-3

마찬가지로 web hook URL을 기억하시면 됩니다.

2. AWS SNS

etc-image-4

AWS Simple Notification Service로 이동합니다.

etc-image-5

좌측 "주제"에서 "주제 생성" 클릭해주세요.

etc-image-6

표준 항목으로 이름 설정하고 생성해주세요.

3. AWS Lambda

etc-image-7

AWS Lambda 서비스에 접속 후 "함수 생성"을 클릭합니다.

etc-image-8

함수 이름을 설정하고 런타임은 Python으로 설정하였습니다.

etc-image-9

그리고 AWS IAM 서비스로 이동하여 역할 항목으로 진입합니다.

etc-image-10

인라인 정책 추가를 클릭합니다.

etc-image-11

서비스는 CodeCommit을 선택하고 리소스는 모든 리소스를 선택해주었습니다.

이 작업을 해주는 이유는 Lambda에서 소스가 실행될 때 CodeCommit에 대한 권한이 없으면
Permission Denined으로 코드가 정상적으로 실행되지 않기 때문입니다.

다시 AWS Lambda 서비스로 이동합니다.

etc-image-12

2번 항목에서 추가한 SNS 주제를 선택하여 트리거를 추가해줍니다.

etc-image-13

이 포스팅 기준에서는 FirstRepo 리포지토리의 main 브랜치에 push 될 때 캐치업 하도록 설정되어있습니다.
추가로 사용자 지정 데이터에는 1번에서 저장해둔 웹 후크 URL 을 입력하여 트리거를 추가합니다.

etc-image-14

이제 코드 항목에 하기 코드를 입력한 뒤 Deploy(적용) 합니다.
코드에 대한 내용은 어렵지 않으니 쭉 훑어보시면 이해가 될 거라고 봅니다.
Teams Message Formatting을 참고 하시어 일정 수준 커스텀 가능하다는 점 알려드립니다.

더보기
#!/usr/bin/python3.8 import urllib3 import json import boto3 from datetime import datetime http = urllib3.PoolManager() codecommit = boto3.client('codecommit') def lambda_handler(event, context): records = json.loads(event['Records'][0]['Sns']['Message'])['Records'][0] webhook_url = records['customData'] repository = records['eventSourceARN'].split(':')[5] commitId = records['codecommit']['references'][0]['commit'] branch = records['codecommit']['references'][0]['ref'] try: commit = codecommit.get_commit(repositoryName=repository, commitId=commitId)['commit'] commit_author_name = commit['author']['name'] commit_author_email = commit['author']['email'] commit_date = commit['author']['date'] commit_msg = commit['message'] res_text = "Author: " + commit_author_name + " <" + commit_author_email + "> \nBranch: " + branch + " \nCommitMessage: " + commit_msg + " \nDate: " + commit_date response = { "@context": "https://schema.org/extensions", "@type": "MessageCard", "themeColor": "0072C6", "title": "The core has been updated.", "text": res_text } encoded_msg = json.dumps(response).encode('utf-8') http.request('POST', webhook_url, body = encoded_msg) except Exception as e: encoded_msg = json.dumps({"text": str(e)}).encode('utf-8') http.request('POST', webhook_url, body = encoded_msg) raise e

2번 항목에서 추가한 SNS 주제를 선택하여 트리거를 추가해줍니다.

이제 모든 설정이 완료되었으니 테스트를 해보도록 합시다.
AWS CodeCommit 서비스로 이동합니다.

etc-image-15

아까 설정한 트리거가 보입니다. 클릭해서 들어가주세요.

etc-image-16

서비스 세부 정보에 사용할 서비스를 Amazon SNS를 선택하고 2번에서 생성한 SNS 주제를 선택해주세요.
사용자 지정 데이터에는 1번에서 저장한 웹훅 URL을 입력해주세요.
"트리거 테스트"를 클릭하면 트리거가 강제 발생하여 팀즈로 메시지를 보내 줄 것 입니다.

차니님의 😊
글이 좋았다면 응원을 보내주세요!