はじめに
AWSを勉強していると、「Fargate」という名前をよく見かけます。
調べてみても「サーバーレスでコンテナを実行できる」としか書いておらず、「いや、それって結局何してるの?」と思いませんか?
本記事では、Fargateがつまり何をしてくれるサービスなのかを、コンテナの基礎からざっくり理解できるようにまとめました。
そもそもコンテナって何?
Fargateを理解するためには、まず「コンテナ」を知っておく必要があります。
コンテナとは、アプリケーションとその実行に必要なものをひとまとめにパッケージしたものです。
たとえば、自分のPCで動いているWebアプリを別のサーバーで動かそうとすると、「ライブラリのバージョンが違う」「OSの設定が違う」などの理由でうまく動かないことがありますよね。
コンテナは、アプリ本体+必要なライブラリ+設定ファイルなどをまるごと箱詰めして、どこでも同じように動く状態にしてくれます。
「このPC上では動くのに、別の環境では動かない...」という問題を解消してくれるのがコンテナです。
コンテナを動かすには「サーバー」が必要
コンテナは便利ですが、当然どこかのサーバー(=コンピュータ)の上で動かす必要があります。
AWSでコンテナを動かすサービスとして有名なのが Amazon ECS(Elastic Container Service) です。
ECSは「どのコンテナを、いくつ、どうやって動かすか」を管理してくれるサービスです。
ただし、ECSを使う場合、コンテナを実行する「土台」となるサーバーをどうするかという問題が出てきます。
従来は、EC2インスタンス(仮想サーバー)を自分で用意して、その上でコンテナを動かしていました。
[自分で管理する範囲]
┌──────────────────────────┐
│ EC2インスタンス(サーバー) │ ← OSのアップデート、セキュリティパッチ...
│ ┌────────┐ ┌────────┐ │
│ │コンテナA│ │コンテナB│ │ ← アプリはこっち
│ └────────┘ └────────┘ │
└──────────────────────────┘
この方法だと、コンテナだけでなくEC2インスタンスの管理もしなければなりません。
OSのアップデート、セキュリティパッチの適用、キャパシティの調整...
アプリを動かしたいだけなのに、サーバーの面倒まで見るのは大変ですよね。
Fargateは「サーバーの管理を丸投げ」できるサービス
ここでFargateの出番です。
AWS Fargateは、コンテナを動かすためのサーバーをAWSが裏側で勝手に用意・管理してくれるサービスです。
[自分で管理する範囲]
┌────────┐ ┌────────┐
│コンテナA│ │コンテナB│ ← ここだけ気にすればOK
└────────┘ └────────┘
─────────────────────────
[AWSが管理する範囲]
┌──────────────────────────┐
│ サーバー(見えない) │ ← Fargateが裏側でやってくれる
└──────────────────────────┘
つまりFargateを使えば、自分はコンテナ(=アプリ)のことだけを考えればよくなるわけです。
Fargateを一言でまとめると、「コンテナを動かすためのサーバーを、自分の代わりにAWSが用意・管理してくれるサービス」 です。
ECS + EC2 と ECS + Fargate の違い
ECSでコンテナを動かすとき、起動タイプとして「EC2」か「Fargate」かを選べます。
それぞれの違いを表にまとめました。
| 項目 | ECS + EC2 | ECS + Fargate |
|---|---|---|
| サーバーの管理 | 自分でEC2を用意・管理 | AWSにおまかせ |
| OSのパッチ適用 | 自分でやる | 不要 |
| スケーリング | EC2の台数を自分で調整 | コンテナ単位で自動 |
| 料金体系 | EC2インスタンスの稼働時間 | コンテナが使ったCPU・メモリの分だけ |
| 向いているケース | 細かいサーバー設定が必要な場合 | インフラ管理をなるべくしたくない場合 |
Fargateは手軽ですが、EC2起動タイプに比べてコストが割高になるケースもあります。大量のコンテナを常時稼働させる場合などは、EC2のほうがコストパフォーマンスが良いこともあるので、要件に合わせて選びましょう。
Fargateの料金の仕組み
Fargateは使った分だけ課金される仕組みです。
課金対象は以下の2つです。
- vCPU:コンテナに割り当てたCPUの量 × 稼働時間
- メモリ:コンテナに割り当てたメモリの量 × 稼働時間
EC2のように「インスタンスを立てている時間」ではなく、コンテナが実際に動いている時間だけなので、バッチ処理のように「必要なときだけ動かす」用途では無駄なコストが発生しにくいです。
Fargateがよく使われるユースケース
- Webアプリのバックエンド:APIサーバーをコンテナで動かし、リクエスト数に応じてスケール
- バッチ処理:定期的なデータ処理をコンテナで実行し、終わったら自動で停止
- マイクロサービス:複数の小さなサービスをそれぞれコンテナで独立して運用
まとめ
| 疑問 | 回答 |
|---|---|
| Fargateって何? | コンテナを動かすサーバーをAWSが管理してくれるサービス |
| 何が嬉しいの? | サーバーの管理(OS更新、スケーリングなど)から解放される |
| どうやって使うの? | ECS(またはEKS)の起動タイプとしてFargateを選ぶ |
| 料金は? | コンテナが使ったCPU・メモリの分だけ(使った分だけ課金) |
Fargateの本質は、「コンテナを動かすためのインフラ管理をAWSに任せて、自分はアプリだけに集中できるようにする」 ことです。
「サーバーレスでコンテナを実行」という説明の裏側にあるのは、こういうシンプルな話でした。