このエントリは Qiita Advent Calendar 2017 AWS Lambda の2日目です。
ナレッジコミュニケーションの大柳です(@oyngtmhr)。
re:Invent 2017にて、AWS Lambdaの最大メモリ割り当て可能サイズが3GBに拡大されたと発表されましたので、検証してみます。
Lambdaはメモリ割当量と比例してCPU能力も向上するとのことなので。3GBメモリ時のパフォーマンスも見てみます。
機能追加の確認
マネジメントコンソールでもメモリサイズが3008MBまで指定できるようになっています!
1536MBから64MB刻みで最大3008MBまで設定可能です。
英語版のLambdaの料金表には3008MBまでの料金も表示されるようになっています(12月1日時点では日本語版には表記なし)
https://aws.amazon.com/lambda/pricing/
調査方法
Lambdaのパフォーマンスはzip圧縮時の処理時間、ネットワークIOはS3への読み書きの処理時間で評価してみます。評価は、以下の過去記事と同じ方法でやってみます。
【AWS Lambdaの小ネタ】メモリ割当量を増やすとパフォーマンス、コストがどう変わるか検証してみた
検証結果
まず、圧縮、ネットワークIn、ネットワークOutにかかった処理時間を比較してみます。
結果は以下のようになりました。
■計算能力(gzip圧縮処理)
メモリ割当量1536MBと3008MBでは、0.5秒とわずかながら3008MBの方が処理時間が短いです。メモリ割り当てにより計算能力も向上しています。
■ネットワークIn/Out(S3のファイル読み書き)
メモリ割当量1536MBと3008MBでは、メモリ割当量が増えるとIOも向上しています。
パフォーマンスと割り当てのメモリ量の関係をプロットしてみましたので、これものせておきます。メモリ量を増やすと、パフォーマンスが上がるのが分かります。
まとめ
メモリ割当量を増やすと時間当たりのコストも上がりますが、性能があがって処理時間が短くなる分、最終的なコストは変わらない、というのがLambdaです。「時は金なり」という考え方で行けば、できるだけメモリ割当量を増やして、処理時間を短くする方が良さそうです。
ただし、想定外の課金を避けるために、メモリ割当量を大きくした場合は、Lambdaのタイムアウト値を低めに設定したり、CloudWatchで処理件数をモニタリングしたりして、「Lambda破産」を防ぎましょう。