Closed3

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

muleyuckmuleyuck

以下の要件を満たすようになることを目標とする

  • PythonプロジェクトをLambda用にzip化して気軽にデプロイしたい
    • Dockerにするほどではなくもっとシンプルにしたい時
  • ただしPythonプロジェクトはuvで管理したい

Pythonプロジェクトの構成

./lambda_function
├── .venv
├── main.py
├── pyproject.toml
└── uv.lock
muleyuckmuleyuck

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)
muleyuckmuleyuck

あとはできあがった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ヶ月前にクローズされました