0
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?

【AWSコンテナ入門】②ECSで簡単なタスクを実行してみる

Posted at

※これは Japan AWS Jr.Champions の活動である「コンテナ・サーバレス もくもく会」で実施したハンズオンのアウトプットです。

🧭 はじめに

PJでコンテナ(EKS)上の基幹システム構築は経験しているんですが…

  • ロールの関係上、業務では全然コンテナに触らない
  • そもそも AWS周りのコンテナサービスに全然触ったことが無い!

ということで、
Japan AWS Jr.Championsの活動である 「コンテナ・サーバレス もくもく会」 に参加し、
AWSのコンテナサービスに時間の許す限り触ってみることにしました。


🐳 今回のゴール

まずは AWSに閉じた話での入門編 ということで、今回は以下を実施しました👇

  1. 事前準備:ECRにイメージをプッシュする
  2. ECS:簡単なタスクをFargate環境で実行してみる
  3. 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にファイルを出力する、という超簡単な処理を動かしてみます。
ハンズオンの実施概要は以下。

  1. IAMロールの作成
  2. クラスターの作成
  3. タスク定義の作成
  4. タスクの起動

① IAMロールの作成

まずは ECS タスクで利用する IAM ロールを作成します。
このロールは後続の「タスク定義」で タスクロール および タスク実行ロール として利用します。

信頼されたエンティティにてAWSサービス、ユースケースにてElastic Container Service Taskを選択。
image.png

続いて、ポリシーをアタッチしていきます。
ECSに対して付与してあげる必要がある権限は以下2つ。
①ECRイメージのPullやCloudWatchへのログの出力等、コンテナ基盤がAWSリソースに対してActionを実行するための権限

②今回であればS3からのファイル取得・出力等、アプリケーションがAWSリソースを操作する際の権限。

①に関してはAWSマネージドロールである「AmazonWCSTaskExecutionPolicy」を付与してあげれば、ECSからの基本的なAWSリソースに対する操作は可能となります。

②に関しては、今回はS3に対して操作を行うので、S3のFullAccess権限を付与します。
(細かい権限制御は割愛)
image.png


② クラスターの作成

まずは ECS のクラスターを作成します。
このクラスター内で、実際のタスクが動作します。

今回は「とりあえず動かす」ことを目的に、Fargate を選択します。
Fargate はサーバを意識する必要がないため、学習・検証用途に便利です。
その他の設定はすべてデフォルトのままで OK です。

image.png

作成完了後、このクラスター上で実行されているサービスやタスクの一覧を確認できます👇

image.png


③ タスク定義の作成

続いて、ECS タスク定義を作成します。
インフラストラクチャ要件 の項目で、以下のように設定します。

  • タスクロール:①で作成した IAM ロールを指定
  • タスク実行ロール:同じく①のロールを指定(今回はまとめています)

💡 タスクロールとタスク実行ロールの違い

  • タスクロール:今回であればS3からのファイル取得・出力等、アプリケーションがAWSリソースを操作する際の権限
  • タスク実行ロール:ECRイメージのPullやCloudWatchへのログの出力等、コンテナ基盤がAWSリソースに対してActionを実行するための権限

image.png

続いてコンテナの設定で、参照する ECR のイメージ を指定します。
ここで実際に動作する処理を含むコンテナイメージを設定します。
その他の設定はデフォルトで OK です。

image.png

ここまでで、タスク実行の準備が整いました。


④ タスクの実行

ECS では、サービスやタスクはクラスター内で管理されます。
そのため、対象クラスターのページから 「新しいタスクの実行」 を押下してタスクを起動します。

image.png

作成したタスク定義を選択して実行する処理を指定します。

image.png

🧰 コンピューティング設定とは

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 サービスへ直接アクセスできる状態になっています。

image.png


⑤ タスクの実行結果確認

設定完了後、タスクを実行します。
実行状況はクラスターの「タスク」一覧で確認可能です👇

image.png

ℹ️ 補足:ECS タスクのライフサイクルには「正常終了」というステータスはなく、実行完了後は「停止済み(STOPPED)」となります。
公式ドキュメントはこちら

タスクを選択し、「ログ」タブを開くと CloudWatch Logs に出力された実行ログを確認できます。

image.png


📝 実行処理の確認

今回のタスクでは、S3 バケットから CSV ファイルを取得し、getOK.csv を出力する処理を実行しました。

実行前
image.png

実行後
正常にファイルが出力されていることが確認できました👇
image.png


🏁 おわりに

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

0
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
0
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?