CircleCIのOrbを利用してECSのBlue/Greenデプロイを行う方法
困っていた内容
CircleCIを利用して、CodeDeployを使用しECSへデプロイを実施したいが、下記のエラーが発生する。
|
|
なお、今回のOrbsは2025年4月時点の最新版の7.0.0を参考にしています。
背景
ブルー/グリーンデプロイしているECSサービスは内部的にはupdate-service
を利用したアップデートはできないように制限がされています。
理由としてはデプロイメントコントローラーがCODE_DEPLOY
を利用するように設定されており、この時には、create-deploymentを利用する必要があります。
また、このcreate-deploymentはAppSpec ファイルという、デプロイ後にロードバランサーと接続するための設定情報を用意する必要があり、AppSpecファイルを用意することもなかなかに面倒臭いものです。
これらを簡易にするために、CircleCIではOrbsと呼ばれるパッケージがあり、ECSサービスのOrbsも存在していますが、きちんとパラメータを設定しないと、Orbsのロジックがupdate-service
の処理に流れてしまい、期待値の動作をしない、ということとなります。
原因
ECSサービスのOrbsのJobをみるとdeploy_service_update
というJobが用意されています。
オプションが様々にありますが、ざざっと読んだ感じで「CodeDeploy 用パラメータ」はcodedeploy_application_name
とcodedeploy_deployment_group_name
だけに見え、また、デプロイメントコントローラーの設定が、CODE_DEPLOY
を利用するようになっている必要がある、と初回に読み解きました。(これが間違い)
つまり具体的には、以下の様な設定としていました。
|
|
どう対応すれば良いのか?
デプロイメントコントローラーの設定が、
CODE_DEPLOY
を利用するようになっている必要がある、と初回に読み解いた
ここが間違いでした。現状のサービスとしてのデプロイメントコントローラーではなく、deployment_controller
(deployment controllerではなく、deployment_controller <- アンダースコア)だったのです。つまり、deployment_controller
はパラメータだったのだよー!(な、なんだってー)
正直Jobのパラメータが多すぎてページ内検索しかしてなかったから、気が付いてませんでした。が、改めてよくよく見ると

the deployment_controller
って書いてありますね…….
いやぁ、これ気が付かないわぁ・・・。その他、改めてちゃんとパラメータを見るとAppSec用のパラメータもきちんとあります。
というわけで今回の結論
|
|
deployment_controller
を入れ忘れると、パラメータは揃っていても Orb は「ECS 標準デプロイ」(aws ecs update-service
)側にフォールバックする。codedeploy_load_balanced_container_name
,codedeploy_load_balanced_container_port
は、AppSpecで使うターゲットコンテナ指定のために必要。
以上。