はじめに
こんにちは。 今回は、ECS Fargateを使って最小構成でコンテナを起動する方法をご紹介します。
ECSは、AWS上でコンテナを実行・管理するためのフルマネージド型のコンテナオーケストレーションサービスです。
起動タイプにはEC2とFargateがあり、今回はサーバー管理をできるだけ意識せずに進めやすいFargateを使います。
本記事は入門編として、ECS Fargateでコンテナを起動する基本的な流れを理解することを目的としています。
ECS をこれから触ってみたい方や、まだコンテナを起動したことがない方の参考になれば幸いです。
- はじめに
- 用語の説明
- 検証構成
- CloudWatch Logsとタスク実行ロールの準備
- ECS クラスターを作成する
- タスク定義を作成する
- Fargate タスク起動
- RUNNING とログ確認
- まとめ
用語の説明
今回の検証を行うにあたり、まずは以下の用語を押さえておくと、これから行う作業の流れがイメージしやすくなります。
ECS
Elastic Container Serviceの略で、 AWS上でDockerコンテナを実行・管理するためのフルマネージド型のコンテナオーケストレーションサービスです。 起動タイプにはEC2とFargateがあります。Fargate
ECSでコンテナを動かす方法のひとつです。 サーバーを自分で用意して管理しなくても良いことが特徴です。一方で EC2 を利用する場合は、柔軟に独自設定を加えやすい反面、インスタンス管理が必要になります。
クラスター
ECSでタスクを実行するための論理的な入れ物です。
クラスターを分けることで、本番環境や開発環境を分けて管理できます。タスク定義
タスクを構成するためのテンプレートです。 使用するコンテナイメージや、CPUやメモリなどを定義します。タスク
タスク定義に基づいて起動したコンテナの実行単位です。 1つ以上のコンテナで構成されます。
検証構成
- ECS クラスター:1つ
- IAMロール:1つ(タスク実行ロール)
- タスク定義:1つ
- Fargate タスク:1つ
- CloudWatch Logs のロググループ:1つ
- VPC:1つ(既存のものを利用)
- サブネット:1つ(パブリックサブネット)
- セキュリティグループ:1つ(HTTP 80 を許可したもの)
※最後にブラウザ確認のために必要となります。
※インバウンドルールはソースをAnywhereにせず、My IPなどに制限しておくと安全です。 - コンテナイメージ:nginx 公式イメージ
CloudWatch Logsとタスク実行ロールの準備
nginxコンテナの起動確認にあわせて、CloudWatch Logsでもログを確認できるようにロググループを作成していきます。
1.CloudWatch Logs のロググループを作成する
1.AWSマネジメントコンソールで CloudWatch を開く
2.左メニューから ログ管理 > ロググループ > ロググループを作成 をクリック
3.ロググループ名 に任意の名前を設定する。
例:/ecs/nginx-test-task-20260507
4.保持期間を設定 に必要なログ保持期間を設定する。
※今回は検証用のため、7日を選択
5.ログクラス にスタンダードを選択する。
6.KMS キー 今回は検証のため使用しません。
同様に削除保護にもチェックを入れず、デフォルトのままでOKです。
7.作成 をクリック
このロググループ名は以降のタスク定義時にを使用します。
2. タスク実行ロールを作成する
次に、FargateタスクがCloudWatch Logsにログを書き込めるようにするため、タスク実行ロールを作成します。
1.AWS マネジメントコンソールで IAM を開く
2.左メニューから ロール を開く
3.ロールを作成 をクリック
4.信頼されたエンティティタイプで AWS のサービス を選択する
5.サービスまたはユースケースで Elastic Container Service を選択 > ユースケースからElastic Container Service Task を選択 > 次へ
許可ポリシーに AmazonECSTaskExecutionRolePolicy を選択 > 次へ
6.ロール名に任意の名前を入力する
7.ロールを作成 をクリック
ECS クラスターを作成する
CloudWatch Logsでログを確認できる準備ができたので、次はタスクを実行するための土台となるECSクラスターを作成します。
1.AWS マネジメントコンソールで Amazon Elastic Container Service を開く
2.左メニューから クラスター を選択する
3.クラスターを作成 をクリック
4.クラスター名に任意の名前を入力する
例:ecs-test-cluster-20260507
5.インフラストラクチャ:Fargate のみ
6.Container Insights :オフになっています にチェック
7.ECS Exec の暗号化とロギング欄では以下を選択
・ECS Exec セッションの KMS キー ID:未選択
・ECS Exec のログ記録:なし
※今回はECS Exec でコンテナに入って操作する検証はしていないのでKMS キーIDとログの記録は不要です。
8.作成をクリック
作成後は概要欄のステータスが正常であり、インフラストラクチャ タブからキャパシティープロバイダーがFargateであることを確認します。
タスク定義を作成する
土台となるコンテナまで作成できました。
次はこのコンテナをどのような設定で起動するかを定義するため、タスク定義を作成していきます。
1.AWS マネジメントコンソールで Amazon Elastic Container Service を開く
2.左メニューから タスク定義 を選択する
3.新しいタスク定義の作成 をクリック > 新しいタスク定義の作成をクリック
4.タスク定義の設定欄から、タスク定義ファミリーに任意の名前を入力します。
例:nginx-test-task-20260507
5.インフラストラクチャの要件欄は以下のように設定します。
・起動タイプ : AWS Fargate を選択
・オペレーティングシステム/アーキテクチャ:Linux / X86_64
・CPU: 0.25 vCPU
・メモリ:0.5 GB
※今回はnginx コンテナを 1 つ起動して動作確認するだけなので、最小構成に近いサイズを選択しています。
・タスク実行ロール:先ほど作成したタスク実行ロールを選択
タスクロールは今回は設定しないので選択なしでOKです。
6.続いて、コンテナの設定です。以下の内容で設定していきます。
・名前:nginx
・必須コンテナ:はい
・イメージ URI: nginx:latest
ポートマッピング で以下を設定
・コンテナポート: 80
・プロトコル: TCP
・ポート名: 未入力
・アプリケーションプロトコル:HTTP
※今回は最小構成での動作確認を目的としているので、読み取り専用ルートファイルシステムとリソース割り当て制限はデフォルトのままで問題ありません。

