Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

初めてのAWS Lambda
~AWS Lambdaで始めるイベントドリブンアプリケーション

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

目次

料金体系

 AWS Lambdaは非常にきめ細やかな料金体系となっています。100ミリ秒単位のコンピュート時間と個々のリクエストに対する課金となっています。リクエスト数とはイベントが発生してLambdaファンクションが起動される回数のことです。コンピュート時間とはLambdaファンクションが起動してから終了するまでの時間となっています。100ミリ秒ごとの単価はメモリサイズによって異なっています。

 以下の表は、料金表のページに記載のものを転記したものです。

料金表
メモリ(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 400000 0.000001667

 なお、この表における価格はおおよその価格になります。

 Lambdaファンクションに設定可能なメモリ量に応じて価格が変動します。メモリは最小128MBであり、64MB単位で設定することが可能で、最大で1024MB=1GBとなっています。また、100ミリ秒以下の実行時間の場合、100ミリ秒に切り上げられます。

 非常にややこしく勘違いしがちなのですが、単価としては1GBのファンクションを1秒間実行するにあたり$0.00001667となっています。つまり512MBのメモリ設定で1秒動かした場合は512/1024=0.5ということで$0.00001667*0.5=$0.000008335となります。上記の表ではさらにミリ秒にしていますので10で割る必要があります。従って正確な値は$0.0000008335です。上記の表では$0.000000834となっていて四捨五入されています。これがおおよその価格であると述べた理由です。そして、実際に金額を計算する際は1GB、1秒あたりに換算して算出されます。

無料枠

 その他のサービスと同様にAWS Lambdaにも無料枠が存在します。リクエスト数と実行時間それぞれで無料の範囲が定められています。リクエスト数のほうは月間100万リクエストまでは無料となっています。実行時間は前出の表のとおり、単価と同様にメモリの容量ごとに利用可能な無料枠が変動する設定となっています。

 こちらについても単価と同様、1GBのファンクションが基準です。つまり、1GBのファンクションが40万秒まで無料で実行できるということです。従って仮に128MBのファンクションであれば、40万秒*1024/128(=8)の320万秒(約889時間)が無料枠となります。

料金の計算例

 このとおりAWS Lambdaの料金は少し難しいところがありますので実際に計算例を示します。「512MBのメモリを割り当て、3,000,000回実行し、毎回の実行時間が1秒間だった場合」について実際に計算を行います。なお、すべて小数点第二位で四捨五入をしています。

 まず、毎回の実行時間が1秒なので総実行時間は300万秒になります。次にファンクションのメモリが512MBと基準となる1GBの半分です。従って単価は半分になりますが、一方で無料利用枠は倍になります。従ってこの場合は以下のような計算になります。

課金対象の実行時間:
300万秒 - 80万秒(40万秒 * 2) = 220万秒
実行時間に対する課金額:
$0.00001667 * 0.5(512/1024) * 220万秒 = $18.34

 リクエストに対する課金額は、無料枠超過分が200万回で$0.2/100万回なので$0.4となります。従ってこの場合の課金額は以下のようになります。

$18.34 + $0.4 = $18.74  

プレビュー時点での制限

 さて、これまでAWS Lambdaについて紹介してきましたが、実は現時点ではまだプレビューの状態で提供されています。2014年11月の発表時はLimited PreviewでありAWSアカウントを持っていても別途サインアップが必要でしたが、2015年1月15日よりサインアップは必要なくなりAWSアカウントを持っていれば誰でも使えるようになりました。ただし、依然としてPreviewというステータスは変わらず、利用可能なリージョンも限られています。本記事執筆時点ではUS East(Northern Virginia)、US West(Oregon)と Europe(Ireland)リージョンでのみ利用可能です。

ユースケース

 さて、ここまでAWS Lambdaの機能面に関する説明をしてきましたが、実際にどういったユースケースで活かせるのかをいくつか見ていきます。

イメージリサイズ、サムネイルの生成

 1つ目のユースケースは、イメージのリサイズとサムネイルの生成です。

 例えばユーザからの画像のアップロードを受け付けるようなシステムの場合、従来であればAPIサーバなどを用意して一度そのサーバで画像ファイルを受け取り、必要に応じてリサイズやサムネイルの生成を行ってAmazon S3のバケットに保存する、といった実装が必要でした。仮にAmazon S3のバケットに直接アップロードできるようにした場合は、そのバケットを常に監視し、新しいイメージファイルが増えていたらそのファイルに対して処理を行うといった仕組みを「自前」で実装する必要がありました。それがAWS Lambdaを使うことで非常に簡単になります。

 以下の図のようにAmazon S3の特定バケットにイメージファイルがアップロードされると、そのイベントに応じてリサイズやサムネイル生成を行うLambdaファンクションが実行されます。つまり自前で実装する必要があるのは、リサイズやサムネイル生成の処理そのものだけとなります。

Amazon S3を使ったユースケース
Amazon S3を使ったユースケース

ログの監査と通知

 もう一つのユースケース例として、AWSのAPIの監査ログ取得サービスであるAWS CloudTrailと連携させた例をあげてみます。

 AWS CloudTrailではAWSのAPIコールを全て監査ログとして保管します。マネージメントコンソール上での操作も裏側ではAPI呼び出しが行われているため、AWS CloudTrailで監査ログとして残すことが可能です。この監査ログはAmazon S3上で保管されるため、Amazon S3にAWS CloudTrailのログが出力されたら、その内容を分析し、怪しい行動や異常があった場合は管理者に通知するという利用方法が考えられるでしょう。こちらも全てを自前で実装しようとすると非常にコストがかかりますが、AWS Lambdaを利用するとログの分析ロジックのみにフォーカスすることが可能となります。

AWS CloudTrailと組み合わせたユースケース
AWS CloudTrailと組み合わせたユースケース

 ページの都合上、今回は2種類のユースケースしか挙げていませんが、その他にもAmazon S3に動画ファイルをアップロードすると、Amazon Elastic Transcoder(動画の変換サービス)を利用してデバイス向けの動画ファイルが自動生成されるようにしたり、モバイルアプリケーションにカスタムイベントを発行させてLambdaファンクションとして処理を実装することで、サーバーレスなモバイルアプリケーションバックエンドを実現したりすることが可能になります。イベントドリブンな処理を簡単に実現するAWS Lambdaのユースケースはこれだけにとどまらないでしょう。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5