🐷
lambrollでサブディレクトリにある関数を指定する
lambrollでlambda関数を構築する
pythonでlambda関数を構築する。そのデプロイにlambrollを利用したい。対象のディレクトリ構成に応じてどのようにデプロイ設定をすればよいか。
ルートディレクトリにハンドラー関数がある場合
ルートディレクトリに lambda_function.py
があり、そこで定義されている関数 lambda_handler
を呼び出したい場合。
この場合はlambrollのREADMEにある通り、単に lambroll deploy
すればよい。
$ ls
function.json lambda_function.py
$ cat function.json
{
"FunctionName": "sample-lambroll",
"Handler": "lambda_function.lambda_handler",
"MemorySize": 128,
"Role": "{{ env `IAM_ROLE_LAMBDA` }}",
"Runtime": "python3.11",
"Timeout": 3
}
$ cat lambda_function.py
def lambda_handler(event, context):
print('hello lambroll')
$ lambroll deploy
2023/08/23 23:07:32 [info] lambroll v0.14.3 with function.json
2023/08/23 23:07:32 [info] starting deploy function sample-lambroll
2023/08/23 23:07:32 [info] creating zip archive from .
2023/08/23 23:07:32 [info] zip archive wrote 604 bytes
2023/08/23 23:07:32 [info] updating function configuration
2023/08/23 23:07:32 [info] State:Active LastUpdateStatus:Successful
2023/08/23 23:07:32 [info] updated function configuration successfully
2023/08/23 23:07:32 [info] updating function code
2023/08/23 23:07:32 [info] State:Active LastUpdateStatus:InProgress
2023/08/23 23:07:32 [info] waiting for LastUpdateStatus Successful
2023/08/23 23:07:33 [info] State:Active LastUpdateStatus:Successful
2023/08/23 23:07:33 [info] updated function code successfully
2023/08/23 23:07:33 [info] deployed version 6
2023/08/23 23:07:33 [info] updating alias set current to version 6
2023/08/23 23:07:34 [info] alias updated
2023/08/23 23:07:34 [info] completed
サブディレクトリにハンドラー関数がある場合
プロダクションコードをsrcディレクトリに、テストをtestディレクトリに配置するようなケース。このような場合にどのようにlambrollでzipを作成してlambda関数を構築するべきか。
$ ls
function.json src
$ ls src
lambda_function.py
以下の2通りの方法が考えられる。
サブディレクトリをzip化する
lambroll deploy
コマンドには --src
フラグが指定できる。ここでソースコードが配置されているディレクトリを指定すればよい。こうすればsrcディレクトリ以下のみがzip化されるので不要なファイルなどが含まれることはない。
基本的にはこの方式でよさそう。
$ lambroll deploy --src src
2023/08/23 23:11:49 [info] lambroll v0.14.3 with function.json
2023/08/23 23:11:49 [info] starting deploy function sample-lambroll
2023/08/23 23:11:50 [info] creating zip archive from src
2023/08/23 23:11:50 [info] zip archive wrote 235 bytes
2023/08/23 23:11:50 [info] updating function configuration
2023/08/23 23:11:50 [info] State:Active LastUpdateStatus:Successful
2023/08/23 23:11:50 [info] updated function configuration successfully
2023/08/23 23:11:50 [info] updating function code
2023/08/23 23:11:50 [info] State:Active LastUpdateStatus:InProgress
2023/08/23 23:11:50 [info] waiting for LastUpdateStatus Successful
2023/08/23 23:11:51 [info] State:Active LastUpdateStatus:Successful
2023/08/23 23:11:51 [info] updated function code successfully
2023/08/23 23:11:51 [info] deployed version 7
2023/08/23 23:11:51 [info] updating alias set current to version 7
2023/08/23 23:11:51 [info] alias updated
2023/08/23 23:11:51 [info] completed
handlerでサブディレクトリを指定する
function.json
に記載するHandlerでsrc.lambda_function.lambda_handler
のようにディレクトリを含めて指定してもよい。この方法だとlambda関数上でもsrcディレクトリ構造は保たれる。testディレクトリが存在する場合はtestディレクトリも含めてzip化されるので、これを防ぎたい場合は .lambdaignore
で test/*
のように指定すればよい。
$ cat function.json
{
"FunctionName": "sample-lambroll",
"Handler": "src.lambda_function.lambda_handler",
"MemorySize": 128,
"Role": "{{ env `IAM_ROLE_LAMBDA` }}",
"Runtime": "python3.11",
"Timeout": 3
}
$ lambroll deploy
2023/08/23 23:18:02 [info] lambroll v0.14.3 with function.json
2023/08/23 23:18:02 [info] starting deploy function sample-lambroll
2023/08/23 23:18:02 [info] creating zip archive from .
2023/08/23 23:18:02 [info] zip archive wrote 612 bytes
2023/08/23 23:18:02 [info] updating function configuration
2023/08/23 23:18:02 [info] State:Active LastUpdateStatus:Successful
2023/08/23 23:18:02 [info] updated function configuration successfully
2023/08/23 23:18:02 [info] updating function code
2023/08/23 23:18:02 [info] State:Active LastUpdateStatus:InProgress
2023/08/23 23:18:02 [info] waiting for LastUpdateStatus Successful
2023/08/23 23:18:03 [info] State:Active LastUpdateStatus:InProgress
2023/08/23 23:18:03 [info] waiting for LastUpdateStatus Successful
2023/08/23 23:18:05 [info] State:Active LastUpdateStatus:Successful
2023/08/23 23:18:06 [info] updated function code successfully
2023/08/23 23:18:06 [info] deployed version 8
2023/08/23 23:18:06 [info] updating alias set current to version 8
2023/08/23 23:18:06 [info] alias updated
2023/08/23 23:18:06 [info] completed
Discussion