4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ECS deploy通知

Last updated at Posted at 2021-06-28

概要

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

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?