😊
【Terraform】AWS Fargateでタスク定義にFluent Bitを含めると意図せぬ差分が発生する
概要
Terraform で AWS Fargate のタスク定義に カスタムログルーティング(FireLens)用の Fluent Bit をサイドカーコンテナとして追加した場合、タスク定義を何も変更していないにもかかわらず、なぜかterraform plan
時にchanged
が必ず発生してしまいます。
~ {
- essential = true -> null
- mountPoints = [] -> null
name = "app"
- volumesFrom = [] -> null
# (7 unchanged elements hidden)
} # forces replacement,
~ {
- cpu = 0 -> null
- environment = [] -> null
- mountPoints = [] -> null
name = "log-router"
- portMappings = [] -> null
- user = "0" -> null
- volumesFrom = [] -> null
# (6 unchanged elements hidden)
} # forces replacement,
環境
Terraform 1.2.5
Terraform AWS Provider 4.22.0
解決策
Fluent Bit コンテナで差分が発生しているパラメータをすべて明示的に記載すれば、changed
が発生しなくなります。
user = "0"
をタスク定義に追加するだけでも、同様にchanged
が発生しなくなりました。
サイドカー以外のコンテナのパラメータでも差分が発生していますが、それらのコンテナのパラメータは記載しなくても問題ありません。
以下は Fluent Bit コンテナにuser = "0"
を追加した例です。
{
"name" : "log-router",
"image" : "public.ecr.aws/aws-observability/aws-for-fluent-bit:latest",
"essential" : true,
"firelensConfiguration" : {
"type" : "fluentbit",
"options" : {
"enable-ecs-log-metadata" : "true",
"config-file-type" : "file",
"config-file-value" : "/fluent-bit/configs/parse-json.conf"
}
},
"readonlyRootFilesystem" : true,
"memoryReservation" : 50,
"user" : "0"
}
ちなみに、user
はコンテナで使用するユーザーで、デフォルトのUID
の0
はroot
ユーザーです。
Discussion