ECS の煩わしいオペレーションをよしなにやってくれるツールを作った

ECS のオペレーションは色々と面倒なものが多いです。例えば、ECS クラスタを EC2 インスタンスで管理している場合、インスタンスの AMI を更新しようと思うと、新しいインスタンスを起動して、古いインスタンスをドレイニングして、古いインスタンスを落とすというオペレーションが発生します。また、ECS サービスの設定のうち、新規作成時にしか設定できない項目を変更しようと思うと、別名のサービスを新しく作成する必要があります。ちょっと設定を変えたいだけなのに名前を変えないといけないのは辛いですよね。

というわけで、そんな作業をよしなにやってくれるツールを作成しました。
https://github.com/abicky/ecsmec

Go 言語の勉強を兼ねて Go 言語で書いています。去年の春ぐらいに開発していて、1 年ぐらい間が空いてから仕上げたので、一貫性のないコードになっている箇所がちらほらあるかもです…

何をするコマンドか?

割と頑張って README を書いたので、詳細は README を読んでもらうと良いですが、現在次のようなオペレーションをサポートしています。

  • auto scaling group で管理している ECS クラスタのインスタンス入れ替え (replace-auto-scaling-group-instances)
  • spot fleet request で管理している ECS クラスタのキャンセル済みリクエストに属するインスタンスの停止 (terminate-spot-fleet-request-instances)
  • auto scaling group または spot fleet request で管理している ECS クラスタの縮小 (reduce-cluster-capacity)
  • ECS サービスの再作成 (recreate-service)

ECS サービスの再作成に関して、割とよくありそうなユースケースとして placement strategies や placement constraints の更新があります。
一応 UpdateService API では placement strategies や placement constraints も更新できるんですが、更新できるようになって 1 年近く経っても preview のままです。
cf. Amazon ECS supports in Preview updating Placement Strategy and Constraints for existing ECS Services



以上、ECS のオペレーションにかかる労力が少しでも緩和すれば幸いです。