Fargateの料金計算方法

AWS初心者が AWS pricing calculatorで Fargateの料金見積もりをした際、
分かりにくかったポイントをまとめました。

## 要約
- タスク数と平均タスク継続時間の設定が重要

## 入力項目一覧

| # | 項目 | 入力 | 解説 |
| --- | --- | --- | --- |
| 1 | Choose a Region | Asia Pacific（Tokyo） 等 | 東京リージョンなど、[リージョン](https://aws.amazon.com/jp/about-aws/global-infrastructure/regions_az)を選択 |
| 2 | Operating system | Linux or Windows | Linuxのほうが安い。 |
| 3 | CPU Architecture | x86 or ARM | CPUの種別については、[解説記事](https://it-textbook.com/archives/617/)参照。 |
| 4 | Number of tasks or pods | 10 per day 等 | 秒、分、時、日、月あたりのタスクの数 |
| 5 | Average duration | 2 hours 等 | 平均タスク継続時間 (秒、分、時、日) |
| 6 | Amount of vCPU allocated | 0.25、0.5、1、2、4、8、16 | vCPU（[仮想CPU](https://e-words.jp/w/%E4%BB%AE%E6%83%B3CPU.html) ）数を選択。 |
| 7 | Amount of memory allocated | 8GBなど | 選んだvCPU数によって、選択範囲や増分が異なる。 |
| 8 | Amount of [ephemeral storage](https://aws.amazon.com/jp/blogs/news/amazon-ecs-on-aws-fargate-now-enables-customers-to-configure-ephemeral-storage-up-to-200gib//) allocated for Amazon ECS | 20GB~200GBまで1GB単位 | コンテナ向けの一時的に占有可能なデータ保管領域（[エフェメラルストレージ](https://e-words.jp/w/%E3%82%A8%E3%83%95%E3%82%A7%E3%83%A1%E3%83%A9%E3%83%AB.html)）。最初の20GBは無料で超過分だけ課金。 |

## 料金について

### 計算式
合計金額（月額）　＝　vCPU利用料＋ メモリ利用料 ＋ エフェメラルストレージ利用料

vCPU利用料　＝　月間タスク数([注1](https://www.notion.so/AWS-Fargate-09f7040e00bd4051ad94f3ae3918ff21?pvs=21)) × vCPU数 × 平均タスク継続時間 × vCPU料金
メモリ利用料　＝　月間タスク数 × メモリ容量 × 平均タスク継続時間 × メモリ料金  
エフェメラルストレージ利用料 =　月間タスク数 × 課金ストレージ容量([注2](https://www.notion.so/AWS-Fargate-09f7040e00bd4051ad94f3ae3918ff21?pvs=21)) × 平均タスク継続時間 × エフェメラルストレージ料金

**月間タスク数 × 平均タスク継続時間**がすべての要素に共通因数として含まれるので、
合計金額 ＝　**月間タスク数 × 平均タスク継続時間** × [ (vCPU数 × vCPU料金 ) + (メモリ容量 × メモリ料金)  +  ( 課金ストレージ容量 × エフェメラルストレージ料金 )  ]　と書ける。
つまり、**Fargateの料金の見積もりではタスク数と平均タスク継続時間の設定が重要！**

(注1) 月間タスク数は、項番４のNumber of tasks or podsから計算される。
(注2)  エフェメラルストレージの課金ストレージ容量は、最初の20GBを除いた容量。
例えば、100GBのエフェメラルストレージを使用した場合、課金されるのは100-20=80GB。
20GBしか使わない場合、エフェメラルストレージは無料。

### タスク数について
タスクとは、関連するコンテナを独自のタスク定義に結合し、それぞれが単一のコンポーネントを表したもの。（[参考](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/what-is-fargate.html)）
例えば、１日に１回API A、API B、API Cを順番に実行するバッジ処理（合計約1時間の処理時間）があった場合、まとめて一つのタスクとして定義できる。

私が初めて見積もりを行ったとき、知識不足ですべてのAPIを別々のタスクにして、さらに起動時間も最大のものに合わせて見積もりをしてしまったため、とんでもない金額になってしまった。

起動時間が大きく異なる複数のタスクがある場合は、AWS Pricing Calculator に新たにFargateを追加して、タスク数や起動時間を別々に見積ろう。

| 例 | タスク数 |起動時間|
| --- | --- | --- |
|Fargate1 |5/日|1時間 |　
|Fargate2 |2/日|12時間|

タスク定義についての詳しい解説は、以下の記事を参照。
https://prograshi.com/platform/aws/how-to-set-task-definition

### 計算例

タスク数：
Number of tasks or pods: 5 per day * (730 hours in a month / 24 hours in a day) = 152.08 per month

vCPU利用料：
152.08 tasks x 2 vCPU x 1 hours x 0.05056 USD per hour = 15.38 USD for vCPU hours

メモリ利用料：
152.08 tasks x 8.00 GB x 1 hours x 0.00553 USD per GB per hour = 6.73 USD for GB hours

エフェメラルストレージ利用料：
50 GB - 20 GB (no additional charge) = 30.00 GB billable ephemeral storage per task
152.08 tasks x 30.00 GB x 1 hours x 0.000133 USD per GB per hour = 0.61 USD for ephemeral storage GB hours

合計金額：
15.38 USD for vCPU hours + 6.73 USD for GB hours + 0.61 USD for ephemeral storage GB hours = 22.72 USD total
Fargate cost (monthly): 22.72 USDl

[計算例のAWS Pricing Calculatorリンク](https://calculator.aws/#/estimate?id=809a7de38a97097553888676bd07b4e369b0e795)