1
0

More than 1 year has passed since last update.

(備忘) AWS ECS - デプロイタイプを CodeDeploy に変えると terraform apply で ECSサービスに紐づくタスク定義の設定が更新できなくなる

Last updated at Posted at 2023-08-16

IMG_4401.jpeg

背景

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サイトアクセスにもダウンタイムが発生してしまう。

image

次のような対応をしなければいけなさそう?

  • Terraformは初期構成時にだけ利用するようにして ECSサービスへの変更は ignore_changes しておく (Terraformでの変更は反映しない)
  • もしくはECSサービス設定をTerraformから変更する場合はダウンタイムを許容する

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

Twitter

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0