困っていたこと
AWSの仕様として、ECSのタスク定義は更新ができません。(タグの編集は可)
タスク定義を変更するときには新しいリビジョンを作成する管理方式となっています。
AWSマネジメントコンソールではリビジョンの作成と削除は別操作ですが、 terraform では delete/create になっていました。旧リビジョンは削除されてしまいます。
「旧リビジョンはその瞬間から2度と使わない」と割り切れるのならそれでも構わないのかもしれませんが、残しておきたいケースもあるはずです。
対処方法
なぜか現時点では リファレンス - Resource: aws_ecs_task_definition に記載されていませんが、Terraform AWS Provider v3.72.0
から削除をスキップするフラグ skip_destroy
が追加されています。
https://github.com/hashicorp/terraform-provider-aws/pull/22269
このフラグを設定することにより、旧リビジョンを残しつつ新しいリビジョンを作成することが可能になっています。
sample
resource "aws_ecs_task_definition" "ecs_task" {
family = "sample-task"
container_definitions = templatefile("./task-definition.json", {
image_url = "nginx:latest"
})
requires_compatibilities = ["FARGATE"]
network_mode = "awsvpc"
cpu = "256"
memory = "512"
+ skip_destroy = true
lifecycle {
ignore_changes = [container_definitions]
}
}