Я определил слой Lambda следующим образом:
Код: Выделить всё
my_layer = _lambda.LayerVersion(
self, "MyLayer",
code=_lambda.Code.from_asset("layer_code_directory"),
compatible_runtimes=[_lambda.Runtime.PYTHON_3_12],
description="Lambda Layer for common dependancies"
)
Однако, когда я пытаюсь запустить Lambda, я получаю сообщение об ошибке, что некоторые файлы из криптографии отсутствуют:
Runtime.ImportModuleError: невозможно импортировать модуль «MyAuthorizer»: /opt/python/cryptography/hazmat/bindings/_rust.abi3.so: невозможно открыть общий объект файл: такого файла или каталога нет
Я отладил это, проверив, доступен ли пакет для Lambda и какие пути имеют эти файлы, которые отсутствуют. Я сверил их с сообщением об ошибке, и все файлы доступны в правильных местах.
Из некоторых исследований Google я теперь предполагаю, что версия криптографии, Я устанавливаю локально через pip, который несовместим со средой выполнения лямбда, и, черт возьми, pip устанавливает разные файлы в зависимости от того, на какой ОС вы работаете.
При первых попытках я работал на Alpine ( Официальный докер-контейнер Python), и теперь я перешел на контейнер, основанный на AWS Python, Lambda и Image. Я предполагал, что когда я объединяю пакеты, установленные в этой среде, они будут совместимы с AWS Lambda. Но я по-прежнему получаю то же сообщение об ошибке.
Как решить эту проблему или что еще может быть?
Я предполагаю, что развертывание кода Lambda и пакеты через AWS CDK — очень распространенная практика, но используются Google, AWS, Docs и LLM.
Мне не удалось найти решение или рабочий пример.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ambda-runt