TerraformでECSサービスを作成し、 デプロイ方法にCodeDeployを用いたBlue/Greenデプロイメントを指定する場合、注意点がいくつかあるのでまとめます。
デプロイ方式をCodeDeployにするということ
1番の注意点です。 デプロイの方式をCodeDeployにするということは、今後のデプロイについてはCodeDeployに委ねるということになります。
何を当たり前の事いってんだこいつは?
まさにその通りなのですが、これが意味するのは
CodeDeployに委ねるから、今後はTerraformからの更新はできませんよ。
ということになります。
つまり、ECSサービスのデプロイ方法をCodeDeployに設定しTerraform applyをした後はTerraformからは基本的にECSサービスに関するプロパティの変更は行えません!!
これがすごく注意点です。 Terraformから更新するには一度削除して作り直すしかないです。。
LBのターゲットグループがデプロイごとに切り替わるからignore_changesしといた方がいい
Blue/Greenでは紐付けたロードバランサーのターゲットグループを2つ用意し、 それぞれに「現在稼働中のタスク」「これからリリースしたいタスク」を配置します。
そのターゲットグループへのトラフィックを切り替えることで、リリースを実現しています。 なので、以下の通りECSサービスのプロパティの中からロードバランサーの情報はignore_changesに指定し、 変更があっても差分として認識しないようにしておくと良いです。
lifecycle {
ignore_changes = [load_balancer]
}
ついでに言うと、 その他のCodeDeployに依存するものも全てignore_changesにしても良いかもしれません。
lifecycle {
ignore_changes = [
load_balancer,
task_definition,
network_configuration,
desired_count,
launch_type,
platform_version
]
}
便利だけど戸惑いやすいのでメモです。