• 767
    いいね
  • 7
    コメント

サーバレスアーキテクチャ構成にしたときに
実際のところ、どれくらいの料金になるのか気になったので算出してみようと思います。
(あくまでシミュレーションしたものでAWS側で値段や計算方法が変わったりするため、責任は負いかねますので導入する際は自己責任でお願いします。)
AWSのどこにどれくらいの料金がかかっているのか知ることは大事だと思ったのですが、トータルだとなかなかまとまってなかったのでまとめてみました。
間違ってたらご指摘いただけると助かります。

サーバレスアーキテクチャって何?って方はこちら参照してください

普通のサービスということで以下の構成で考えてみます。

  • Cognito(ユーザ認証、OAuth認証)
  • IAM(認可)
  • API Gateway(APIのURL)
  • Lambda(ビジネスロジック)
  • DynamoDB(データベース)
  • S3(ファイルストレージ)
  • CloudFront(CDN)
  • WAF(ファイアウォール)
  • SNS(プッシュ通知)
  • CloudWatch(ログ)

構成図例:
serverless.png

継続利用前提で1年間の無料枠を省いて算出してみようと思います。
IAMは無料なため、計算から除外しています。
参考:AWS料金シミュレータ

最安の米国東部(バージニア北部、us-east-1)リージョンの場合で計算してます。(2016/7月時点)
東京リージョンの場合(レスポンス速度を出したい場合など)はもう少し値段があがります。
参考:EC2リージョン別応答時間メモ

EC2とRDSに関してはまとめてる人がいたのでそちらを参考してください(価格帯東京リージョンですが・・・)
AWS 月額料金チートシート

1年間無料期間を過ぎてAWSを止めたいという人はこちら
忘れた頃に請求が来た人のための、Amazon Web Servicesを終了する方法

Cognitoの料金

Cognito料金表

次の項目に関して料金が計算されます。

  • MAU(月間アクティブユーザー)

月間アクティブユーザー(MAU)5万まで無料(無料期間過ぎても)です。
MAUが5万超えると一気に請求が来るという計算になりますね・・・
MAU5万を超えた超過分が請求とのことらしいです。
MAUが5.5万の場合
0.00550ドル×(55000-50000)=27.5ドル=約2750円

月間ユーザ数(MAU) ユーザあたりの単価
0〜5万 無料
5万〜10万 $0.00550
10万〜100万 $0.00460
100万〜1000万 $0.00325
1000万以上 $0.00250

API Gatewayの料金

API Gateway料金表

ここが詳しいです。
Amazon API Gatewayについての参考情報

次の項目に関して料金がかかります。

  • API呼び出し
  • レスポンスデータ送信量
  • キャッシング

・API 呼び出し
100万API呼び出しあたり3.5ドルです。

・レスポンスデータ送信量
レスポンスの総データ量に応じてレートが変わります。
総データ量が1TBならば9ドルです。10TBならば85ドルです。

レスポンスデータ送信量 TBデータあたりの単価
0〜10TB $90
10TB〜50TB $85
50TB〜150TB $70
150TB〜500TB $50

・キャッシング
キャッシングを有効にしている場合、さらに容量と時間に応じた料金が課金されます。
キャッシング容量が0.5GBの場合、1時間あたり0.02ドルです。

月あたり100万APIリクエスト、100GBレスポンスデータ送信でキャッシングなしだとしたら
3.5ドル+90ドル/TB×0.1TB=12.5ドル=約1250円

Lambdaの料金

Lambda料金表

ここが詳しいです。
AWS LambdaのPricingを読み解く

次の項目に関して料金がかかります

  • Lambda関数のリクエスト数
  • Lambda関数のメモリに応じた実行時間

・リクエスト数
100万リクエスト(呼び出し)あたり0.2ドルなのでこちらはあまり気にしなくても良いと思います。

・実行時間
正確な計測はできないようです。
Lambdaには128MB〜1GBまでのメモリ割り当てができるのですが、
単価としては1GBのLambda関数を1秒間実行するにあたり0.00001667ドルとなるようです。
下記の料金表は小数点10位が四捨五入されているようです。

