helen's blog

ずっとおもしろいことしてたいな。

Mackerelを起点にAmazon EventBridgeを経由してホストを削除する

MackerelのAmazon EventBridge対応が出ました

mackerel.io

AWS Black Belt でも紹介されてて、EventBridgeまわりがわかりやすく説明されています

koudenpa.hatenablog.com

物理で光るのはテンションあがってとても良い!


わたしもこれでなにかおもしろいことしたいな〜って思ってたけどネタが思いついてなくて、
そんなときにチームの人がふと
"MackerelでホストステータスをPower Offにしたらホスト退役するとか、できるか知らんけどw"
って言ってて、その考え方が自分になくておもしろいなと思って作ってみました

普段AWSでホストが起動すると、
MackerelエージェントやAWSインテグレーションでMackerelに連携されて、
ホスト退役すると自動でMackerelから消えて... とAWS起点で考えてたのですが
Mackerelを起点にホストを管理するというのが逆転的でこれいいじゃんって思いました

つくる

mackerel.io

公式ドキュメントとして手順が丁寧に書いてあるのでそのままぽちぽち設定します

よくわからなかったのがドキュメントではあまり触れられていない Event matching pattern のところで、
ちゃんと選択してSaveしてもなぜかAllで保存されちゃいました

f:id:heleeen:20200127032644p:plain

これはAWSでの設定なのですが、なんでこうなるんだろう🤔
Allでもサービス指定しても(Allで保存されるけど)問題なく動きます

ぽちぽちってするだけでMackerelのイベントとAWSのリソースが連携できるのはめっちゃ楽でいいですね

できた

github.com

とっっっても突貫でつくりました

MackerelでECS FargateのタスクのホストステータスをPower Offにすると
Mackerel -> EventBridge -> Lambda -> ECS とリクエストし、
そのタスクがストップされます

Max, Desired CountやAuto Scalingを変更するわけではないので、
たとえばDesired Countが2になっていて、1つをPower Offにすると、
一時的に1タスクになり、そのうち2つ目が起動してきます

ほんとうはこれは3つ目を立ててからStopするほうが親切ではあるのですが
勢いだけで作ってしまったのでタスクは即Stopしにいってしまいます😅

EventBridgeのTargetの設定画面の

f:id:heleeen:20200127030547p:plain

これをぽちぽちするよりLambda書いたほうが簡単そうって感じたのでLambdaにしました
ブラウザ得意になりたい

なんでFargateなのかというと、そこに動いているクラスターがあったからで、
そこに対する理由や考察は全く無いです

作ってみて

今回、MackerelでFargateで稼働しているタスクの様子を見て
違和感のあるやつはPower Offすると入れ替わるっていうシナリオを考えたのですが、
実際Fargateでそんなことあるのか?🤔 という感じです

Mackerelのグラフがきれいなので、
そのグラフからそのままアクション取れたらスムーズでいいな〜

でもこのHostなんか調子悪そうだから入れ替えたいねっていう話だと
今更だけどECSよりEC2のほうが向いていそう

あとMackerelが本来用意しているホストステータスのPower off機能に別の機能を付け加えてしまったので、
本来の用途で使おうと思ったときにびっくりしてしまうかもね

思想も実装もガバガバなくらい動く楽しさ重視で作ってみたからしょうがないね!

Mackerelのどんなイベントが起こったら何をするかという定形のアクションがあったとき、
それをコード化できるっていう部分がとても好き