#amazon-web-services #docker #aws-lambda
Вопрос:
Я использую образ контейнера docker на лямбде для запуска своей модели ML. Моя лямбда — функция имеет триггер S3 для извлечения изображений. Я пытаюсь запустить свою лямбда-функцию, но получаю эту ошибку. Кто-нибудь, пожалуйста, может мне помочь?
PS — теперь я знаю, что /tmp-единственный доступный для записи каталог в lambda, но как решить эту проблему с помощью этого?
Ответ №1:
Как упоминали другие, /tmp
это единственный доступный для записи каталог в любых средах AWS Lambda, как с использованием контейнеров, так и без них.
Сказав это, вы должны переместить всю свою библиотеку (во время выполнения lambda-время сборки образа контейнера не работает) в этот каталог, чтобы все оставалось подключенным в библиотеке, а затем ссылаться на свой новый каталог библиотеки в среде пути к библиотеке для Lambda: LD_LIBRARY_PATH
Ссылка на ваш новый каталог библиотеки в среде пути к библиотеке для Lambda должна быть выполнена , потому что Lambda /opt/
по умолчанию просматривает каталог; и поскольку вы только что переместили свою библиотеку /tmp
, вам также следует обновить LD_LIBRARY_PATH
ее, чтобы она содержала это местоположение. Это можно сделать в файле Dockerfile:
# Set the LD_LIBRARY_PATH
ENV LD_LIBRARY_PATH="/opt/my-lib-folder/:$LD_LIBRARY_PATH"
или во время выполнения Лямбды:
os.environ['LD_LIBRARY_PATH'] = '/tmp/my-lib-folder:' os.environ['LD_LIBRARY_PATH']
def lambda_handler(event, context):
# your code ...
Если все еще есть проблемы, это может быть связано с проблемами связывания вашей библиотеки или с тем, что вы неправильно обновили свою LD_LIBRARY_PATH
.
ПРАВКА: Как указал @rok, вы не можете перемещать свои библиотеки во время создания образа контейнера, поскольку /tmp
AWS автоматически удалит папку.
Комментарии:
1. Я хочу добавить, что я только что столкнулся с той же проблемой, и перемещение библиотек в /tmp во время сборки образа недопустимо, потому что AWS очищает эту папку при запуске экземпляра, и вы получаете пустую папку и ошибку «файл не найден». Я не нашел никаких ссылок на это в документах, но я испытал это, и мое решение состояло в том, чтобы использовать папку tmp только во время выполнения лямбды.
2. @rok Я этого не знал, так что спасибо, что поделились этим! Лично мне никогда не приходилось перемещать библиотеки в свою
/tmp
папку, потому что мне никогда не требовалось, чтобы они были доступны для записи, но приятно знать, что это не сработает. Я исправлю свой ответ.
Ответ №2:
Файловая система в среде Lambda доступна только для чтения, за исключением /tmp
каталога.
Комментарии:
1. Хорошо, так можно ли переместить easyocr (библиотеку, которая, как я полагаю, вызывает ошибку) в каталог /tmp, чтобы устранить эту ошибку?
Ответ №3:
Эта ошибка, похоже, заключается в том, что он пытается создать свои папки конфигурации/кэша и терпит неудачу. По сути, вам нужно указать переменную MPLCONFIGDIR
среды для вашего контейнера и установить значение в каталог внутри /tmp, который доступен для записи.
Комментарии:
1. Я пробовал это, но это помогает только с предупреждающим сообщением, ошибка все еще сохраняется