
こんにちは、TC部所属のN.Nです。
AWSのコンテナサービスであるECSについて、「基本的な仕組み」と「最低限の構築手順」を試しました。検証してみてわかったことをまとめましたので、参考になれば幸いです。
ECSはコンテナを簡単に実行・管理できるサービスです。
これは、コンテナ実行環境の管理負担を、軽減したい場合に有効です。(ECSでは、コンテナの配置やスケーリング、ヘルスチェックなどが自動化されるため、コンテナ実行環境のインフラ運用にかかる、負担軽減が期待できます。)
この記事はこんな方におすすめです。
- コンテナってそもそもなに?
- AWSは触ったことがあるが、ECSは初めて
- ECSの基本的な仕組みを把握したい
概要
AWSのコンテナサービスは、一般的なコンテナの概念を基盤としています。まず、一般的なコンテナの概要から説明します。
一般的なコンテナの概要
コンテナとは?
アプリケーションの実行に必要な依存物(OS、ミドルウェア、アプリケーション)をパッケージ化したものです。

パッケージ化することで、「必要なパッケージが入っていない」あるいは「ランタイムとライブラリに整合性が取れていない」などの複数環境で起こりうる"差分"を無くすことができます。

オーケストレーターとは?
コンテナ①、コンテナ②、、、のように複数のコンテナを効率的に管理・運用するための機能がオーケストレーターです。スケーリング設定や自動デプロイ機能もあり、本番環境で重宝する機能です。
コントロールプレーンとデータプレーンとは?
コンテナ技術を活用するには、コントロールプレーンとデータプレーンという2つの概念を理解することが必要です。これに加えて、リポジトリの理解も欠かせません。

コントロールプレーン
コンテナの管理・制御を行います。コンテナの配置、スケーリング設定など、コンテナのライフサイクル全体を管理します。代表例はGoogleが開発した「Kubernetes」です。
データプレーン
実際にコンテナが動作し、ワークロード(アプリケーション)を実行する「実行環境」です。データプレーン上でネットワーク通信やストレージのやり取りなど、実際のデータの処理が行われます。代表例は、Docker社が提供する「Docker」です。
リポジトリ
OS、ミドルウェア、アプリケーションが一つになったコンテナのイメージを保管するためのものです。代表例はDocker社が提供する「Docker Hub」とGitHubが提供する「GitHub Container Registry」です。
AWSのコンテナの概要
AWSでは、コンテナを管理するコントロールプレーンにECSやEKS、コンテナが稼働するデータプレーンにEC2やFargate、そしてコンテナイメージを保管するリポジトリにECRというサービスがあります。

今回はECS on Fargeteの構成で構築するため、ECS、Fargateを紹介します。
コントロールプレーン側:ECSとは?
Amazon Elastic Container Service (以下、ECS) は、AWSが提供するフルマネージドなオーケストレーターです。ECSは以下の要素から構成されます。
- タスク
- 実行中のコンテナのこと
- タスク定義
- タスクの個数や使用するイメージのCPUやメモリを定義する
- サービス
- タスクを管理する機能
- 指定したタスク数を維持しようとしてくれる
- クラスター
- ECSのサービスやタスクを実行するためのグループのこと

データプレーン側:Fargateとは?
AWS Fargete(以下、Fargete)は、ECSやEKSでコンテナを実行するためのサーバレスなデータプレーンです。
サーバやOSの管理が不要でインフラの運用不可を大幅に軽減できます。
AWSコンテナサービスのアーキテクチャ
コンテナのアーキテクチャは、コントロールプレーンとデータプレーンの組み合わせで構成されます。コストや拡張性、信頼性などから最適な組み合わせを選ぶ必要があります。
例)ECS on EC2、ECS on Fargete etc...

構築してみよう
構成図
今回、構築する構成は以下となります。
※通常ECSはセキュリティの観点からプライベートサブネットに配置されますが、今回は検証のためパブリックサブネットに配置します。

流れ
今回はWebサーバを動かすコンテナを、ECSで起動させるために構築してみましょう。
構築手順は以下となります。
- ネットワーク周りの構築
- ECSの構築
- アクセスの確認
※今回のメインはECSです。ネットワーク周りの構築手順は要約して記載します。
※必要なIAMロールなどは、作成されている前提とします。
※こちらの参考サイトに従い、構築しました。
1.ネットワーク周りの構築
以下のリソースを作成してください。
※設定は基本、デフォルト値です。
- VPC ×1
- Subnet
- AZ-a用 ×1
- AZ-c用 ×1
- RouteTable ×1
- InternetGateway ×1
- SecurityGroup
- ALB用 ×1
- ECS用 ×1
- ALB ×1
- TargetGroup ×1








