我尝试在AWS中使用Scrapy lambda函数作为层。
我使用pip在我的目录中安装了scrapy:
pip install scrapy
目录格式是我已经在工作的所有层。2我压缩并上传到层中。3我把层包含到lambda函数中。4我导入了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条答案
按热度按时间8tntrjer1#
正如@balderman的评论所建议的,你需要原生库来运行scrapy,这是非常可行的,我会尽可能简单地解释。
Scrapy的二进制文件必须在与lambda示例相同的环境中编译。Lambda使用AWS Linux启动。
你可以 Boot 一个运行AmazonLinux的EC2或者使用Docker,最简单的方法是启动一个Docker容器。
现在你需要把所有的.so文件下载/解压缩到一个目录中,然后压缩它。另外,确保把所有的.so文件保存在zip中一个名为lib的文件夹中。压缩后,zip看起来应该类似于:
然后你可以压缩它并将它作为一个层上传。它将被上传到你的Lambda容器中的/opt/。AWS在many other locations中的/opt/lib下寻找库文件。
对您来说,最具挑战性的部分是找出如何获得所有必需的.so文件,以便使Scrapy正常运行。