TerraformでECSとCodeDeployのBlue/Greenデプロイメントを使用する時の注意点

AWS, Terraform25 December 2020

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
    ]
}

便利だけど戸惑いやすいのでメモです。

tags: AWS, Terraform