サーバーレスでアプリを作っていて、日々Lambda関数を生産しています。
コンソールから作成することもできますが、コード管理が煩雑になるのと、IDEの補完機能を使いたいのとで、私はできるだけローカルで作成してからデプロイするようにしています。ただ、ローカルで作成したLambdaをデプロイするには、コードのZip化とファイルのアップロードが必要で地味に面倒です。
そういった作業をサポートしてくれるツールがあるので紹介したいと思います。
まずは手軽なやつから
lambda-uploader
いくつか使っている中で一番手軽なツール(だとおもう)
https://github.com/rackerlabs/lambda-uploader
インストール
pip install lambda-uploader
プロジェクト作成
mkdir myFunction
cd myFunction
touch my_function.py
my_function.pyに所望の実装を施します。
def lambda_handler(event, context):
return {'hello': 'world'}
lambda.jsonを作成します。
{
"name": "myFunction",
"description": "hello world",
"region": "ap-northeast-1",
"runtime": "python3.7",
"handler": "my_function.lambda_handler",
"role": "arn:aws:iam::00000000000:role/lambda_basic_execution",
"requirements": ["pygithub"],
"timeout": 30,
"memory": 128,
}
外部ライブラリを利用したい場合は、lambda.jsonにrequirementsを追加します。
{
...snip...
"role": "arn:aws:iam::00000000000:role/lambda_basic_execution",
"requirements": ["requests"],
"timeout": 30,
...snip...
}
(requirements.txtで指定することもできます。)
デプロイ
lambda.jsonを作成したディレクトリで以下のコマンドを実行します。
lambda-uploader
ターミナルに次のようなメッセージが出れば無事成功。
λ Building Package
λ Uploading Package
λ Fin
その他
lambda.jsonにはアカウントに依存した情報(role)が入っています。CI/CDにlambda-uploaderを利用する場合には、lambda.jsonをDevとPrdに分けて、--configオプションで切り替えるようにすると良さそう。