AWS ECSコンテナのBlue/Greenデプロイ

ハンズオンのリンク

https://pages.awscloud.com/rs/112-TZM-766/images/AWS_CICD_ECS_Handson.pdf

 

↑の詳しい動作解説

https://blog.serverworks.co.jp/cicd-ecs-build-deploy-flow

 

Blue/Greenデプロイメントの図解

https://www.sunnycloud.jp/column/20210620-01/

 

今回はテストリスナー無しパターンで実施しました。

 

ハンズオンからの変更点

  • NAT Gatewayで課金されたくなかったのでCloudformationテンプレートから

          NAT Gateway、プライベートサブネットのルート定義を削除

  • NAT Gatewayを削除したのでECSはプライベートではなくパブリックに配置
  • ハンズオンではGitクライアント、Dockerを利用するためにcloud9を                      構築しているが自分のPCに変更

ハマった点

ECSが画面から入力する設定が多く、設定間違いでタスクやらALBを

何度も作り直す。。。

 

あとはaws CLIのバージョンアップの影響らしく、Codeシリーズでハマった。

 

1.コマンドの使い方が違いますエラー

[Container] 2023/01/22 10:16:26 Running command $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)

usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters] To see help text, you can run:

 

→ハンズオンではなく公式ドキュメントを確認すると、なんかコマンドが違う。

コマンドをget-login-passwordに変更

 

2.Login: not foundエラー

/codebuild/output/tmp/script.sh: 4: Login: not found

 

→1行目コマンドの先頭の$(と末尾の)を削除

 

3.またエラー

Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: docker push $REPOSITORY_URI:latest. Reason: exit status 1

 

サンプルのリージョンがusになってたので東京リージョンに変更

 

10度目のデプロイにしてようやく成功。3時間ぐらいかかりました。

あれ?CodePipeline使って何しようとしてたんだっけ?となる。

 

動作確認

リリース前

リリース前ALBのターゲットグループ Blue側(~fargate-1)にリンクしている



タスクは1つだけ稼働している



リリース後

ターゲットグループは1系から2系へ変わる(~fargate-2)



新コンテナがリリースされ、旧コンテナは設定した猶予期間だけ残る



猶予期間経過後

旧コンテナは自動削除



感想

始めてcodeシリーズを使いましたがデプロイ時間が意外と長い。

10分は待たされているイメージ。

待たされた挙句エラーで止まるので構築に時間がかかる。

※成功すると2分ぐらいで終了するようです。

 

gitからリポジトリにpushしてしまえば、あとは全自動でリリースなのは素晴らしい。

 

結構色々準備は必要ですが、ここまで一貫したリリースの仕組みをベンダーから

提供しているのはすごいことだと思います。