※これは Japan AWS Jr.Champions の活動である「コンテナ・サーバレス もくもく会」で実施したハンズオンのアウトプットです。
🧭 はじめに
PJでコンテナ(EKS)上の基幹システム構築は経験しているんですが…
- ロールの関係上、業務では全然コンテナに触らない
- そもそも AWS周りのコンテナサービスに全然触ったことが無い!
ということで、
Japan AWS Jr.Championsの活動である 「コンテナ・サーバレス もくもく会」 に参加し、
AWSのコンテナサービスに時間の許す限り触ってみることにしました。
🐳 今回のゴール
まずは AWSに閉じた話での入門編 ということで、今回は以下を実施しました👇
- 事前準備:ECRにイメージをプッシュする
- ECS:簡単なタスクをFargate環境で実行してみる
- AWS Batch:ECS(Fargate)を動かしてみる
🛠️ ハンズオンの狙い
- ECR / ECS / AWS Batch といった AWSコンテナサービスの基本概念 を理解する
- 実際にコンテナを動かしながら 構成要素や流れ を整理する
本記事では、②ECS:簡単なタスクを実行してみるを実施してみたいと思います。
ECSについて
🧩 ECSの主要構成要素
ECS(Elastic Container Service)は、複数のリソースを組み合わせてコンテナを実行・管理するサービスです。
ECSを構成する基本的な要素である 「クラスター」、「タスク定義」、「タスク」 について、簡単に整理しておきます👇
🏗️ クラスター(Cluster)
ECS クラスターは、ECS タスクやサービスの実行基盤をまとめる論理的なグループ です。
実際のコンテナはこのクラスター上で起動されます。
主な設定要素
-
インフラタイプ:
FargateまたはEC2を選択(インフラ管理有無が変わる) - モニタリング / ログ:CloudWatch との連携やメトリクスの収集設定
📦 タスク定義(Task Definition)
タスク定義は、「どのようなコンテナを、どんなリソース構成で、どう実行するか」 を定義するテンプレートです。
ECS ではこのタスク定義をもとに、実際のタスクを起動します。
主な設定要素
- コンテナ情報:使用するイメージ(ECRなど)、ポート、環境変数など
- 実行リソース:CPU / メモリ、OSタイプ(Linux / Windows)
-
タスクロール / 実行ロール:
- タスクロール:コンテナが AWS リソースにアクセスするための IAM ロール
- タスク実行ロール:ECR Pull や CloudWatch Logs への出力など ECS 側で必要な権限
- ログ設定:CloudWatch Logs などへの出力設定
🚀 タスク(Task)
タスクは、タスク定義をもとに実際に起動されたコンテナの実体 です。
1つのタスクには1つ以上のコンテナが含まれ、ECS クラスター上で実行されます。
主な設定要素
- 起動タイプ:Fargate または EC2
- コンピューティング設定:CPU / メモリの割り当て、キャパシティプロバイダー戦略
- ネットワーク設定:VPC / サブネット / セキュリティグループ / パブリックIPの有無
- タスク実行数:同じタスク定義から複数のタスクを並列で実行可能
- ログ / ステータス:CloudWatch Logsへの出力、ECSコンソール上でステータス確認
📝 まとめ
| 要素名 | 役割 | 主な設定内容 |
|---|---|---|
| クラスター | タスクの実行基盤となるリソースグループ | 起動タイプ、キャパシティプロバイダー、モニタリング |
| タスク定義 | コンテナ実行のテンプレート | コンテナ情報、リソース設定、ロール、ログ設定 |
| タスク | タスク定義をもとに起動された実行体 | コンピューティング設定、ネットワーク設定、実行数 |
この3要素を理解しておくと、ECSの全体像と構成の流れが掴みやすくなりました。。
ハンズオン実施概要
今回は、S3からCSVファイルを取得し、再度S3にファイルを出力する、という超簡単な処理を動かしてみます。
ハンズオンの実施概要は以下。
- IAMロールの作成
- クラスターの作成
- タスク定義の作成
- タスクの起動
① IAMロールの作成
まずは ECS タスクで利用する IAM ロールを作成します。
このロールは後続の「タスク定義」で タスクロール および タスク実行ロール として利用します。
信頼されたエンティティにてAWSサービス、ユースケースにてElastic Container Service Taskを選択。

続いて、ポリシーをアタッチしていきます。
ECSに対して付与してあげる必要がある権限は以下2つ。
①ECRイメージのPullやCloudWatchへのログの出力等、コンテナ基盤がAWSリソースに対してActionを実行するための権限
②今回であればS3からのファイル取得・出力等、アプリケーションがAWSリソースを操作する際の権限。
①に関してはAWSマネージドロールである「AmazonWCSTaskExecutionPolicy」を付与してあげれば、ECSからの基本的なAWSリソースに対する操作は可能となります。
②に関しては、今回はS3に対して操作を行うので、S3のFullAccess権限を付与します。
(細かい権限制御は割愛)

