CodeBuild 실행 결과를 슬랙에 알립니다.
10104 단어 람다CloudWatchCodeBuild슬랙AWS
소개
Globis Advent Calendar 10일째는 당사의 엔지니어 팀 을 지지하는 인프라 기술을 전하겠습니다.
개발 속도를 더욱 촉진하기 위해 Blue Green Deployment, Infrastructure as Code
이번에는 당사에서 실운용하고 있는 ChatOps의 예로서 ChatOps의 실행 결과를 CodeBuild에 통지하는 방법을 가능한 범위에서 구체적으로 알려드리겠습니다.
설정 방법
AWS Lambda 설정
슬랙
코드
import os
import json
import urllib.request
URL = os.environ['WEBHOOK_URL']
def send_slack(obj): ## slackに通知
method = "POST"
headers = {"Content-Type" : "application/json"}
js = json.dumps(obj).encode("utf-8")
request = urllib.request.Request(URL, data=js, method=method, headers=headers)
with urllib.request.urlopen(request) as response:
response_body = response.read().decode("utf-8")
def check_status(status):
fail = False
if status == 'IN_PROGRESS':
color = '#008000' ## green
elif status == 'SUCCEEDED':
color = '#00BFFF' ## deepskyblue
else:
color = '#FF00FF' ## magenta
fail = True
return color, fail
def parse_event(event): ## cloudwatch event から渡された event(dict型)をパース、slackに渡すobjectを生成。
detail = event['detail']
status = detail['build-status']
initiator = detail['additional-information']['initiator']
log = detail.get('additional-information', {}).get('logs', {}).get('deep-link', 'Not Exist')
color, fail = check_status(status)
fields = [{'title': 'Initiator', 'value': initiator, 'short': False},
{'title': 'Status', 'value': status, 'short': False},
{'title': 'LogLink', 'value': log, 'short': False}]
obj = {'attachments': [{'color': color, 'fields': fields}]}
# if fail == True: ## Fail時にチャンネルメンション飛ばしたい時はコメントを外す。
# obj['attachments'][0]['text'] = '<!channel>'
return obj
def lambda_handler(event, context): ## lambdaから最初にcallされる関数。
obj = parse_event(event)
send_slack(obj)
return
환경 변수 설정
CloudWatch Event 설정
슬랙의 알림 결과
AWS Lambda 설정
슬랙
코드
import os
import json
import urllib.request
URL = os.environ['WEBHOOK_URL']
def send_slack(obj): ## slackに通知
method = "POST"
headers = {"Content-Type" : "application/json"}
js = json.dumps(obj).encode("utf-8")
request = urllib.request.Request(URL, data=js, method=method, headers=headers)
with urllib.request.urlopen(request) as response:
response_body = response.read().decode("utf-8")
def check_status(status):
fail = False
if status == 'IN_PROGRESS':
color = '#008000' ## green
elif status == 'SUCCEEDED':
color = '#00BFFF' ## deepskyblue
else:
color = '#FF00FF' ## magenta
fail = True
return color, fail
def parse_event(event): ## cloudwatch event から渡された event(dict型)をパース、slackに渡すobjectを生成。
detail = event['detail']
status = detail['build-status']
initiator = detail['additional-information']['initiator']
log = detail.get('additional-information', {}).get('logs', {}).get('deep-link', 'Not Exist')
color, fail = check_status(status)
fields = [{'title': 'Initiator', 'value': initiator, 'short': False},
{'title': 'Status', 'value': status, 'short': False},
{'title': 'LogLink', 'value': log, 'short': False}]
obj = {'attachments': [{'color': color, 'fields': fields}]}
# if fail == True: ## Fail時にチャンネルメンション飛ばしたい時はコメントを外す。
# obj['attachments'][0]['text'] = '<!channel>'
return obj
def lambda_handler(event, context): ## lambdaから最初にcallされる関数。
obj = parse_event(event)
send_slack(obj)
return
환경 변수 설정
CloudWatch Event 설정
슬랙의 알림 결과
운영 사례 소개
결론
어땠습니까? 파이썬 초보자 (나)도 ChatOps에 기여할 수 있습니다.
글로비스에서는 를 모집하고 있습니다!
인프라의 운영 담당이지만 수작업을 자동화하고 싶은 분, 개발자이지만 인프라를 포함하여 코드로 관리하고 싶은 분, 함께 이상적인 인프라를 만들어 보지 않겠습니까?
Reference
이 문제에 관하여(CodeBuild 실행 결과를 슬랙에 알립니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/h-matsuura/items/4a9dc9a901141057554b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(CodeBuild 실행 결과를 슬랙에 알립니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/h-matsuura/items/4a9dc9a901141057554b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)