Использование scrapy в AWS lambda-функции в качестве слоя

#python #amazon-web-services #web-scraping #scrapy #aws-lambda

#python #amazon-веб-сервисы #очистка веб-страниц #scrapy #aws-lambda

Вопрос:

Я пытаюсь использовать scrapy в лямбда-функции AWS в качестве слоя.

Я использовал pip для установки scrapy в свой каталог:

 pip install scrapy 
  

формат каталога соответствует всем слоям, которые у меня уже есть.
Я заархивировал и загрузил в layers.
Я включил слой в лямбда-функцию.
Я импортирую scrapy:

 import scrapy
  

и когда я запускаю проект, я получаю эту ошибку:

 {
  "errorMessage": "Unable to import module 'lambda_function'"
}
  

и

 Unable to import module 'lambda_function': /opt/python/lxml/etree.so: invalid ELF header
  

Комментарии:

1. scrapy использует lxml. для lxml требуется собственный код (etree.so ). Не уверен, что это можно сделать с помощью Lambda

Ответ №1:

Как следует из комментария @balderman, для запуска scrapy вам нужны собственные библиотеки. Это очень выполнимо, я постараюсь объяснить как можно проще.

Двоичные файлы для scrapy должны быть скомпилированы в той же среде, что и экземпляр lambda. Lambda загружается с помощью AWS Linux.

Вы можете либо загрузить EC2 под управлением AmazonLinux, либо использовать docker, самый простой способ — загрузить контейнер docker.

 $ sudo docker run -it amazonlinux bash
  

Теперь вам нужно загрузить / распаковать все .таким образом, файлы помещаются в каталог, а затем заархивируются. Кроме того, убедитесь, что вы сохранили все .таким образом, файлы внутри папки с именем lib внутри zip. После архивирования zip-файл должен выглядеть примерно так:

 .
├── lib
│   ├── libcrypto.so.10
│   ├── libcrypto.so.1.0.2k
│   ├── libfontconfig.so.1
│   ├── libfontconfig.so.1.7.0
.......
  

Затем вы можете просто сжать его и загрузить как слой. Оно будет загружено в / opt / в ваш лямбда-контейнер. AWS ищет файлы библиотеки в /opt/lib среди многих других расположений.

Сложной частью для вас было бы выяснить, как получить все необходимые файлы .so, чтобы scrapy работал должным образом.