0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

ECS deploy通知

概要

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を指定する。
以下のように通知される。
スクリーンショット 2021-06-21 11.11.15.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?