Amazon ECS の古いタスク定義を断捨離する "tdtidy" という隙間家具 OSS を作った

Posted on

自分は Amazon ECS のデプロイに ecspresso を利用することが多いのですが、頻繁にデプロイする環境だと 1 年で数百を超えるタスク定義が作られます。直近の数世代はロールバックする可能性があるので残しておきたいのですが、さすがに数か月前のリビジョンに戻すことはないため不要なものは断捨離したいと思っていました。

そういうリクエストが多かったのか、以前はタスク定義を非アクティブにすることしかできませんでしたが、今年の 2 月についに削除できるようになりました。

さらに AWS が管理する Containers Roadmap のプロジェクトを眺めてみると、Issue #1967 でタスク定義にライフサイクルを追加してほしいというリクエストが挙がっていました(この Issue を作ったのは中の人っぽいので、要望をリサーチするためのものかもしれません)。 ECR のライフサイクルポリシーに近しい機能のようです。

現時点であまり動きはなくいつリリースされるかも未知数なので、古いタスク定義を断捨離する "tdtidy" という隙間家具 OSS を作りました(隙間家具については後述します)。

名前の由来は "task definitions tidy" の略で go mod tidy から着想を得ています。

インストールと使い方

今回は Go で書いたツールを OSS で公開するための方法も学びたかったので、Homebrew でインストールできるようにしています。

$ brew install manabusakai/tap/tdtidy

$ tdtidy -help
Usage of tdtidy:
  -dry-run
        Turn on dry-run. List the target task definitions.
  -family-prefix string
        Family name of task definitions. If specified, filter by family name.
  -retention-period int
        Retention period for task definitions. Unit is number of days. The default value is zero.

使い方のイメージですが、90 日より前に作られた foobar というタスク定義のリビジョンを断捨離したい場合は次のようなコマンドを実行します(対象を確認したい場合は -dry-run フラグを付けます)。

$ tdtidy -family-prefix foobar -retention-period 90

ここでいう断捨離とは、アクティブなリビジョンを非アクティブにすること (deregister)、非アクティブなリビジョンを削除すること (delete) を指しています。なお、実行中のタスクに紐づいているかどうかはチェックしていませんが、もし紐づいていたとしてもリビジョンのステータスが DELETE_IN_PROGRESS に留まるので実行中のタスクには影響ありません。

手元から実行しても良いのですが、Lambda で定期的に実行するか、デプロイパイプラインの最後に実行することを想定しています。

隙間家具 OSS とは

隙間家具 OSS というのは ecspresso の作者である @fujiwara さんが使われている言葉で、マネージドサービスの隙間を埋めて便利にするものを指しています。今回の tdtidy もいずれマネージドサービスとしてリリースされると不要になることを念頭において作りました。

リスペクトの意味を込めて、この言葉を使わせていただきました!

Popular Entries

Recent Entries