Lambda(Python)のスケジュール実行をコード(YAML)化してコマンド一発で設定!LamveryのCloudWatch Events対応とその他アップデートまとめ。
以前、QiitaやCloud RoadshowのLTで、AWS Lambda for Pythonのデプロイを便利にする拙作のツール(OSS)をご紹介しました。
その後もちょっとずつ改善を重ね、以下の様な機能追加・変更を行いました。
- 差分表示を整えた
- Lambdaの設定だけ変更するコマンドを追加 *1
- デプロイパッケージ(zip)の容量削減
- アーカイブ*2にライブラリを含まないオプションの追加
- リージョン毎にLambdaの容量に制限があるので合計容量も差分表示するようにした(下記参照)
下2つは @ijin さんにインスパイアされた機能です。ありがとうございます。
そして今回、一つ目玉的な機能として、CloudWatch Events対応をリリースしました。
これは、主な用途としては兼ねてよりAmazonらしからぬコンソールの画面先行でAPI待ちだった Scheduled Events
に対応するものです。
つまり、Lambda functionのスケジュール実行がコマンド一つで設定できるようになります。
定義もテンプレートエンジン付きのYAMLで簡潔かつ柔軟に記述できます。
最近、こんなのが話題になりましたが、
Python限定でFunction毎の管理という面で少し方向性は異なりますが、こっちの方が手軽だし便利で高機能なので、是非使ってみてください。 *3
使い方・設定の解説などはREADMEに書いていますが、後日Qiitaあたりに日本語でまとめようと思います。
今回のアップデート以外の部分については以下にまとめてます。
ざっくり使い方
Functionを実装してデプロイした上で、以下のような設定ファイルを記述(lamvery init
で雛形生成可)します。
profile: private region: us-east-1 configuration: name: lamvery-test runtime: python2.7 role: {{ env['AWS_LAMBDA_ROLE'] }} handler: lambda_function.lambda_handler description: This is sample lambda function. timeout: 10 memory_size: 128 events: - rule: foo description: bar schedule: 'rate(5 minutes)' targets: - id: test-target-id input: this: - is: a - sample: input
コマンドを叩きます。
lamvery events
これだけ!
もちろん、Dry runをサポートしているので -d
を付けて事前に更新内容だけ確認することもできます。
また、これを作る過程と使っていてLambda(Python)及び、CloudWatch Eventsについてかなりの知見や想定が溜まっているので、それもどこかで放出したいと思います。 *4
以上です。
是非使ってみてフィードバックをいただければ嬉しいです。
*1:それまではdeploy時と一緒にやる選択肢のみ
*2:アップロードするためのZIPアーカイブ
*3:正直、アレで1400 Starとか、やっぱり「何ができるか」よりも「誰が作ったか」が大事なんだな感あって、ちょっと悔しい
*4:JAWS Days 2016のタイムテーブルでLambda枠がまだ埋まってない(2015-01-23現在)んだけど、入れてくれたりしないかなー|д゚)チラッ