Создание zip-архива Python для AWS Lambda с использованием Bazel
У меня есть монорепозиторий, содержащий набор лямбда-выражений Python AWS, и я использую Bazel для создания и упаковки лямбда-выражений. Теперь я пытаюсь использовать Bazel для создания zip-файла, который соответствует ожидаемой упаковке AWS Lambdas и который я могу загрузить в Lambda. Хотите знать, как лучше всего сделать это с Базелем?
Ниже приведены несколько разных вещей, которые я пробовал до сих пор:
Попытка 1: py_binary
СТРОЙ.базел
py_binary(
name = "main_binary",
srcs = glob(["*.py"]),
main = "main.py",
visibility = ["//appcode/api/transaction_details:__subpackages__"],
deps = [
requirement("Faker"),
],
)
Проблема:
Это генерирует следующее:
- main_binary(исполняемый файл Python)
- main_binary.runfiles
- main_binary.runfiles_manifest
Lambda ожидает, что обработчик будет иметь формат . Поскольку это исполняемый файл, а не файл python, он не раскрывает фактический метод обработчика, и лямбда взрывается, потому что не может его найти. Я попытался обновить конфигурацию обработчика, чтобы просто указать на
main_binary
но он взрывается, потому что ожидает два аргумента (т.е.
lambda_function.lambda_handler
).
Попытка 2: py_library + pkg_zip
СТРОЙ.базел
py_library(
name = "main",
srcs = glob(["*.py"]),
visibility = ["//appcode/api/transaction_details:__subpackages__"],
deps = [
requirement("Faker"),
],
)
pkg_zip(
name = "main_zip",
srcs =["//appcode/api/transaction_details/src:main" ],
)
Проблема:
Это создает zip-файл с:
- main.py
-
__init__.py
ZIP-файл теперь включает в себя
main.py
но ни одна из его зависимостей времени выполнения. Таким образом, лямбда взрывается, потому что не может найти
Faker
.
Другие попытки:
Я также пытался использовать
--build_python_zip
флаг, а также
@bazel_tools//tools/zip:zipper
с общим правилом, но обе они приводят к тем же результатам, что и две предыдущие попытки.