1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ECSを使ったコンテナデプロイ:ECSを使ったサーバーレスアプリケーションのデプロイと動作確認

Last updated at Posted at 2024-11-16

はじめに

この記事では、前回 ECR に Docker イメージをプッシュした続きとして、ECS を利用してそのイメージをデプロイし、実際に動作させるまでの流れをまとめています。

ITスクールで Docker の基本を学んだことが、今回の自宅検証で非常に役立ちました。

ECR(Elastic Container Registry)を学び始めたばかりの私が、将来の自分への備忘録として、学んだ知識や作業手順を記録しています。

環境構築やイメージ管理の基礎を理解していたおかげで、次のステップである ECS(Elastic Container Service)の学習がスムーズに進みました。

ECR・ECSについての知識整理

ECR (Elastic Container Registry) は、AWS が提供する Docker イメージを保存・管理するためのコンテナレジストリサービスです。

image.png

引用画像:https://zenn.dev/yoshii0110/articles/1de56128d7be2c

イメージをプッシュ(登録)しておけば、ECS などの AWS サービスから簡単に利用できます。

一方で、ECS (Elastic Container Service)は、AWS のコンテナオーケストレーションサービスとなっています。

image.png

引用画像:https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-java-microservices-on-amazon-ecs-using-amazon-ecr-and-aws-fargate.html

クラスター上でコンテナを実行するための「タスク定義」や、それを永続的に実行する「サービス」の管理が可能です。

ECSにおける基本構成

ECS の仕組みを理解するためには、クラスター、タスク定義、サービスの関係を把握することが重要です。

image.png
引用画像:https://zenn.dev/issy/articles/zenn-ecs-overview

⓵クラスター (Cluster)

クラスターは、コンテナを実行するための基盤のようなもので、以下の役割を担います。

  • コンテナを実行するリソースをグループ化する。
  • Fargate または EC2 を使用して、必要な計算リソースを提供する。

⓶サービス (Service)

サービスは、タスク定義に基づき、クラスター上でタスクをスケーリングや管理するための機能です。

サービスを利用することで、特定のタスクを継続的に実行したり、障害時に自動復旧させたりすることができます。

⓷⓸タスクとタスク定義 (Task Definition)

タスク定義は、どのコンテナイメージを使用するか、リソースの割り当て、ネットワーク設定などを定義した「設計図」の役割を果たします。

この設計図をもとにタスクが実行されます。

実際にやってみた

ここでは、前回作成した「My Web App」の Docker イメージが ECR に登録されている状態を前提に進めます。

ECSクラスターの作成

まず、ECS サービスページに移動し、サイドメニューから「クラスター」を選択します。

image.png

次に「クラスターの作成」ボタンをクリックし、クラスター名として my-ecs-cluster を指定します。

image.png

インフラストラクチャのタイプとして「AWS Fargate (サーバーレス)」を選び、「作成」ボタンをクリックします。

image.png

これで、正常に my-ecs-cluster が作成されていることが確認できました。

タスク定義の作成

次に、ECS ページのサイドメニューから「タスク定義」を選び、「新しいタスク定義の作成」をクリックします。

image.png

タスク定義ファミリーは my-app-task とし、起動タイプとして「AWS Fargate」(コンテナのサーバーレスコンピューティング)を選びます。

image.png

タスク実行ロールには ecsTaskExecutionRole を選択します。もし存在しない場合は、必要に応じて作成してアタッチしてください。

image.png

コンテナの詳細設定では、コンテナ名を my-app-container とし、イメージ URI には ECR にプッシュしたイメージの URI を入力します。

image.png

今回は検証のため、ホストポートとコンテナポートを両方 80 に設定しています。

問題がなければ「作成」ボタンをクリックし、ステータスが「ACTIVE」になっていることを確認すれば、タスク定義が正常に作成されたことになります。

image.png

最初に作成した「my-ecs-cluster」から「新しいタスクの実行」を選択します。

image.png

ここでは、特に設定を変更せず、デフォルトのままで進めます。

image.png

デプロイ設定のファミリーでは、先ほど作成した「my-app-task」を選択し、リビジョンと必要なタスク数を設定して進めます。

ネットワーキングの設定では、ご自身のVPCやサブネットを選択してください。

image.png

ここでは、インターネット接続を確認するために、セキュリティグループのインバウンドルールで80番ポートを許可します。

image.png

登録したタスクが「実行中」のステータスになっていることを確認できました。

サービスの作成

次に、最初に作成した「my-ecs-cluster」のサービス画面から、クラスター上でタスクを実行するサービスを作成します。

image.png

環境については、特に変更せずそのまま進めます。

image.png

アプリケーションタイプは「サービス」として、デプロイ設定のファミリーでは、先ほど作成した「my-app-task」を選択し、リビジョンと必要なタスク数を選択して進めます。

サービス名は「my-app-service」として進めます。

image.png

ネットワーキングの設定も同様に、ご自身のVPCやサブネットを選択してください。

image.png

設定内容を確認後、「サービスの作成」をクリックします。デプロイには多少時間がかかります。

デプロイ後の動作確認

デプロイが完了したら、タスクが正常に実行されていることを確認します。

image.png

ECSページの「クラスター」→「タスク」タブから、実行中のタスクを選択し、タスクのパブリックIPを確認します。

image.png

ここで、タスクが使用しているパブリックIP(例:52.68.45.243)を確認したら、ブラウザでアクセスしてみます。

http://52.68.45.243/

実際に、前回ECRにプッシュしたindex.htmlファイルの内容が表示されていることを確認できました。この確認をもって、検証は大成功です!

image.png

まとめ

今回の手順では、ECSクラスタの作成からタスクの実行、サービスの設定までを学びました。

ECSのサービス間の関係性を考えながら検証するのが非常に手こずり、特にインターネット接続の確認に苦労しました。

次回は、ECSの設定をさらに深堀りし、より複雑なデプロイやトラブルシューティングにも挑戦していきたいと思います。

参考記事

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?