Amazon ECSでNext.jsをブルーグリーンデプロイしてみる

Amazon ECSについて

Amazon ECSはAWS上でコンテナを管理するための、フルマネージド型のコンテナオーケストレーターです。

ECSを使用することでコンテナのデプロイ、管理、スケールなどを簡単に行うことができ、複数のコンテナを効率的に運用できるようになります。

ECSはコンテナを管理するサービスであり、コンテナを稼働させるためには別のサービスを利用します。ECSでは3つの起動タイプが提供されています。

  • Fargate・・・サーバーレスでコンテナを実行するための機能
  • Amazon ECS on EC2・・・EC2インスタンス上でコンテナを起動する
  • ECS Anywhere ・・・ECSの機能を利用してオンプレミス環境でコンテナを管理するための機能

構成要素

ECSには4つの要素があります。

  • タスク定義

タスク定義は設計図のようなものです。起動タイプや使用するDockerイメージ、​​オペレーティングシステムのパラメータ、メモリやCPU、IAMロールなどを指定します。

  • タスク

タスク定義に基づいて実行されるコンテナ群をタスクといいます

  • サービス

タスクを管理し必要な数のタスクを実行して維持します。またVPCなどのネットワーク    の設定やロードバランサーの設定もします。

  • クラスター

サービスやタスクを実行するための基盤です。クラスター名やFargateなど利用するイン フラストラクチャのタイプを指定します。

ブルーグリーンデプロイメントについて

現在の環境をブルー環境、新しい環境をグリーン環境とし2つの本番環境を用意した上でロードバランサーの接続先を切り替えて新しい本番環境をリリースする方式のことです。

こうすることでシステムの停止時間を少なくすることができます。また新しい環境で何か問題が生じた場合に古い環境にロールバックすることも可能です。

Next.jsをECS上で起動しブルーグリーンデプロイメントしてみる

1.ECRのプライベートリポジトリの作成

 AmazonECRのコンソールからリポジトリを作成します。可視性設定にてプライベートを選択し、リポジトリ名を入力してリポジトリを作成します。

2.Next.jsの用意

簡単なNext.jsのアプリを作成し、Dockerfileを用意します。

3. ECRにイメージのプッシュ

作成したECRリポジトリからプッシュコマンドを表示し、順にコマンドを入力してECRにイメージを追加します。

4.VPCの作成

VPCのコンソールからVPCを作成を選択します。基本的な構成があれば良いので作成するリソースでVPCなどを選択し、他はデフォルトのままでVPCを作成します。

5. IAMロールの作成

IAMのコンソールからロールを作成を選択します。CodeDeploy – ECSを選択し、「次へ」を選択します。許可を追加は特にせず「次へ」を押します。ロール名を入力し、説明も変更したい場合は入力します。間違いがないか確認し、ロールを作成を選択します。

6. クラスターの作成

ECSのコンソール画面からクラスターを作成します。クラスター名を入力し、インフラストラクチャでAWS Fargateを選択し、作成します。

7. タスク定義の作成

タスク定義のタブから新しいタスク定義の作成を選択し、タスク定義を作成します。

以下を設定していきます。(記載のないものはデフォルトのままです。)

タスク定義ファミリー 任意の名前

インフラストラクチャの要件 

起動タイプAWS Fargate
タスクロールなし
タスク実行ロール新しいロールの作成

コンテナ -1 

名前next
イメージURIECRリポジトリの詳細にあるURI
コンテナポート3000
ポート名任意の名前

8. サービスの作成

作成したクラスターのサービスのタブから作成を選択し、サービスを作成します。

以下を入力します。(記載のないものはデフォルトのままです。)

デプロイ設定

ファミリー作成したタスク定義を選択
サービス名任意の名前
デプロイタイプブルー/グリーンデプロイ
CodeDeployのサービスロールCodeDeploy用に作成したIAMロール

ネットワーキング

VPC作成したVPCを選択
サブネット作成したパブリックサブネットを選択

ロードバランシング

ロードバランサの種類ALB
ロードバランサ名任意の名前

サービス作成後に作成したサービスの設定とネットワークタブに移動します。DNS名のオープンアドレスをクリックすると、別タブでネクストのアプリをブラウザで見ることができるようになります。

9.サービスの更新

サービスを作成する際にデプロイタイプでブルーグリーンデプロイを選択し、作成しました。これによりブルーグリーンデプロイメント用のCodeDeployが自動で作成されます。CodeDeployのコンソール画面のアプリケーションから確認することができます。

*アプリケーションの名前は変更できません。変更したい場合はCodeDeployから自分で作成する必要があります

サービスのコンソールの右の方にあるサービスを更新を選択します。

デプロイの設定で新しいデプロイの強制にチェックを入れます。

デプロイオプションで自動で作成されたCodeDeployを選択します。

更新を押します。

10. ブルーグリーンデプロイメント

更新を押すと以下の画像のようなアラートが現れます。ブルーグリーンデプロイが開始されたことがわかります。

また進行状況はCodeDeployから確認することができます。

変化がわかるようにコードの文言を少し修正してECRに再度プッシュしたものをデプロイしてみました。

デプロイしたものをブラウザで確認するとしっかりと変更されていました。

まとめ

ECSを利用して簡単にアプリをデプロイできました。ブルーグリーンデプロイもかなり簡単に行うことができました。

AWSには他にもコンテナのサービスが存在するのでケースに合わせてうまく使いこなしていきたいです。

参考

「ブルーグリーンデプロイメントの仕組み」を理解する

Amazon Elastic Container Service とは

Amazon ECS クラスター

Amazon ECSの タスク定義

ECSブルーグリーンデプロイメントをゼロから構築する。

Amazon ECSの導入支援を行っております。サービス詳細はこちら👇

ABOUT US
すぎやま
新卒でWeb制作会社にシステムエンジニアとして入社し、Vue.js, TSやCMSなどを使った開発を経験。23年3月にAWS SAP取得。入社2年でAWS資格4冠。2024年2月から株式会社アイスリーデザインに入社。主にReactやAWSを触ってます。