CodeDeploy ECSへBlue/Green DeploymentするときのELBターゲットグループ設定ミスによるエラーと対応

ECSのデプロイ戦略としてBlue/Green Deploymentは有用です。Blue/Green DeploymentのCodeDeployで指定するターゲットグループの些細な設定ミスで発生するエラーと注意事項を紹介します。
2021.08.18

FargateへBlue/Green DeploymentをするべくCodePipelineの設定をしました。CodeDeployからのデプロイ時に以下のエラーによりデプロイが失敗しました。CodeDeployの些細な設定ミスが原因でした。そのエラーと対応内容を紹介します。

エラーメッセージ

A deployment group associated with an application that uses the ECS compute platform must contain a valid pair of target groups that identify a load balancer. The target ECS service must be configured using one of those two target groups.

DeepL翻訳

ECSコンピュートプラットフォームを使用するアプリケーションに関連するデプロイメントグループには、ロードバランサーを特定する有効なターゲットグループのペアが含まれていなければなりません。対象となるECSサービスは、これら2つのターゲットグループのいずれかを使用して設定する必要があります。

原因

  • CodeDeployの設定でELBに関連付いたターゲットグループを選択していなかった

Blue/Green Deployment

Blue/Green Deploymentについて詳しくは以下のリンクをご参照ください。

CodeDeployの設定

デプログループでデプロイ対象のECSクラスター、サービス名や、Blue/Greenデプロイなら本番環境用のターゲットグループ、テスト環境用のターゲットグループの設定を行います。

ELBを選択し、ターゲットグループは選択したELBに関連付いものを選ぶ必要があります。 マネジメントコンソールからターゲットグループを本番環境用と、テスト環境用の2個選択します。ターゲットグループは事前に作成しておく必要があります。

以下のようにターゲットグループ1と2の名前を選択しました。

CodePipelineを実行するとCodeDeployで失敗しました。

詳細を確認すると以下のエラーメッセージが表示されていました。

Error Message

A deployment group associated with an application that uses the ECS compute platform must contain a valid pair of target groups that identify a load balancer. The target ECS service must be configured using one of those two target groups.

ECSに関連したELBのターゲットグループを指定しないとダメですよと「それは当然そうですよね」となります。 過去に検証用で作成していたターゲットグループが大量に残っており、似た名前のターゲットグループを選択していました。凡ミスもいいところです。

以下の状態になっていました。

対応

正しいターゲットグループを選択し直しました。

CodePipelineはデプロイまで順調に完了しました。無事解決。

おわりに

初歩的なミスでデプロイに失敗しました。当然のことだからかエラーメッセージを検索してもこれといった記事がヒットしなかったので残しました。今回のように不要なリソース、とくにターゲットグループが大量に残っていると事故る可能性も高くなりますね。この設定ミスの場合、CodePipeline設定時点ではエラーにはなりませんでした。CodeDeployの実行エラーではじめて気づけます。CodeBuildとCodeDeployで多少時間がかかるため、出戻りを少なくするためにも気をつけたいです。