Lambdaのメモリ利用率をCloudWatchで可視化するmem2cw

2017.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

渡辺です。 七夕ということで、Lambdaに役立つツールmem2cwを作成しました。

AWS Lambdaでは、メモリサイズと実行時間により利用費が算出されます。 無駄なコストを払わないためにも、最適なメモリ設定が必要です。 しかし、Lambdaで実際に利用しているメモリ量をモニターから確認することができません。 Lambdaのログで確認できます。 可視化したいので可視化してみました。

仕組み

Lambda実行時、CloudWatch Logsにログが出力されます。 この中に、次のようなログが含まれており、メモリ設定(Memory Size)と利用メモリ(Max Memory Used)を確認できます。

REPORT RequestId: 917ad15e-62b4-11e7-b9bc-xxxxxxxxx Duration: 4.77 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 39 MB

そこで、CloudWatch Logsのサブスクリプションとして、Lambdaを発火し、ログからメモリ使用率を求めて、CloudWatch Metricにデータを送信します。

Untitled_mem2cw_-_Cacoo

利用方法

LambdaのコードはCloudFormationで作成しました。 GitHubからテンプレートファイルを取得し、CloudFormationのスタックを作成してください。 パラメータとして、CloudWatch Metricの名前空間を指定します。

Lambdaが作成できたならば、メモリ使用率を取得したいLambda関数のサブスクリプションにmem2cwを設定します。

CloudWatch_Management_Console

メモリ利用率は、CloudWatchメトリクスから確認しましょう。

CloudWatch_Management_Console

このLambdaでは、メモリ使用率は30%程度です。 メモリ設定をもう少し下げても問題なさそうですね。

実行時間に注意

メモリに余裕があるからといって、ギリギリに設定すると実行時間が長くなる可能性もあります。 実行時間もあわせて確認し、チューニングを行ってください。

まとめ

EC2に比べ、Lambdaのコストは小さいですが、より安く使えれば幸いです。