AWS Lambda のメモリ使用量を CloudWatch Metrics に入れる

updated: 2020-10-29

modified: 2020-11-01

本文

AWS Lambda の実行ログ (CloudWatch Logs) を見ていると,実行終了後に出る REPORT とあるログにメモリの使用量が出力されている.ただし,このメモリ使用量は CloudWatch Logs の標準メトリクスには含まれていない. AWS Lambda の課金体系においては,割り当てたメモリサイズが料金に影響してくるので何かと記録しておきたいというモチベーションがある.

そこで, Lambda の実行ログとして出力された CloudWatch Logs のレコードを更に Lambda で処理してカスタムメトリクスとして登録することができる. これについては Lambdaのメモリ利用率をCloudWatchで可視化するmem2cw | Developers.IO で既に実装まで紹介されている.

この mem2cw は CloudFormation template + JavaScript で実装されているので,最近個人的に使っている CDK(Cloud Development Kit) + TypeScript に移植した. aws-lambda-memory-metric-put として公開している.

感想

CDK + TypeScript で書くと型をつけることができるので,リファクタリングがしやすくて良い. 今回の実装では JavaScript with callback を TypeScript with async/await に変更した.

また, CDK に対しては snapshot test を実装してみることで依存ライブラリの変更等に強くなっただろうと思う. snapshot を保存して差分検知するなら,いっそのこと cdk synth で出力した CloudFormation template を比較しても良かったけれど,部分的なテストを書きたくなるかもしれないので jest の管理下に置いたのは今後のためになるだろう.

補足

AWS Lambda → CloudWatch Logs → Subscription filter → Lambda → CloudWatch Metrics という流れでメトリクスを作成しているけれど, metric filter を作成することで安く簡単に同じことができるかもしれない.