【AWS】AWS Fargateの利用料金を試算した #reinvent

AWS Fargateが発表されました!以前からあったECS(Elastic Container Service)の追加機能として、EC2を起動・管理することなくDockerコンテナを起動することが可能になりました。EC2の運用を自分でしなくていいというのは大きな魅力ですね。

さて、気になるのはFargateのお値段です。このブログエントリでは架空のアプリケーションをFargateで動作させた時の料金についてまとめてみます。

利用料金の整理

AWSのサイトを見てみると、Fargateの料金はコンテナに割り当てたvCPUとメモリの量によって決まります。

2017/11/30現在、以下の料金が適用されます。なお、現時点ではAWS Fargateはバージニアリージョン(us-east-1)でのみ利用可能なため、料金もバージニアリージョン利用字のものとなっております。今後別リージョンに展開される際には金額が変わる可能性があることをご了承ください。

項目 1秒あたり 1分あたり 1時間あたり 1日あたり
1vCPUあたり $0.00001406 $0.0008436 $0.0506 $1.2144
メモリ1GBあたり $0.00000353 $0.0002118 $0.0127 $0.3048

最短課金対象期間は1分間です。つまり、実行時間が1秒だった場合でも1分間ぶんの料金が発生することになります。実行時間が1分30秒だった場合は1分30秒ぶんの料金です。課金対象となる時間は、コンテナのdownload(docker pull)が始まってからECS TaskがTerminateするまでの間とされています。

また、ネットワーク転送料金はここには含まれておらず、通常通り料金が発生します。

試算してみよう

前提

今回は以下のスペックのFargateを動かすことにします。

  • vCPU: 2vCPU
  • メモリ: 8GB

[参考]ECS上で動かした場合の料金

上のスペックはm4.largeとカタログスペック上は同じ数値です。m4.largeのバージニアでの利用料金は$0.1/hour, $74.4/monthとなります。この値をベースに見ていきましょう。

試算

上に記載したFargateの料金をベースに、今回の前提スペックでどれくらいの値段がかかるかを計算してみます。一分あたりの値段を算出してみましょう。

  • vCPU: $0.0008436/min * 2(vCPU) = $0.0016872/min
  • Memory: $0.0002118/min * 8(GB) = $0.0016944/min
  • 合計: $0.0016872 + $0.0016944 = $0.0033816/min

1分あたり0.0033ドルとなりました。つまり1分以内で終わるTaskの場合はこの値段(とデータ転送量)以外の料金はかかりません。安いです。

これを一時間の料金に換算すると$0.0033816 * 60 = $0.202896/hourとなります。m4.large EC2の料金($0.1/hour)と比べると割高になってしまいますね。

試算をして気づいたこと

この試算をしてみて、AWS Fargateは常時稼働させるアプリケーションを稼働させることも出来ると思いますが、数分~数十分のバッチプログラムを実行するのに最適なサービスと言えると思いました。

AWS上でEC2を管理せずにプログラムを動作させるための選択肢は、今まではLambdaしかありませんでした。しかし、LambdaはVPC内のサービスに対するアクセス、実行時間のタイムアウト、リソース割当、実行環境(コンテナ)のカスタマイズなどが制約されているため、長時間、かつ重ための処理をするには適していませんでした。そういった処理を行うのにFargateは適しているのではないでしょうか。

もちろん、イベントドリブンな処理や、ミリ秒から数秒で完了するプログラムにはLambdaを使ったほうが良いと思います。まだ現状試せていないのですが、イベントドリブンで重たいバッチ処理を実行する時にはLambda上からFargateをrunする、なんていうアーキテクチャもあったりするのかな?と妄想しています。

まとめ

このブログではAWS Fargateの利用料金についてまとめました。FargateはEC2を管理せずにコンテナを起動できるサービスで、分単位での課金が発生します。数分から数十分の処理を安く動かしたい、という時には非常に使いやすいサービスだと思います。

現状はバージニアリージョンのみで使うことが可能なFargate。早く全てのリージョンで使えるようになることを期待しています!