在AWS lambda函数中使用Scrapy作为层

zphenhs4  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(167)

我尝试在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
8tntrjer

8tntrjer1#

正如@balderman的评论所建议的,你需要原生库来运行scrapy,这是非常可行的,我会尽可能简单地解释。
Scrapy的二进制文件必须在与lambda示例相同的环境中编译。Lambda使用AWS Linux启动。
你可以 Boot 一个运行AmazonLinux的EC2或者使用Docker,最简单的方法是启动一个Docker容器。

$ sudo docker run -it amazonlinux bash

现在你需要把所有的.so文件下载/解压缩到一个目录中,然后压缩它。另外,确保把所有的.so文件保存在zip中一个名为lib的文件夹中。压缩后,zip看起来应该类似于:

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

然后你可以压缩它并将它作为一个层上传。它将被上传到你的Lambda容器中的/opt/。AWS在many other locations中的/opt/lib下寻找库文件。
对您来说,最具挑战性的部分是找出如何获得所有必需的.so文件,以便使Scrapy正常运行。

相关问题