2.ECSの構築
タスク定義を作成
主な設定
- 起動タイプ
- AWS Fargate、EC2、マネージドインスタンスから選択可能
- AWS Fargeteを選択
- OS
- Linux/X86_64、Linux/ARM64、Windows Server 2022 Full/X86_64などから選択可能
- Linux/X86_64を選択(デフォルト値)
- ネットワークモード
- awsvpc、bridge、ホスト、なしから選択可能
- awsvpcを選択(デフォルト値)
- タスクロール
- ecsTaskExecutionRoleを選択(事前に作成しておく)
- 作成方法はこちら↓
- イメージURI(Uniform Resource Identifier)
- ECRパブリックギャラリーで公開されているイメージURIを貼り付け
- URIの取得はこちら↓
https://gallery.ecr.aws/nginx/nginx
-
- (今回は検証のためAWSが公開しているイメージURIを使用しました。自作のイメージURIを使用することももちろん可能です。)


タスク定義を作成できました。
プライベートレジストリについて(赤枠参照)
実際の案件では、認証情報の保護の観点からプライベートレジストリは「オン」にしておきましょう。
詳細はこちら↓
Amazon ECS での AWS 以外のコンテナイメージの使用 - Amazon Elastic Container Service
クラスターの作成
主な設定
- クラスター名
- インフラストラクチャ
- AWS Fargete(サーバーレス)を選択

サービスの作成
主な設定
- タスク定義のリビジョン
- 1を入力
- タスク定義の内容(設定)を変更するたびに自動で採番されるバージョン番号であり、タスクの実行時にどの設定を使うかを指定するために利用される
- 必要なタスク
- 検証なので1を入力
- 常に稼働状態を維持してほしいタスク数を入力します
- VPC、Subnet、SecurityGroup
- 先ほど作成したリソースを選択
- ロードバランシング
- 先ほど作成したALBを選択後、既存のリスナーとターゲットグループを選択
追加設定
- サービスの自動スケーリング
- アプリケーションの負荷に応じて稼働中のタスク数を自動で増減させる機能です。自動スケーリングを希望するのであれば、有効にしてください。
- 現時点では無効にする








3.アクセスの確認
ECS周りも作成できたので、ALB経由でコンテナにアクセスできるのか確認しましょう。
ALBのURLをコピーします。(赤枠参照)

ブラウザで検索します。
Nginxのデフォルトページが表示されました!

これで、Nginxが正しくコンテナ内で起動し、外部からのアクセスを受け付けていることが確認できました。
運用設計について
ECS on Fargateを運用する上で設計すべき項目は、ログ、メトリクス、イメージ、セキュリティ、負荷分散、障害対策、スケーリングなど多岐にわたります。
実際に案件で設定する際は、公式の以下のサイトをご確認ください。
Amazon ECS のモニタリング - Amazon Elastic Container Service
Amazon ECS トラブルシューティング - Amazon Elastic Container Service
Amazon ECS でコンテナをスケジュールする - Amazon Elastic Container Service
Amazon Elastic Container Service のセキュリティ - Amazon Elastic Container Service
まとめ
今回のブログでは記載しませんでしたが、タスクの自動復旧やスケール設定も検証してみました。実際の案件では、このようなマネージド機能を上手に活用していく必要があると思いました。
今回は、必要最小限の構築でしたが、次回は、タスクのログ管理やモニタリングをさらに深掘りし、実運用に耐えうる構成を考えてみたいです。
【関連記事】
参考サイト
Amazon ECS タスク実行IAM ロール - Amazon Elastic Container Service
https://gallery.ecr.aws/nginx/nginx
Amazon ECS での AWS 以外のコンテナイメージの使用 - Amazon Elastic Container Service
スタートアップのためのコンテナ入門 – 導入編 | AWS Startup ブログ
この記事を書いた人

ニックネーム:NN
経歴:入社3年目です。主にAWSのインフラ案件に携わってきました。最近はBIツールにも触れています。
一言:港町や海沿いの風景が好きです。写真は、横浜の海を撮影したものです。神戸や熱海、舞浜のあたりも好きです。
資格取得も支援しています!詳しい職種紹介・募集要項はリクルートサイトへ