@ijin

[Michael H. Oshita]

Lambdaの容量を監視しよう

2016/1/14現在、AWS Lambdaにはなんとリージョン毎!にアップロードできるパッケージの合計サイズがたったの1.5GBという悲しい制限があります。特にlibraryを同包したり、versioningを使ったりしてCIをガンガン回してると、結構すぐこの上限に達してしまいがちです。そこで、Lambdaの総容量はAWSコンソール上には表示されるものの、トラッキングし辛いので監視する仕組みを作ってみました。

仕組み

LambdaのScheduled Eventsを使って、ListFunctionsListVersionsByFunction APIを叩いて、個別functionのCodeSizeをサマって、PutMetricDataでCloudWatchに投げて、Alarm設定してるだけ。

(*) 2016/1/26 追記:@marcy_teruiさんからのご指摘でVersionsの容量計算が抜けてました。ありがとうございます。

といっても、今後別アカウントでいちいち設定(IAM role&policy、Lambda、SNS、CloudWatch)するのも非常に面倒くさいので、今回はCloudFormation Designerを使って、ほぼ一発で環境を再現できるようにしました。

CloudFormation

ボタン作ってみた。

Stack Creation

Designerではこんな感じ。心なしか、jsonの苦痛が多少楽になったような。。後、Propertyの補完機能は良いけどショートカットがCmd+SpaceなのでSpotlightさんがぁ。

s3からtemplateを指定。 template urlはhttps://s3-ap-northeast-1.amazonaws.com/ijin/aws/lambda/check_lambda_capacity/check_lambda_capacity.template

Parameterとしては以下が指定可能

  • アラート閾値(Byte単位)
  • SNS topic(空の場合は、自動作成される)

Stackを作成すると、諸々のリソースが数分で出来上がり。

Manual Labor

本当は以上で終了!にしたいところですが、LambdaのScheduled Eventsの設定はAWSコンソールからのみしか出来ないという情けない残念な状態2016/1/14現在)なので、ここからポチポチ設定作業。。(API重視の開発姿勢はどこ行ったんだろう)

(*) 2016/1/26 追記:この記事の翌日に発表された CloudWatch Eventsscheduling 機能 によって出来るようになりました。なんというタイミング。

最小頻度が5分毎

Graph

これで、グラフが取れて閾値を超えたらアラートが飛ぶようになる

Code

出来上がったCloudFormation templateコードはこちら。AWS::Lambda::Functionがlambdaのresource担当だけど、templateにfunctionをインラインで埋め込めるのは現時点ではnodejsのみなので仕方なくzipしたpythonコードをs3にアップして参照するようにしてる。

元気があれば、そのうちnode版も書こうかな。。

GitHubのリポジトリはこちらから

Comments