CodeBuild 실행 결과를 슬랙에 알립니다.

소개



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 Athena 테이블에서 쿼리를 실행하고 중간 테이블을 생성하는 ETL 처리 일괄 처리
  • Ruby on Rails 응용 프로그램 배포 중 db:migrate 처리
  • 최근에는 CodeBuild를 VPC 내에서 실행할 수 있게 되었기 때문에, 이용할 수 있는 폭이 넓어지고 있습니다!

  • 결론



    어땠습니까? 파이썬 초보자 (나)도 ChatOps에 기여할 수 있습니다.
    글로비스에서는 를 모집하고 있습니다!
    인프라의 운영 담당이지만 수작업을 자동화하고 싶은 분, 개발자이지만 인프라를 포함하여 코드로 관리하고 싶은 분, 함께 이상적인 인프라를 만들어 보지 않겠습니까?

    좋은 웹페이지 즐겨찾기