次項目の環境変数は今回の検証には不要なので、割愛して ログ記録 欄からログ設定を行いましょう。
タスク定義で以下のawslogsを設定することで、コンテナログをCloudWatch Logsに出力できます。
・ログ収集の使用:チェック
・送信先:Amazon CloudWatch
・awslogs-group : 先ほど作成したロググループを選択
・awslogs-region : ap-northeast-1
・awslogs-stream-prefix : ecs
※awslogs-create-groupは指定したロググループが存在しない場合に自動作成する設定です。
今回は手動でロググループを作成しているので、気にせずデフォルトのままでOKです!

以降の項目は今回の検証には不要なので、デフォルトで問題ありません。
7.作成をクリック
作成後は、初回リビジョンとして「タスク定義ファミリー名:1」となっていれば作成できています。

Fargate タスク起動
タスク定義の作成が完了したら、次はその内容をもとにFargateタスクを起動していきましょう。
1.AWS マネジメントコンソールで Amazon Elastic Container Service を開く
2.左メニューから クラスター を選択する
3.先ほど作成したクラスターを開く
4.タスク タブ > 新しいタスクの実行 をクリック
5.タスクの詳細欄は以下のように設定します。
・タスク定義ファミリー :先ほど設定したタスク定義ファミリーを選択
・タスク定義のリビジョン: 1
・必要なタスク数: 1
・タスクグループ:設定しない
6.環境欄では以下のように設定します。
・コンピューティングオプション:キャパシティープロバイダー戦略
・キャパシティープロバイダー: FARGATE
ベースとウェイトはデフォルトのまま
・プラットフォームバージョン:LATEST
7.ネットワーキングの欄は以下のように設定します。
今回はブラウザからnginxのデフォルトページを確認したいので、パブリックサブネットを利用し、パブリックIPを有効にしています。
・VPC:任意のものを選択
・サブネット:パブリックサブネット を1つ選択
・セキュリティグループ:HTTP 80 を許可したものを選択
・パブリック IP:オンになっています
以降の設定はデフォルトのままで問題ありません。
8.作成をクリック
RUNNING とログ確認
Fargateタスクを作成したあとは、想定どおりにコンテナが起動しているかを確認していきましょう!
1. タスクが RUNNING になっていることを確認する
まずは、クラスターの タスク タブから対象タスクを開き、ステータスを確認します。
前回のステータスと必要なステータスが実行中であれば起動していると判断できます。
では、次にコンテナの状態はどうでしょうか。
画面下のコンテナ欄を見てみます。
こちらも想定したコンテナ名で、ステータスもRunning状態です。

問題なく起動できたことが確認できました。
2.コンテナログを確認する
では次に、nginxコンテナのログを確認していきます。
対象のタスクの ログ タブを開くと、コンテナのログを確認できます。
このようにログ欄にログが出力され、エラーが発生した場合は、[error] などのログが出力されることがあります。
今回は以下のようなログが出力され、いずれもエラーではなく、nginx のワーカープロセスが起動していることを示すログです。
[notice] 1#1: start worker process [notice] 1#1: start worker process 30
nginx のワーカープロセスが正常に起動していることを確認できました。
また、上記のタスク画面のログタブに加えて、CloudWatch側からもログを確認できます。
確認する場合は、以下の順にたどります。
CloudWatch > ログ管理 > 対象のロググループ > ログストリーム
ログストリームを開くと、このようにログイベントを確認できます。
これにより、必要なタイミングで CloudWatch 側からもログを確認できます。
3.ブラウザから起動を確認する
最後に、ブラウザから実際にアクセスできるかを確認します。
今回は、タスクに割り当てられた Public IPにアクセスし、nginxのデフォルトページが表示されることを確認します。
対象のタスクを開き、設定欄のパブリックIPに記載されているIPを使用して、ブラウザで以下のようにアクセスします。
http://<Public-IP>
アクセスすると、nginxのデフォルトページが表示されました。

この画面が表示されことで、以下を確認することができます。
・Fargateタスクが正常に起動している
・nginxコンテナが HTTP で応答できている
・ネットワーク設定とセキュリティグループの設定に問題がない
まとめ
今回は、ECS Fargateでnginxコンテナを起動する最小構成を検証し、基本的な流れを確認できました。
検証用の最小構成として、タスクに直接割り当てられたパブリック IP を利用して動作確認を行いましたが、本番運用では ALB を利用する構成が一般的です。
今後は、今回の最小構成を起点に、ALBやECS Serviceなどを組み合わせた構成もご紹介していきます。




