ECRのイメージ管理がしやすくなっていた
何
ecsでサービスを動かす場合、大抵の場合は自前イメージをecrに置くことになるんじゃないでしょうか。 ecrには 1000 images/ 1repo というイメージ保有制限が存在し、定期的なクリーンが必要ですが、最近のアップデートでかなり対応しやすくなっていたので共有です
どうやるの
ecrにライフサイクルポリシーを設定します。terraform的にはこうです
resource "aws_ecr_lifecycle_policy" "ecr_image_clean_lifecycle_policy" { count = "${ length(var.ecr-repos) }" repository = "${ element(var.ecr-repos), count.index) }" policy = <<EOF { "rules": [ { "rulePriority": 1, "description": "Expire excess images more than 100", "selection": { "tagStatus": "any", "countType": "imageCountMoreThan", "countNumber": 100 }, "action": { "type": "expire" } } ] } EOF } variable "ecr-repos" { type = "list" default = ["your-great-repo-name"] }
補足
ちなみにどうやら先々月にライフサイクルポリシー更新され使いやすくなっていて、 対象のイメージフィルタとして
- タグ
- 個数
- 期間
が存在しましたが、以前はタグ付けされているimageの場合prefixを指定する必要がありました。 つまり git sha1などを使いタグ付けをしていた場合はこれらをフィルタできず、実質タグのないimageのみ削除が可能という微妙な感じだったようです。(ちなみに前にいた会社ではcircle ciでcapistrano task経由によりimage clean scriptを走らせていました)
今回追加された tagStatus: any
により、タグ付けされたものも一括で消せるようになり、圧倒的に便利になったのでこれでいけますね。