Sionの技術ブログ

SREとして日々の学習を書いて行きます。twitterは@sion_cojp

ECSのタスク切り替りを通知させる

本記事は、FOLIOアドベントカレンダーの13日目の記事になります。



f:id:sion_cojp:20181211154702p:plain:w170

ことの始め

f:id:sion_cojp:20181211145831p:plain

なるほど。

つまりALBにぶら下がってるコンテナが、現在のコンテナがなくなって、新しいコンテナだけになったときに通知があれば嬉しいってことですね。

棄却した案: cloudwatchのevent * lambda

ECSからcloudwatch eventにtask変動のトリガー送信して、lambdaでslackに通知させることを考えました。

が、タスクが作成、削除されただけの通知で、どのタイミングで切り替わったかわかりづらかったです。

ecs-update-notify

github.com

ロジックは

  • 起動後、/tmp/ecs-update-notify.pid を生成(終了時に削除される)
  • intervalで設定してる秒数、ECSサービスで保持してるタスクを取得
  • 現在のタスクバージョンと、新しいバージョンのデータを保持
  • 新しいバージョンだけになったタイミングでSlackにPOST
  • 新しいバージョンは現在のバージョンとして保持される

古い(現在の)タスクがECSサービスから存在しなくなれば、ALBからも確実に外されてるので、これで解決します。

このようなconfig.tomlを設定して

$ vim config.toml
interval = 30

[[monitor]]
name = "FooCluster"
aws_profile = "foo"
aws_region = "ap-northeast-1"
incoming_webhook = "https://hooks.slack.com/services/....."

[[monitor]]
name = "BarCluster"
aws_profile = "bar"
aws_region = "ap-northeast-1"
incoming_webhook = "https://hooks.slack.com/services/....."

クラスタ名やawsのprofile, regionを入れます。

incoming_webhookはslack apiなどで生成してください。

./ecs-update-notify -c config.toml

とすると、下記のような通知がされます。

f:id:sion_cojp:20181211153940p:plain

導入した後

f:id:sion_cojp:20181211154252p:plain

解決した!

ps: datadogでこういうの通知してくれると最高なんですけどね