前に個人的な学習でLambdaを勉強しましたが、仕事で使う機会があり、気をつけるポイントを再度確認。
以前の学習リンク
Amazon SESでの受信→S3→Lambdaでのメール転送
デバッグがらみ
前回も説明しましたが、テストでeventのJSONを登録しておくと、簡単にテストが実行できてものすごい楽です。
ちなみに何か適当なJSON整形サービスを使って、整形しましょう。
ただcloudWatchなどのログにはかれるeventをデバッグした場合、JSONのキーが小文字なため、大文字に変換しないと正常なJSONと認められません。地味なハマりポイントです。
またBooleanをクオートで括らなくてはいけないですし、JSONはクオートがダブルクオートじゃないとうまく整形できないので注意しましょう。
Editorの整形機能などもうまく使いましょう。
ローカルでのLambda環境
ミニマムなサイズだったらいいですが、ある程度の規模になったらほとんどがLambdaのオンラインエディタでは開発しにくいと思います。そもそもライブラリが必要な場合、Lambdaでは直でインストールすることはできません。
デバッグをどうすればいいか、途方にくれていたところLambdaの環境自体をローカルで作れるようです。
1 |
pip install python-lambda-local |
あとはtest時に登録したものと同じjsonファイルを、event.jsonなどとしておいて、
1 |
python-lambda-local -f lambda_handler 実行スクリプト名 event.json(event内容のJSON) |
と打てばテストできます。
参考リンク
AWS Lambda Pythonをローカル環境で実行&デプロイ
今回は使いませんでしたが、Lambda自体のデプロイもできるようです。
プログラム
ある程度の規模になったらオンラインのエディタではなく、ローカル開発開発環境でコードを書いてzipとしてあげると思います。またそもそも、ので、ローカルで作ってzipで固めてあげることになります。
その場合、ディレクトリの中に入りzipを使わないとフォルダができてしまい、実行ファイルを認識できません。
例 resizeDirという中で実行スクリプトとライブラリを入れている場合は
1 2 3 4 5 6 7 |
resizeDir - execute.py - libs cd resizeDir zip -r upload.zip * |
などとうつ必要があります。(フォルダ名はupload.zipでなくても別にいいと思います)
別件でPythonネタですが、pipでインストールする場合、
pip install ライブラリ名 -t .
とうつとカレントディレクトリのみのインストールになります。
イベント自体のトリガーの付与と削除
S3の場合、イベントを付与した場合、削除するのにLambdaの画面だけでトリガーを除いても、イベントは削除されません。
S3自体にトリガーが付与されているため、S3にログイン、プロパティからEventsにアクセスしてみてください。
Lambdaのトリガーが付いているはずなので、これを削除しましょう。