メモリ(MB) 1か月の無料利用枠の秒数 100ミリ秒単位の価格(ドル)
128 3200000 0.000000208
192 2133333 0.000000313
256 1600000 0.000000417
320 1280000 0.000000521
384 1066667 0.000000625
448 914286 0.000000729
512 800000 0.000000834
576 711111 0.000000938
640 640000 0.000001042
704 581818 0.000001146
768 533333 0.000001250
832 492308 0.000001354
896 457143 0.000001459
960 426667 0.000001563
1024(1GB) 400000 0.000001667

・無料枠に関して
1か月あたりに100万のリクエストが無料および400,000 GB/秒の実行時間が無料利用枠となっています。
これは1年間の無料枠期間を過ぎても適用されます。

例えば、128MBのLambdaのみで構成されていたとしたら40万秒 * 1024/128(=8)の320万秒=889時間分くらいは無料で利用可能です。

実際はLambdaの処理によって必要なメモリが異なると思います。
ちなみにメモリ不足で失敗しても3回までリトライしてくれるらしいです。
AWS Lambdaを使うときに注意する4つのこと -> 3つになりました

下記の例で計算するとします。
API Gatewayに割り当てられた10個のLambda関数(256MB、平均処理時間1秒)がそれぞれ1日あたり1万回ずつ呼ばれるとします
→それぞれ256MBのメモリを割り当てた10個のLambda関数が月あたり30万回ずつ実行され、平均処理時間が1秒だった場合
無料枠の40万秒 * 1024/256(=4)の160万秒を超過した部分が課金対象です。
課金対象の実行時間:300万秒 - 160万秒(40万秒 * 4) = 140万秒
実行時間に対する課金額:0.00001667ドル/秒∗0.25(256/1024)∗140万秒=5.8345

リクエストに対する課金額は300万回で0.2ドル/100万回ですが100万回分は無料枠の範囲内なので超過は0.4ドルとなります。

よって料金は以下のようになります。
5.8345ドル+0.4ドル = 6.2345ドル = 約623円

ちなみにそれぞれ256MBのメモリを割り当てた10個のLambda関数が月あたり10万回ずつ実行され、平均処理時間が1秒だった場合(100万リクエスト100万秒だった場合)、なんと無料枠内です。

DynamoDBの料金

DynamoDB料金表

ここが詳しいです。
AWS DynamoDB の料金がわかりにくいので、最小テーブルの月額を計算してみた

下記が課金対象項目となります。

  • 読み込みキャパシティー
  • 書き込みキャパシティー
  • データストレージ
  • DynamoDBストリーム
  • データ転送

・無料枠に関して
下記に関しては1年間の無料枠期間を過ぎても適用されるようです。
規模大きくなるまではほとんど無料枠内に収まりそうです。

  • データストレージは25GBまで無料
  • 書き込みキャパシティユニットは25まで無料
  • 読み込みキャパシティユニットは25まで無料
  • DynamoDBストリームからの250万回の読み込みリクエストまで無料

・読み込みキャパシティー
テーブル作成時にテーブルの読み込み速度(スループット)を決める項目です。
0.0065ドル : 50ユニットの読み込みキャパシティあたり/1時間

より、1ユニットの読み込みキャパシティを1ヶ月使用した場合のコストは、
0.0065ドル * 720[hour] / 50[ユニット] = 0.0936 [ドル/(ユニット * 月)]
となります。

・書き込みキャパシティ
テーブル作成時にテーブルの書き込み速度(スループット)を決める項目です。
0.0065ドル : 10ユニットの書き込みキャパシティあたり/1時間

より、1ユニットの書き込みキャパシティを1ヶ月使用した場合のコストは、読み込みキャパシティの5倍です。
0.0936 × 5 = 0.468[ドル/(ユニット * 月)]

よってスループット最小の場合(読み込み書き込み1ユニットずつ)、テーブルあたりの月額は
0.0936 + 0.468 =0.5916ドル
となりました。

ただし、読み込み書き込みユニットがそれぞれ25ユニットまでは無料枠内ですので
スループット最小テーブルのみであれば、25テーブルまで無料枠内に収まります。

