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 |
イメージURI | ECRリポジトリの詳細にある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の導入支援を行っております。サービス詳細はこちら👇