概要
ECSのdeployの開始と終了を通知する仕組み。
Amazon ECS のイベント内にデプロイ完了通知があるのでこちらを拾って通知する。
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ecs_cwe_events.html
通知の流れ
EventBridge→Lambda→slack(webhook)の流れ。
前提
予め通知したいslackのwenhookURLの取得をしておく。
Lambda
まず、Lambda関数の作成。以下で作成する。
ラインタイム:Python3.8
タイムアウト値:1分
メモリ128M
以下code
#!/usr/bin/python
# -*- coding: utf-8 -*-
import boto3
import urllib.request,urllib.parse
import json
def lambda_handler(event, context):
msgdata = event['detail']['eventName']
resources = event['resources'][0]
reason = event['detail']['reason']
client = boto3.client('ecs')
fields = []
fields.append({
'title': resources,
'value': msgdata,
'short': True,
})
data = {
'attachments': [{
'pretext': reason,
'color': 'good',
'fields': fields,
}]
}
# Slack通知
url = 'https://hooks.slack.com/xxxxxxx'
req = urllib.request.Request(url, json.dumps(data).encode(), {'Content-Type': 'application/json'})
res = urllib.request.urlopen(req)
res.read()
res.close
urlにはslackのwebhookを指定。
続いてEventBridgeを作成する。
EventBridge
全ての通知から、 ECS 関連の JSON のみをフィルターして抜き出す。
eventNameにデプロイステータスが入ってくる
ステータスは以下2つ
開始
SERVICE_DEPLOYMENT_IN_PROGRESS
完了
SERVICE_DEPLOYMENT_COMPLETED
パターンの定義で以下のルールを作成
カスタムパターンを選ぶ。
以下の例はdeploy完了のステータスを定義。ステータスごとにルールを作成する。
{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Deployment State Change"
],
"resources": [
"arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxxxx:service/clustername/hoge-service",
"arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxxxx:service/clustername/hoge01-service",
"arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxxxx:service/clustername/hgoe02-service",
"arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxxxx:service/clustername/hoge03-service"
],
"detail": {
"eventName": ["SERVICE_DEPLOYMENT_COMPLETED"]
}
}
ターゲットを選択で上記で作成したLambda関数を選択する。
slackに通知するlambdaを指定する。
以下のように通知される。