・スループットシミュレータ
テーブル作成時にキャパシティー計算ツールも存在しているため(DynamoDBテーブル作成画面)、
目標のスループットを満たせるようにシミュレーションすることも可能です。
Dynamo.png

・データストレージ
25GBまで無料です。
25GBを超えた場合、超過GBあたり0.25ドルかかります。

・DynamoDBストリーム
ストリームを流れるデータをトリガーにしてLambdaなどをキックできるオプション機能です。
データ読み込みの際にかかるようです。機能を使わない場合はかかりません。
使う場合は無料枠の250万リクエストを超えた10万リクエストにつき、0.02ドルかかります。

・データ転送
同じリージョン内のAWS ServiceとDynamoDB間の通信に関しては無料のようです。

S3の料金

S3料金表

ここが詳しいです。
S3の料金体系が分かりにくいと聞かれたので纏めた

以下の3つが課金対象となります。

  • ストレージ容量
  • リクエスト数
  • データ転送

・ストレージ容量
保存データ量の総量によってデータあたり(GB)の単価が決まります。
あまり使われないと思われる低頻度アクセスストレージ、Glacierストレージは除外しています。

保存総量 スタンダードストレージ
0〜1TB $0.0300
0〜50TB $0.0295
50〜500TB $0.0290
500〜1000TB $0.0285
1000〜5000TB $0.0280
5,000TB以上 $0.0275

・リクエスト数
ややこしいことにリクエスト形式によって単価が違います。

リクエスト形式 リクエスト単価(1万件あたり)
POST、PUT、COPY、または LIST リクエスト $0.05
GET および他のすべてのリクエスト $0.004
DELETE Free

・データ転送
S3へのアップロードは無料です。
同じリージョン内AWSサービスへのダウンロードは無料です。(別リージョンの場合、$0.020/GBかかります。)
S3を静的ホスティングしてインターネット経由で直接ダウンロードする場合は次の料金表となります。

データ転送総量 Amazon S3からインターネットへのデータ転送送信(GB)
0〜1GB $0.000
1GB〜10TB $0.090
10〜50TB $0.085
50〜150TB $0.070
150〜300TB $0.050

100GB超えた時点でCloudFront経由のほうが明らかに速度とコスパがよいです。

10GBのストレージを利用で静的ホスティングにて100GBのデータを100万リクエストのGETでS3から直接ダウンロードする場合、次のような計算になります。
0.03[ドル/GB]×10[GB]+0.004[ドル/万リクエスト]×100[万リクエスト]+0.09[ドル/GB]×100[GB]=9.7ドル=約970円

CloudFrontの料金

CloudFront料金表

おそらく正確な計算は不可能です。どこからどのエッジロケーション(地域別CDN)にアクセスされたかで料金がかわり、どこからアクセスされたか特定できないため

  • インターネットへのリージョンデータ転送送信(GB単位)
  • オリジンへのリージョンデータ転送送信(GB単位)
  • HTTPメソッドのリクエスト料金(1万件あたり)

・インターネットへのリージョンデータ転送送信
CloudFrontからインターネットへのデータ送信量を指します。
CDNのリージョン別、データ転送総量によってデータ転送の単価(GB)が異なります。

転送総量 米国 欧州 香港、フィリピン、韓国、シンガポールおよび台湾 日本 南米 オーストラリア インド
0〜10TB $0.085 $0.085 $0.085 $0.140 $0.250 $0.140 $0.170
10〜50TB $0.080 $0.080 $0.135 $0.135 $0.200 $0.135 $0.130
50〜150TB $0.060 $0.060 $0.120 $0.120 $0.180 $0.120 $0.110
150〜500TB $0.040 $0.040 $0.100 $0.100 $0.160 $0.100 $0.100
500〜1024TB(1PB) $0.030 $0.030 $0.080 $0.080 $0.140 $0.095 お問い合わせ
1PB〜5PB $0.025 $0.025 $0.070 $0.070 $0.130 $0.090 お問い合わせ
5PB/月を超えた場合 $0.020 $0.020 $0.060 $0.060 $0.125 $0.085 お問い合わせ

