オンプレでDockerを動かしていたエンジニアがAWSのコンテナ基盤を検討し始めると、必ず「ECSのEC2起動タイプとFargate、どちらを選ぶべきか」という壁にぶつかります。EC2起動タイプならノード管理・AMIアップデート・スケーリング設定が必要で、これまでのVMware管理と大差ない手間が発生します。「コンテナのデプロイだけに集中したい」「OSパッチを当てる作業をなくしたい」という現場の声に応えたのが、AWS Fargateです。
この記事では、AWS Fargateの仕組みとEC2起動タイプとの違い、Amazon ECSを使ったFargateタスクの実際の起動手順、料金の計算方法、現場で役立つ実務TipsまでをオンプレLinux経験者向けに解説します。Dockerの基礎知識がある方を対象としています。
なぜFargateなのか?EC2との根本的な違い
オンプレのコンテナ運用では、「Dockerホストになるサーバーを用意し、OS・Dockerランタイム・セキュリティパッチを管理し、その上でコンテナを動かす」という構成が一般的です。AWSのECSでEC2起動タイプを使う場合も、本質的にはこれと同じです。ECSクラスターに登録されたEC2インスタンス(ECSコンテナエージェントが動くVM)の上でタスクが実行されます。
AWS Fargateはこのモデルを根本から変えます。FargateはAmazon ECSおよびAmazon EKSの「起動タイプ」として選択するコンピューティングエンジンで、EC2インスタンスを一切プロビジョニングせずにコンテナを実行できます。AWSが仮想マシンのプロビジョニング・OSのパッチ適用・コンテナランタイムの管理を透過的に行うため、エンジニアはタスク定義(どのコンテナイメージを、どのリソースで動かすか)だけに集中できます。
オンプレのVMware環境で例えるなら、EC2起動タイプは「自分でESXiホストを管理してVMを動かす」のに対し、Fargateは「VMの実行基盤はAWSが面倒を見てくれて、自分はコンテナのスペックだけ書けばよい」感覚です。
| 比較項目 | ECS(EC2起動タイプ) | AWS Fargate |
|---|---|---|
| サーバー管理 | EC2インスタンスの管理が必要 | 不要(AWSが管理) |
| OSパッチ | AMIの更新・ローリング交換が必要 | 不要 |
| 課金単位 | EC2インスタンスの稼働時間 | タスクのvCPU・メモリ使用時間 |
| スケーリング | クラスタースケーリング+タスクスケーリングの二段管理 | タスクスケーリングのみ |
| 起動速度 | EC2の起動待ちがある場合あり | タスク単位で数十秒 |
| 向いているケース | 特殊インスタンスが必要・コストを極限まで削りたい場面 | 多くの本番ワークロード・開発/検証環境 |
Fargateの基本的な使い方(Amazon ECS経由)
AWS FargateはAmazon ECS(またはAmazon EKS)を通じて利用します。ここではECSでFargateタスクを起動する基本的な流れをコンソール操作とAWS CLIの両面から解説します。
1. ECSクラスターを作成する
AWSマネジメントコンソールで「Elastic Container Service」を開き、「クラスターの作成」をクリックします。
・クラスター名: 任意(例: my-fargate-cluster)
・インフラストラクチャ:「AWS Fargate(サーバーレス)」を選択
・ネットワーキング: 既存のVPCとサブネットを選択(Fargateタスクはサブネット内のENIを取得するため設計が重要)
# AWS CLI でFargateクラスターを作成する場合 aws ecs create-cluster \ --cluster-name my-fargate-cluster \ --capacity-providers FARGATE FARGATE_SPOT \ --region ap-northeast-1
2. タスク定義を作成する
タスク定義はFargateの「コンテナスペック書」です。コンテナイメージ・CPU・メモリ・環境変数・ポートマッピングなどを定義します。コンソールで「タスク定義の作成」を選択し、以下を設定します。
・起動タイプ: AWS Fargate
・オペレーティングシステム: Linux/X86_64(またはLinux/ARM64でGraviton使用可)
・タスクCPU: 0.25 vCPU(256)、0.5 vCPU(512)、1 vCPU、2 vCPU、4 vCPU、8 vCPU、16 vCPUから選択
・タスクメモリ: CPUの選択に応じて設定可能な範囲が決まる(例: 1 vCPUなら2GB~8GB)
・タスク実行ロール: ecsTaskExecutionRole(ECRイメージ取得・Amazon CloudWatch Logsへの書き込み権限を含む)
# タスク定義の登録(JSON形式、AWS CLI) aws ecs register-task-definition \ --family my-fargate-task \ --requires-compatibilities FARGATE \ --network-mode awsvpc \ --cpu 512 \ --memory 1024 \ --execution-role-arn arn:aws:iam::123456789012:role/ecsTaskExecutionRole \ --container-definitions '[ { "name": "my-app", "image": "nginx:latest", "portMappings": [{"containerPort": 80, "protocol": "tcp"}], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/my-fargate-task", "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "ecs" } } } ]' \ --region ap-northeast-1
3. Fargateサービスを起動してログを確認する
タスク定義が登録できたら、ECSサービスを作成してFargateタスクを起動します。コンソールから「サービスの作成」を選び、以下を設定します。
・起動タイプ: Fargate
・タスク定義: 作成したタスク定義を選択
・サービスタイプ: レプリカ(常時N個のタスクを維持する場合)
・必要なタスク数: 1以上
・VPCとサブネット: FargateはawsvpcモードのためENIが割り当てられる。プライベートサブネット推奨
・セキュリティグループ: 通信を許可するポートを開放(例: ポート80をALBからのアクセスのみ許可)
タスクが「RUNNING」状態になったら、Amazon CloudWatchの「ロググループ」→「/ecs/my-fargate-task」でコンテナのログを確認できます。オンプレのDockerであればdocker logsで確認していた出力が、CloudWatch Logsに自動転送されます。
料金の仕組み(vCPUとメモリで課金)
AWS Fargateの料金はEC2とは根本的に異なります。EC2のような「インスタンスの稼働時間」ではなく、タスクに割り当てたvCPUとメモリの使用秒数で課金されます(2026年3月時点、東京リージョン ap-northeast-1)。
・vCPU料金: $0.05056 / vCPU / 時間
・メモリ料金: $0.00553 / GB / 時間
・最低課金時間: 1分(60秒未満は60秒に切り上げ)
【計算例】1 vCPU + 2 GB メモリのFargateタスクを1時間実行した場合:
・vCPU: $0.05056 × 1 = $0.05056
・メモリ: $0.00553 × 2 = $0.01106
・合計: 約$0.062 / 時間(約9円 / 時間、1ドル=145円換算)
EC2 t3.small(2 vCPU、2 GB)のオンデマンド価格は約$0.0272 / 時間なので、単純比較ではFargateが割高に見えます。ただし、OSやノード管理の人件費・運用コストを含めたTCO(総所有コスト)で評価することが重要です。常時稼働かつ高負荷のワークロードではEC2起動タイプ+リザーブドインスタンスが有利な場面もありますが、スパイク対応・開発環境・小規模サービスではFargateの運用コスト削減効果が上回ることが多いです。
【コスト削減】Fargate Spotを活用する
Fargate Spotは、AWSの余剰キャパシティを利用するFargate低価格プランです。通常のFargateより最大70%安く利用でき、中断可能なバッチ処理や非同期ワークロードに適しています(2026年3月時点)。
・Fargate Spot(東京リージョン): 約$0.01565 / vCPU / 時間、約$0.00172 / GB / 時間
・注意点: AWSがキャパシティを必要とする場合、2分前の通知でタスクが停止される。冪等なバッチ処理や再試行設計が必須
・設定方法: ECSサービス作成時にキャパシティプロバイダー戦略で「FARGATE_SPOT」の割合を指定する
応用・実務Tips
awsvpcモードとセキュリティグループの設計
FargateはEC2起動タイプと異なり、awsvpcネットワークモードが必須です。各タスクに専用のENI(Elastic Network Interface)が割り当てられ、それぞれ独立したIPアドレスとセキュリティグループを持ちます。
・推奨構成: Fargateタスクをプライベートサブネットに置き、ALBからのみトラフィックを受け付ける
・よくある誤り: タスクをパブリックサブネットに置いてパブリックIPを割り当てるとセキュリティリスクが高まる。特別な理由がない限り避ける
・注意点: プライベートサブネットのFargateタスクがAmazon ECRからイメージをプルするには、VPCエンドポイント(ecr.api・ecr.dkr・s3)またはNAT Gatewayが必要
コンテナイメージサイズを絞る
FargateはEC2インスタンスのローカルキャッシュがないため、タスク起動のたびにECRからイメージをプルします。イメージが大きいほど起動時間が長くなります。
・alpineやdistrolessベースイメージを活用し、本番イメージは100 MB以下を目指す
・マルチステージビルドを使い、ビルド依存物をファイナルイメージから除外する
・ECRのプルスルーキャッシュを利用するとDocker Hubの転送上限問題も回避できる
ECS Service ConnectでサービスメッシュなしのService間通信を実現する
Amazon ECS Service Connectを使うと、FargateタスクのService間通信をサービスディスカバリ+TLSで簡単に実現できます。IstioなどのフルのサービスメッシュをFargateで動かすことも可能ですが、まずService Connectで対応できるか検討することを推奨します。設定はECSサービスの「Service Connect」タブから数クリックで有効化できます。
よくあるトラブルと対処法
タスクが「PENDING」のままになる
Fargateタスクが「PENDING」状態から進まない場合、以下を確認してください。
・AWSのリソース上限: FargateにはリージョンごとのvCPU上限があります。「ECS → クラスター → タスク」タブでエラーメッセージを確認し、Service Quotasから上限緩和を申請します
・サブネットのIPアドレス枯渇: 同一サブネットにFargateタスクが多数起動するとIPアドレスが枯渇することがあります(/24サブネットで最大251個)。十分なIPアドレス空間を持つサブネットを用意してください
・ECRへの到達性: プライベートサブネットのタスクがECRからイメージをプルできない場合、VPCエンドポイントまたはNAT Gatewayの設定を確認します
タスクが起動直後に終了する(Exitコード1)
コンテナ起動直後に異常終了する場合は、Amazon CloudWatch Logsでコンテナのstdout/stderrを確認するのが最速の原因特定方法です。よくある原因は以下のとおりです。
・アプリケーションの起動スクリプトのエラー
・環境変数・シークレットの参照エラー(AWS Secrets ManagerのARN誤りなど)
・タスクに割り当てたメモリが不足(OOMKilledはCloudWatchのメトリクスで確認可能)
Fargateのコンテナにシェルで入れない
EC2起動タイプではSSHでホストに入ってコンテナを調査できますが、Fargateではホストにアクセスできません。代わりにAmazon ECS Execを使うと、Fargateタスクのコンテナに直接execできます。
# ECS Execでコンテナにシェル接続(タスク定義のenableExecuteCommandが必要) aws ecs execute-command \ --cluster my-fargate-cluster \ --task <タスクID> \ --container my-app \ --interactive \ --command "/bin/sh" \ --region ap-northeast-1
ECS Execを有効にするには、タスク定義でenableExecuteCommand: trueを設定し、タスクロールにSSMへのアクセス権限(ssmmessages:*)を付与する必要があります。AWS Systems Manager Session Managerを介して通信するため、ポート開放なしで安全にデバッグできます。
本記事のまとめ
AWS Fargateは「コンテナを動かすためのサーバー管理から解放される」ことを目的に設計されたサーバーレスコンテナ基盤です。オンプレのDockerホスト運用やEC2起動タイプからの移行先として、多くの本番ワークロードに適しています。
| ポイント | まとめ |
|---|---|
| Fargateとは | EC2インスタンス管理不要のコンテナ実行基盤。Amazon ECS/EKSの起動タイプとして選択する |
| EC2起動タイプとの違い | ノード管理・AMI更新・スケーリング設定が不要。タスク単位でvCPU/メモリを割り当てる |
| 料金 | vCPU $0.05056 / 時間+メモリ $0.00553 / GB / 時間(東京リージョン、2026年3月時点)。Fargate Spotで最大70%削減可能 |
| ネットワーク | awsvpcモード必須。タスクごとにENIが割り当てられ、セキュリティグループを直接アタッチできる |
| デバッグ | CloudWatch Logsでログ確認、ECS Execでコンテナ直接接続(SSH不要) |
| 向いている用途 | Webサービス・バッチ処理・CI/CDパイプライン実行環境・開発および検証環境 |
Linuxサーバーの基礎については、姉妹サイトLinuxMaster.JPで詳しく解説しています。コンテナの基盤となるLinuxのプロセス管理・ファイルシステム・ネットワーク知識はFargate運用にも直結します。
Fargateを使いこなして、コンテナ運用の手間を本当になくしませんか?
EC2管理の煩わしさから解放され、コンテナの設計・デプロイに集中できる環境を手に入れるには、体系的な知識が不可欠です。
オンプレの経験を活かしながら、現場で使えるクラウドスキルを体系的に身につけたい方へ、メルマガで実践的なクラウド活用ノウハウをお届けしています。