② クラスターの作成
まずは ECS のクラスターを作成します。
このクラスター内で、実際のタスクが動作します。
今回は「とりあえず動かす」ことを目的に、Fargate を選択します。
Fargate はサーバを意識する必要がないため、学習・検証用途に便利です。
その他の設定はすべてデフォルトのままで OK です。
作成完了後、このクラスター上で実行されているサービスやタスクの一覧を確認できます👇
③ タスク定義の作成
続いて、ECS タスク定義を作成します。
インフラストラクチャ要件 の項目で、以下のように設定します。
- タスクロール:①で作成した IAM ロールを指定
- タスク実行ロール:同じく①のロールを指定(今回はまとめています)
💡 タスクロールとタスク実行ロールの違い
- タスクロール:今回であればS3からのファイル取得・出力等、アプリケーションがAWSリソースを操作する際の権限
- タスク実行ロール:ECRイメージのPullやCloudWatchへのログの出力等、コンテナ基盤がAWSリソースに対してActionを実行するための権限
続いてコンテナの設定で、参照する ECR のイメージ を指定します。
ここで実際に動作する処理を含むコンテナイメージを設定します。
その他の設定はデフォルトで OK です。
ここまでで、タスク実行の準備が整いました。
④ タスクの実行
ECS では、サービスやタスクはクラスター内で管理されます。
そのため、対象クラスターのページから 「新しいタスクの実行」 を押下してタスクを起動します。
作成したタスク定義を選択して実行する処理を指定します。
🧰 コンピューティング設定とは
ECS の「コンピューティング設定」とは、タスクをどのような環境で実行するか を決める設定です。
ここでは主に以下の2つの観点で構成されます👇
-
起動タイプ(Launch Type)
→ タスクを「Fargate」で動かすか、「EC2」で動かすかを選択します。- Fargate:インフラ管理不要。CPU / メモリを指定するだけでタスクが実行できる。
- EC2:あらかじめ構築した ECS 対応の EC2 インスタンス上でタスクを実行。より柔軟な制御が可能。
-
キャパシティプロバイダー戦略(Capacity Provider Strategy)
→ 起動タイプをより柔軟に管理するための仕組み。
たとえば「通常は Fargate を使うが、必要に応じて EC2 も利用する」といった複合的な実行戦略を組むことも可能です。
単純なケースでは「起動タイプ(Fargate)」を直接選ぶ形でも問題ありません。
今回はシンプルなハンズオンなので 起動タイプ=Fargate を選択し、特別な戦略は設定していません。
🌐 ネットワーキング設定とは
ネットワーキング設定では、タスクがどの VPC/サブネット/セキュリティグループ上で通信を行うか を定義します。
ECS の Fargate タスクでは awsvpc ネットワークモードが強制され、タスクごとに ENI(Elastic Network Interface)が割り当てられる 形になります。
タスクが実行されるためには、以下のような通信要件を満たす必要があります👇
| 通信元 | 通信先 | 内容 |
|---|---|---|
| タスク(ENI) | ECR | コンテナイメージの Pull |
| タスク(ENI) | CloudWatch Logs | ログ出力 |
| タスク(ENI) | その他 AWS サービス(例:S3) | 処理対象データへのアクセスなど |
| クラスター制御プレーン | タスク | タスクのライフサイクル管理(ENI経由) |
🔸 つまり、「タスクの実行環境(ENI)」が、必要な宛先(ECR、CloudWatch Logs、S3 など)と通信可能であることが前提となります。
🏗️ 今回のネットワーク構成
今回のハンズオンでは、プライベートネットワーク環境は特に作成せず、
AWS アカウント作成時に自動で用意されている Default VPC/パブリックサブネット を利用しました。
- サブネット:Default VPC 内のパブリックサブネット
- インターネット接続:インターネットゲートウェイ(IGW)経由
- セキュリティグループ:デフォルトの SG(全トラフィック許可)
- NAT ゲートウェイ:未使用(パブリックサブネットのため不要)
📝 そのため、今回の構成ではタスクにパブリック IP が割り当てられ、ECR や CloudWatch Logs などの AWS サービスへ直接アクセスできる状態になっています。
⑤ タスクの実行結果確認
設定完了後、タスクを実行します。
実行状況はクラスターの「タスク」一覧で確認可能です👇
ℹ️ 補足:ECS タスクのライフサイクルには「正常終了」というステータスはなく、実行完了後は「停止済み(STOPPED)」となります。
公式ドキュメントはこちら
タスクを選択し、「ログ」タブを開くと CloudWatch Logs に出力された実行ログを確認できます。
📝 実行処理の確認
今回のタスクでは、S3 バケットから CSV ファイルを取得し、getOK.csv を出力する処理を実行しました。
実行後
正常にファイルが出力されていることが確認できました👇

🏁 おわりに
今回は ECS タスクの実行までをハンズオン形式で実施しました。
まだサービス構成や運用保守まわりなど深掘りできる要素は多いですが、
ECS の基本構造と、タスク実行の流れを実際に手を動かしながら理解できました。