・オリジンへのリージョンデータ転送送信(GB単位)
オリジンサーバ(API GatewayやEC2)に転送する際(POST リクエストや PUT リクエストの場合など) にかかる料金です。

米国 欧州 香港、フィリピン、韓国、シンガポールおよび台湾 日本 南米 オーストラリア インド
$0.020 $0.020 $0.060 $0.060 $0.125 $0.100 $0.160

・HTTPメソッドのリクエスト料金 (1万件あたり)

プロトコル 米国 欧州 香港、フィリピン、韓国、シンガポールおよび台湾 日本 南米 オーストラリア インド
HTTP リクエスト $0.0075 $0.0090 $0.0090 $0.0090 $0.0160 $0.0090 $0.0090
HTTPS リクエスト $0.0100 $0.0120 $0.0120 $0.0120 $0.0220 $0.0125 $0.0120

・エッジロケーションの制限に関して
次の3択でエッジロケーションのポイントを制限することができます。
価格帯が安い順に次のようになります。

  • 価格クラス100(米国、欧州)
  • 価格クラス200(米国、欧州、香港、フィリピン、韓国、シンガポールおよび台湾、日本、インド)
  • 価格クラスAll(全ての地域)

価格クラス100の場合、例えば日本→アメリカor欧州のエッジロケーションアクセスとなるため
アクセス元によって通信が遅くなるというデメリットもあります。

CloudFrontのPrice classにて選択できます。
Distoribution.png

・独自SSL証明書(独自ドメイン)を使用する場合
独自ドメインをCloudFrontに割り当てる場合、1つのディストリビューションにつき600ドル/月かかります。

以上踏まえて、価格クラス100のAPI Gateway転送、100万HTTPSリクエスト(独自ドメインなし)のレスポンス累計100GB転送として計算してみます。
0.085[ドル/GB(米国)]×100[GB]+0.02[ドル/GB]×100[GB]+0.012[ドル/万リクエスト(欧州)]×100[万リクエスト]=11.7ドル=約1170円

WAFの料金

WAF料金表

次の3項目に基づいて料金が決定されます。

  • ウェブアクセスコントロールリストのWeb ACLあたり5ドル/月
  • ルールあたり1ドル/月
  • 100万ウェブリクエストあたり0.6ドル

WAFの適用はCloudFrontを利用するため、
CloudFrontのDistributionに対応するWeb ACLを1つ紐づけます、
また、Web ACLにルールを紐付けるという形になります。
1つのルールに複数のコンディション(SQLインジェクションフィルター、XSSフィルター等)を紐付けることができます。

そのため、最低1つのWAFに対応するCloudFront側で100万リクエストあった場合は次の計算になります。
5ドル(1Web ACL)+1ドル(1ルール)+0.6ドル(100万リクエスト)=6.6ドル=約660円

SNSの料金

SNS料金表

モバイルプッシュ通知を使うのみの場合、ほぼお金はかからないです。
(emailをつかう場合、特にSMSをつかう場合は配信キャリア別にかかるので注意)

モバイルプッシュ通知は100 万件送信するたびに 1 ドル(100 万件発行あたり 0.5 ドル + 100 万件のモバイルプッシュ通知配信あたり 0.5 ドル)かかります。
注:配信されるデータの 64 KB のチャンクごとに 1 リクエストとして課金されます。例えば、256KB のペイロードを含む単一通知は、4 配信として課金されます。

1プッシュ通知あたりの送信ペイロード(プッシュ通知の送信内容)は大体256 KBとみていいでしょう
APNS / GCMのリクエスト制限

上記より100万件送信した際かかる料金は大体つぎのようになると考えられます。
100 万件発行あたり 0.5 ドル + 100 万件のモバイルプッシュ通知配信あたり 0.5 ドル × 4 = 2.5ドル = 約250円

CloudWatchの料金

CloudWatch料金表

下記の項目が課金対象項目です。

  • ダッシュボード
  • Amazon EC2 インスタンスの詳細モニタリング
  • カスタムメトリックス
  • アラーム
  • CloudWatch APIリクエスト
  • ログの取り込み、ログのアーカイブ
  • カスタムイベント

