フューチャー技術ブログ

Future Tech Night #19 CodePipelineを用いたECS on EC2でのBlue/Greenデプロイメント

はじめに

2019年新卒入社筋肉エンジニアの渡邉光です。

2022年1月28日にFuture Tech Night #19 AWS CodePipelineと新聞向けCMS構築事例を開催しました。こちらの勉強会で「CodePipelineを用いたECS on EC2でのBlue/Greenデプロイメント」というテーマで発表させていただきました。

発表の概要

発表の経緯として所属プロジェクトでECS on EC2を採用していたこと、パイプライン構築時にはまったことや知見を共有できるのではないかと考えて本テーマについて発表しました。

内容としては、そもそもBlue/Greenデプロイメントってどんなデプロイ方法なのか、ECSでのデプロイ方法の種類、Blue/Greenデプロイメント中のALBやECSタスクがどのような挙動をするのかを図解して解説させていただきました。また、構築した際にはまった点や、実際にパイプラインを実行した時にマネジメントコンソール上でどのように見えるかや、操作方法等を説明させていただきました。

以下が、パイプライン構築時にはまったことやTips等の抜粋です。

  • ECS on EC2でAWSVPCモードを使用する場合は、タスクごとにENIがアタッチされるため、インスタンスタイプによっては許容されているENI数を超えてしまい、タスクが立ち上がらないことがあります。その対策としてAWSVPC Trunking制限緩和申請を行うことでインスタンスで許容されるENI数の上限を大幅に引き上げることができます。
  • CodeBuild実行時にDocker HubからイメージをPullする構成になっていると「error pulling image configuration: toomanyrequests:Too Many Requests」とrate-limitエラーになってしまうので、ECR Publicを使用してイメージをpullするようにしました。
  • CapacityProviderの設定を入れている場合、CodeDeployで使用する「appspec.yml」に「CapacityProviderStrategy」の設定を記載しないと、Blue/Greenデプロイが完了した際に構築時に設定したはずの「CapacityProviderStrategy」の設定が消えてしまい、タスクがAZに分散されず偏る事象が発生しました。
  • Blue/Greenデプロイが、サービスのAutoScalingをサポートしていないため、CodeDeployのイベントフックを利用してデプロイ前後にサービスのAutoScalingの停止と再開を実行するLambdaを実行する必要があります。

感想

所属プロジェクト内での勉強会に登壇して発表することはありましたが、社外イベントでの勉強会に登壇することは初めてだったので、とても良い経験になりました。勉強会登壇に向けて再びECS、Codeシリーズのインプットをしたり、資料にアプトプットする段階で理解が深まったりしたので勉強会登壇して本当に良かったです。

後日先輩社員から少し話すのが早かったかなとフィードバックを頂いたので、次発表する機会があれば落ち着いてゆっくりプレゼンできるようにしておきます!(笑)

改めて当発表をご視聴いただいた方、そしてここまで当記事を読んでくださった方ありがとうございました。

次のイベントに関する情報は、フューチャーのconnpassで確認できます。ぜひご参加ください!