0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS ECS】組み込みのブルー/グリーンデプロイを使ってみた

Last updated at Posted at 2025-09-25

AWS ECSがBlue/Greenデプロイをネイティブサポート!CodeDeployとの違いと注意点

2025年7月にリリースされた Amazon ECS 組み込みの Blue Greenデプロイ(新機能)について、従来のCodeDeploy版との違いや注意点について共有します。

:point_up:ポイント

  • 事前にIAMロール作成が必要。ECSサービスの作成でロールを選択する
  • ELB(ALB/NLB)のターゲットグループが2つ必要となる
  • ELBのリスナーは1つでよい。リスナールールは2つ設定しておく
    • 例)1つはデフォルト、もう1つは別条件(送信元IP等)でターゲットグループを2つ設定
    • CodeDeployのB/Gデプロイではリスナーが2つ必要だった (テストポート)
  • CodeDeployを使ったECSサービスはAWSコンソールからは作成できなくなった(CLI/CDKで対応)

AWSマネジメントコンソール操作の留意事項

  • ECSサービス作成時に、既存ELB(ALB/NLB) を選択する際に、ターゲットが表示されない場合は、リスナールールを追加して2つのターゲットグループをELBリスナーに設定しておくとよい

  • ECSサービス作成時にELBを作成するとインターネット公開になる

    • HTTPSリスナーの場合、セキュリティポリシーが ELBSecurityPolicy-2016-08 に設定されるため注意(脆弱なTLS1.0/1.1含む)→ 最新ポリシーに変更推奨
    • 内部向けALB/NLBに未対応なため、あらかじめ作成しておくとよい
  • ECSサービス作成時に、デフォルトで パブリックIPオン になっている。ELBを使う場合は オフ にしよう(デフォルトセキュアならオフにすべきと思う)

  • AWSコンソールからはCodeDeployのB/GデプロイでECSサービスは作成できなくなった (CLIなどで作成が必要)

簡単に作成できるようになった反面、未だにデフォルトでは脆弱な設定になりやすい(以前からデフォルトセキュアではない部分は改善されていない)
ECSによるデプロイが推奨となったため、ECSサービスの新規作成にCodeDeployは選択肢から外されている。

:writing_hand:使ってみた感想

  • :sunny::リスナーが1つでよいため、シンプルなのは良い
    • CodeDeploy版は2つのリスナーが必須だった。さらにCodeDeployトリガーを使って、Lambdaで動的にリスナールールを変えて、プロキシ経由の場合に事前動作確認できるように工夫していたが、ECS版ではリスナールールだけで対応できそう
  • :cloud_rain::CodeDeployの「トラフィックを再ルーティングするタイミングを指定」相当の機能がコンソールにはない
    • すぐにトラフィックが再ルーティングされるため、切り替え前に事前検証したくても、すでに本番トラフィックへ切り替わった状態になる
    • 切り替え前に待機するには、デプロイライフサイクルフックでLambdaを設定し、一時待機させるなど対応が必要(CodeDeployから単純に移行できない)
      • CodeDeployのようにコンソールからは設定や操作はできないため、別途作り込めば手動承認プロセスにも対応できるかも?
  • :cloud::CodeDeployの「元タスクセットの終了」相当ができない(デプロイ完了するには、ベイク時間を待つ必要がある)
    • 大きな問題でないが、ロールバック時間をどうしようか悩む

ECS版B/GデプロイではLambdaが不要になると思ったら、さらに作り込みが必要そう...
CodeDeploy版のほうがコンソールの操作画面がわかりやすいく、ECS版はまだ機能が不十分と感じた。今後のエンハンスを期待する。

参考:まだCodeDeploy版B/GデプロイでECSサービスを作成したい

AWSマネジメントコンソールからはCodeDeployを使ったECSサービスは作成できなくなっているため、CLI/CDKなどで作成が必要となる。
AWS CloudShell から CLI で ECSサービス を作成することで、従来のCodeDeployを使用できる。まだ CodeDeploy版のB/Gデプロイを使いたい場合はご参考ください。

  • 前提:ALB、ターゲットグループ、ECSタスク定義など事前に作成
  • 環境変数でリソースを指定する
  • 例)環境に合わせて設定してください
    export REGION=ap-northeast-1
    export ACCOUNT_ID=123456789012
    export CLUSTER_NAME=cloud-example
    export SERVICE_NAME=service-example
    export TASKDEF_ARN=arn:aws:ecs:ap-northeast-1:123456789012:task-definition/example-task:1
    export SUBNET_IDS=subnet-xxxxxxxxxxxx,subnet-xxxxxxxxxxxx,subnet-xxxxxxxxxxxx
    export SECURITY_GROUP_ID=sg-xxxxxxxxxxxx
    export TG_BLUE_ARN=arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:targetgroup/alb-example-tg-1/xxxxxxxxxxxxxxxx
    export CONTAINER_NAME=example-container
    export CONTAINER_PORT=80
    
  • CLIでECSサービス作成を実行(CODE_DEPLOYを指定)
    aws ecs create-service \
      --cluster $CLUSTER_NAME \
      --service-name $SERVICE_NAME \
      --task-definition $TASKDEF_ARN \
      --desired-count 0 \
      --launch-type FARGATE \
      --network-configuration "awsvpcConfiguration={subnets=[$SUBNET_IDS],securityGroups=[$SECURITY_GROUP_ID],assignPublicIp=DISABLED}" \
      --load-balancers "targetGroupArn=$TG_BLUE_ARN,containerName=$CONTAINER_NAME,containerPort=$CONTAINER_PORT" \
      --deployment-controller type=CODE_DEPLOY \
      --health-check-grace-period-seconds 60 \
      --enable-execute-command \
      --region $REGION
    
  • CodeDeployはAWSコンソールから作成することができる
    • BlueGreenデプロイの場合、ALB、リスナー2つ、ターゲットグループ2つを選択

参考

その他

0
2
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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?