・ダッシュボード
カスタムのダッシュボード(グラフ化)を作成1つにつき、3ドルかかります。
(必須ではないので作る必要はありません)

・Amazon EC2 インスタンスの詳細モニタリング
インスタンスあたり、1分間隔の詳細モニタリング作成に3.5ドル/月かかります
(EC2はサーバレスでは使いません)

・カスタムメトリックス
1メトリックスあたり0.5ドル/月
→Lambdaのエラーの検知をさせたい場合に必要になります。

・アラーム
1アラームあたり0.1ドル/月
→Lambdaのエラーの検知をさせたい場合に必要になります。

・CloudWatch APIリクエスト
GetMetricStatistics、ListMetrics、または PutMetricData のリクエスト1,000件あたり0.01ドル
(LambdaやEC2などからリクエストしない限りかかりません)

・ログ
取り込み1GBあたり0.5ドル
→受信したログのデータ量につき課金されます。
1GBあたりのアーカイブ0.03ドル/月
→Cloud Logsにアーカイブさせることができるのですが、必須ではありません

・カスタムイベント
カスタムイベントが100万回生成につき1ドルかかります。
※64kbのペイロードに対し、1イベント生成扱い
(VPC設定したLambdaのイベントコールなどに利用します)

・無料枠に関して
下記に関して無料期間を超えても課金料金から除外(減算)されます。

  • 10メトリックス(Amazon EC2 インスタンスの詳細モニタリング、カスタムメトリックス、または CloudWatch Logsに適用)分の料金
  • 10アラーム分の料金
  • 100万回のAPI リクエスト分の料金
  • 1か月あたり5GBのデータの取り込みおよび5GBのアーカイブされたストレージ

大規模にならないうちはほとんどが無料枠の範囲内になるため、あまり考えなくて良いでしょう。
ログの取り込み量だけは注意したほうが良いかもしれません。

トータル

次のようなスタートアップ開始想定で計算してみます。

  • Cognito(MAU5万未満)→無料枠内
  • IAM→無料
  • CloudWatch(10メトリックス、10アラート、ログ読み込み5GB以内)→無料枠内
  • SNS(10万件送信)→0.25ドル
  • DynamoDB(読み込みキャパシティ1、書き込みキャパシティ1の最小テーブル×10)→無料枠内
  • CloudFront+WAF+API Gateway+Lambda

HTTPSの100万リクエスト(10GB)、レスポンスデータ(10GB)想定として

CloudFront:0.085[ドル/GB(米国)]×10[GB]+0.02[ドル/GB]×10[GB]+0.012[ドル/万リクエスト(欧州)]×100[万リクエスト]=2.7ドル
WAF:5ドル(1Web ACL)+1ドル(1ルール)+0.6ドル(100万リクエスト)=6.6ドル
API Gateway:3.5ドル+90ドル/TB×0.01TB=1.25ドル
Lambda(256MB、処理時間1秒、10関数):無料枠内

  • CloudFront+S3

100万のHTTPSのGETリクエストにて100GBのレスポンスデータ(画像など)を転送想定とすると

CloudFront:0.085[ドル/GB(米国)]×100[GB]+0.012[ドル/万リクエスト(欧州)]×100[万リクエスト]=9.7ドル
S3:0.03[ドル/GB]×10[GB]+0.004[ドル/万リクエスト]×100[万リクエスト]=0.7ドル

合計:
0.25+5.916+2.7+6.6+1.25+9.7+0.7=21.2ドル=約2120円

皮算用ですがなかなか良い感じの数字が出ました^^;

まとめ

  • Cognito:MAUが5万以内なら無料、超えたら課金が発生するので規模が大きくなったら覚悟が必要
  • API Gateway:基本安い
  • Lambda:メモリ節約すれば基本安い
  • DynamoDB:スループット節約すれば基本安い
  • S3:保存データ、データ流量による
  • CloudFront:配信リージョンを制限すれば値段を下げられるがスループットが落ちる
  • WAF:ルール数による、基本安い、スケールにあまり依存しない
  • SNS:モバイルプッシュ通知のみだったらとても安い
  • CloudWatch:規模が小さいうちは基本無料、ログの取り込み量には注意