misc.tech.notes

主に技術的な雑記的な

Lambda(Python)のスケジュール実行をコード(YAML)化してコマンド一発で設定!LamveryのCloudWatch Events対応とその他アップデートまとめ。

以前、QiitaやCloud RoadshowのLTで、AWS Lambda for Pythonのデプロイを便利にする拙作のツール(OSS)をご紹介しました。

qiita.com

その後もちょっとずつ改善を重ね、以下の様な機能追加・変更を行いました。

  • 差分表示を整えた
  • Lambdaの設定だけ変更するコマンドを追加 *1
  • デプロイパッケージ(zip)の容量削減
  • アーカイブ*2にライブラリを含まないオプションの追加
  • リージョン毎にLambdaの容量に制限があるので合計容量も差分表示するようにした(下記参照)

下2つは @ijin さんにインスパイアされた機能です。ありがとうございます。

ijin.github.io

そして今回、一つ目玉的な機能として、CloudWatch Events対応をリリースしました。

これは、主な用途としては兼ねてよりAmazonらしからぬコンソールの画面先行でAPI待ちだった Scheduled Eventsに対応するものです。

つまり、Lambda functionのスケジュール実行がコマンド一つで設定できるようになります。
定義もテンプレートエンジン付きのYAMLで簡潔かつ柔軟に記述できます。

最近、こんなのが話題になりましたが、

osdn.jp

Python限定でFunction毎の管理という面で少し方向性は異なりますが、こっちの方が手軽だし便利で高機能なので、是非使ってみてください。 *3

github.com

使い方・設定の解説などはREADMEに書いていますが、後日Qiitaあたりに日本語でまとめようと思います。
今回のアップデート以外の部分については以下にまとめてます。

qiita.com

ざっくり使い方

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

以上です。
是非使ってみてフィードバックをいただければ嬉しいです。

github.com

*1:それまではdeploy時と一緒にやる選択肢のみ

*2:アップロードするためのZIPアーカイブ

*3:正直、アレで1400 Starとか、やっぱり「何ができるか」よりも「誰が作ったか」が大事なんだな感あって、ちょっと悔しい

*4:JAWS Days 2016のタイムテーブルでLambda枠がまだ埋まってない(2015-01-23現在)んだけど、入れてくれたりしないかなー|д゚)チラッ