안녕하세요~~ 차니에요!
오늘은 지난 Slack에 이어서 Teams로 메시지 보내는 법을 포스팅하겠습니다~!
1. MS Teams Incoming Web Hook 추가
Teams에 접속 후 웹훅을 추가 할 채널에 마우스 우클릭 한 뒤 Connectors로 진입합니다.
Incoming Webhook 항목을 추가해줍시다!
마찬가지로 web hook URL을 기억하시면 됩니다.
2. AWS SNS
AWS Simple Notification Service로 이동합니다.
좌측 "주제"에서 "주제 생성" 클릭해주세요.
표준 항목으로 이름 설정하고 생성해주세요.
3. AWS Lambda
AWS Lambda 서비스에 접속 후 "함수 생성"을 클릭합니다.
함수 이름을 설정하고 런타임은 Python으로 설정하였습니다.
그리고 AWS IAM 서비스로 이동하여 역할 항목으로 진입합니다.
인라인 정책 추가를 클릭합니다.
서비스는 CodeCommit을 선택하고 리소스는 모든 리소스를 선택해주었습니다.
이 작업을 해주는 이유는 Lambda에서 소스가 실행될 때 CodeCommit에 대한 권한이 없으면
Permission Denined으로 코드가 정상적으로 실행되지 않기 때문입니다.
다시 AWS Lambda 서비스로 이동합니다.
2번 항목에서 추가한 SNS 주제를 선택하여 트리거를 추가해줍니다.
이 포스팅 기준에서는 FirstRepo 리포지토리의 main 브랜치에 push 될 때 캐치업 하도록 설정되어있습니다.
추가로 사용자 지정 데이터에는 1번에서 저장해둔 웹 후크 URL 을 입력하여 트리거를 추가합니다.
이제 코드 항목에 하기 코드를 입력한 뒤 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 서비스로 이동합니다.
아까 설정한 트리거가 보입니다. 클릭해서 들어가주세요.
서비스 세부 정보에 사용할 서비스를 Amazon SNS를 선택하고 2번에서 생성한 SNS 주제를 선택해주세요.
사용자 지정 데이터에는 1번에서 저장한 웹훅 URL을 입력해주세요.
"트리거 테스트"를 클릭하면 트리거가 강제 발생하여 팀즈로 메시지를 보내 줄 것 입니다.