AWS Lambdaの最大メモリ割り当て量が3008MBに拡大されたので試してみた

Pocket

このエントリは 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破産」を防ぎましょう。