Создание 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с общим правилом, но обе они приводят к тем же результатам, что и две предыдущие попытки.

0 ответов

Другие вопросы по тегам