背景
CodepipelineでのECSのデプロイ方法をECS(ローリング)からCodeDeploy(blue/green)に変えたい
エラー内容
ECSサービスの デプロイタイプを CODE_DEPLOY にするとタスク定義の更新ができなくなる
Unable to update task definition on services with a CODE_DEPLOY deployment controller.
Use AWS CodeDeploy to trigger a new deployment.
terraform appley 時にECSサービスに紐づくタスク定義の内容に差分があると上記エラーが発生するようだ。
概要
CODE DEPLOYで blue/greenデプロイをする場合はECSサービスでタスク定義を管理するのではなくCODE DEPLOY で管理するらしい。
かと言ってECSサービスのタスク定義を未設定にはできないようだ。(どうしろと)
Error: creating ECS Service (***): InvalidParameterException: TaskDefinition can not be blank.
TRY
試しにTerraformのコードで ECSサービスに紐づく task_definition の ARNを現在のものに固定してみる
(差分を無くす)
resource "aws_ecs_service" "default" {
...
# task_definition = data.aws_ecs_task_definition.default.arn
task_definition = "arn:aws:ecs:***************:task-definition/**********:111"
結果はapplyが出来るようになった
(だが「意味もなくECSにタスク定義をいちど紐づけておいて次からはエラー回避のためにバージョンを固定する」なんていうこの方法が良いはずはないのだが。引き続き調べる。ignore_changesでタスク定義を更新無効にしておいたら良いのだろうか)
問題
terraform apply は (とりあえずのとりあえずで) 通るようになったのだが、
問題として ECSサービスのサービス名を1文字変えるだけでもECSサービスを破棄(destory)してから作り直されるようになってしまった。
デプロイタイプをCodeDeployにした場合の制約なのだろうか。
恐らくこの影響で実際のWebサイトアクセスにもダウンタイムが発生してしまう。
次のような対応をしなければいけなさそう?
- Terraformは初期構成時にだけ利用するようにして ECSサービスへの変更は ignore_changes しておく (Terraformでの変更は反映しない)
- もしくはECSサービス設定をTerraformから変更する場合はダウンタイムを許容する
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。