Closed3
仮想環境なPythonプロジェクトをzip化してLambdaへデプロイする

以下の要件を満たすようになることを目標とする
- PythonプロジェクトをLambda用にzip化して気軽にデプロイしたい
- Dockerにするほどではなくもっとシンプルにしたい時
- ただしPythonプロジェクトはuvで管理したい
Pythonプロジェクトの構成
./lambda_function
├── .venv
├── main.py
├── pyproject.toml
└── uv.lock

uv add
したパッケージは.venv/lib/python3.??/site-packages
の配下に存在しているので
これらとLambda関数を定義したPythonファイル(e.g. main.py)を1つのZIPファイルにすれば良い
source_dir="$(pwd)/lambda_function"
zip_path="$(pwd)/lambda_function.zip"
# clean up
rm -rf ${zip_path}
# create zip
(cd ${source_dir}/.venv/lib/python3.12/site-packages && zip -r ${zip_path} .
(cd ${source_dir} && zip -g ${zip_path} ./main.py)

あとはできあがったZIPをterraformなどでLambdaにデプロイすれば良い
resource "aws_lambda_function" "lambda_sandbox" {
function_name = "sandbox-lambda-function"
handler = "main.lambda_handler"
role = aws_iam_role.lanmbda_role.arn
filename = "./lambda_function.zip"
runtime = "python3.12"
source_code_hash = filebase64sha256("./lambda_function.zip")
environment {
variables = {
HOGE = var.hoge
}
}
}
このスクラップは3ヶ月前にクローズされました