はじめに
この記事では、前回 ECR に Docker イメージをプッシュした続きとして、ECS を利用してそのイメージをデプロイし、実際に動作させるまでの流れをまとめています。
ITスクールで Docker の基本を学んだことが、今回の自宅検証で非常に役立ちました。
ECR(Elastic Container Registry)を学び始めたばかりの私が、将来の自分への備忘録として、学んだ知識や作業手順を記録しています。
環境構築やイメージ管理の基礎を理解していたおかげで、次のステップである ECS(Elastic Container Service)の学習がスムーズに進みました。
ECR・ECSについての知識整理
ECR (Elastic Container Registry) は、AWS が提供する Docker イメージを保存・管理するためのコンテナレジストリサービスです。
引用画像:https://zenn.dev/yoshii0110/articles/1de56128d7be2c
イメージをプッシュ(登録)しておけば、ECS などの AWS サービスから簡単に利用できます。
一方で、ECS (Elastic Container Service)は、AWS のコンテナオーケストレーションサービスとなっています。
クラスター上でコンテナを実行するための「タスク定義」や、それを永続的に実行する「サービス」の管理が可能です。
ECSにおける基本構成
ECS の仕組みを理解するためには、クラスター、タスク定義、サービスの関係を把握することが重要です。
引用画像:https://zenn.dev/issy/articles/zenn-ecs-overview
⓵クラスター (Cluster)
クラスターは、コンテナを実行するための基盤のようなもので、以下の役割を担います。
- コンテナを実行するリソースをグループ化する。
- Fargate または EC2 を使用して、必要な計算リソースを提供する。
⓶サービス (Service)
サービスは、タスク定義に基づき、クラスター上でタスクをスケーリングや管理するための機能です。
サービスを利用することで、特定のタスクを継続的に実行したり、障害時に自動復旧させたりすることができます。
⓷⓸タスクとタスク定義 (Task Definition)
タスク定義は、どのコンテナイメージを使用するか、リソースの割り当て、ネットワーク設定などを定義した「設計図」の役割を果たします。
この設計図をもとにタスクが実行されます。
実際にやってみた
ここでは、前回作成した「My Web App」の Docker イメージが ECR に登録されている状態を前提に進めます。
ECSクラスターの作成
まず、ECS サービスページに移動し、サイドメニューから「クラスター」を選択します。
次に「クラスターの作成」ボタンをクリックし、クラスター名として my-ecs-cluster
を指定します。
インフラストラクチャのタイプとして「AWS Fargate (サーバーレス)」を選び、「作成」ボタンをクリックします。
これで、正常に my-ecs-cluster
が作成されていることが確認できました。
タスク定義の作成
次に、ECS ページのサイドメニューから「タスク定義」を選び、「新しいタスク定義の作成」をクリックします。
タスク定義ファミリーは my-app-task
とし、起動タイプとして「AWS Fargate」(コンテナのサーバーレスコンピューティング)を選びます。
タスク実行ロールには ecsTaskExecutionRole
を選択します。もし存在しない場合は、必要に応じて作成してアタッチしてください。
コンテナの詳細設定では、コンテナ名を my-app-container
とし、イメージ URI には ECR にプッシュしたイメージの URI を入力します。
今回は検証のため、ホストポートとコンテナポートを両方 80 に設定しています。
問題がなければ「作成」ボタンをクリックし、ステータスが「ACTIVE」になっていることを確認すれば、タスク定義が正常に作成されたことになります。
最初に作成した「my-ecs-cluster」から「新しいタスクの実行」を選択します。
ここでは、特に設定を変更せず、デフォルトのままで進めます。
デプロイ設定のファミリーでは、先ほど作成した「my-app-task」を選択し、リビジョンと必要なタスク数を設定して進めます。
ネットワーキングの設定では、ご自身のVPCやサブネットを選択してください。
ここでは、インターネット接続を確認するために、セキュリティグループのインバウンドルールで80番ポートを許可します。
登録したタスクが「実行中」のステータスになっていることを確認できました。
サービスの作成
次に、最初に作成した「my-ecs-cluster」のサービス画面から、クラスター上でタスクを実行するサービスを作成します。
環境については、特に変更せずそのまま進めます。
アプリケーションタイプは「サービス」として、デプロイ設定のファミリーでは、先ほど作成した「my-app-task」を選択し、リビジョンと必要なタスク数を選択して進めます。
サービス名は「my-app-service」として進めます。
ネットワーキングの設定も同様に、ご自身のVPCやサブネットを選択してください。
設定内容を確認後、「サービスの作成」をクリックします。デプロイには多少時間がかかります。
デプロイ後の動作確認
デプロイが完了したら、タスクが正常に実行されていることを確認します。
ECSページの「クラスター」→「タスク」タブから、実行中のタスクを選択し、タスクのパブリックIPを確認します。
ここで、タスクが使用しているパブリックIP(例:52.68.45.243
)を確認したら、ブラウザでアクセスしてみます。
http://52.68.45.243/
実際に、前回ECRにプッシュしたindex.html
ファイルの内容が表示されていることを確認できました。この確認をもって、検証は大成功です!
まとめ
今回の手順では、ECSクラスタの作成からタスクの実行、サービスの設定までを学びました。
ECSのサービス間の関係性を考えながら検証するのが非常に手こずり、特にインターネット接続の確認に苦労しました。
次回は、ECSの設定をさらに深堀りし、より複雑なデプロイやトラブルシューティングにも挑戦していきたいと思います。
参考記事