我在AWS lambda上成功使用Pychromeless repo。
现在我需要使用NaCL依赖项来解密字符串,但是我得到了
Unable to import module 'lambda_function': /var/task/lib/nacl/_sodium.abi3.so
补充
invalid ELF header
在AWS Lambda上运行该功能时。
我知道这是与AWS Lambda环境有关的特定问题,因为我可以在docker内部的Mac上运行该功能。
这是我的requirements.txt文件
boto3==1.6.18
botocore==1.9.18
selenium==2.53.6
chromedriver-install==1.0.3
beautifulsoup4==4.6.1
certifi==2018.11.29
chardet==3.0.4
editdistance==0.5.3
future==0.17.1
idna==2.7
python-telegram-bot==10.1.0
requests==2.19.1
soupsieve==1.7.3
urllib3==1.23
PyNaCl==1.3.0
这是dockerfile
FROM lambci/lambda:python3.6
MAINTAINER tech@21buttons.com
USER root
ENV APP_DIR /var/task
WORKDIR $APP_DIR
COPY requirements.txt .
COPY bin ./bin
COPY lib ./lib
RUN mkdir -p $APP_DIR/lib
RUN pip3 install -r requirements.txt -t /var/task/lib
和生成文件:
clean:
rm -rf build build.zip
rm -rf __pycache__
fetch-dependencies:
mkdir -p bin/
# Get chromedriver
curl -SL https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip > chromedriver.zip
unzip chromedriver.zip -d bin/
# Get Headless-chrome
curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-37/stable-headless-chromium-amazonlinux-2017-03.zip > headless-chromium.zip
unzip headless-chromium.zip -d bin/
# Clean
rm headless-chromium.zip chromedriver.zip
docker-build:
docker-compose build
docker-run:
docker-compose run lambda src/lambda_function.lambda_handler
build-lambda-package: clean fetch-dependencies
mkdir build
cp -r src build/.
cp -r bin build/.
cp -r lib build/.
pip install -r requirements.txt -t build/lib/.
cd build; zip -9qr build.zip .
cp build/build.zip .
rm -rf build
没有解密部分,该代码就可以很好地工作。因此,该问题与PyNaCl有100%相关。
解决这个问题有帮助吗?
答案 0 :(得分:0)
我认为您可以尝试像这样设置PyNaCl
:
SODIUM_INSTALL=system pip3 install pynacl
这将强制PyNaCl
使用AWS
提供的libsodium版本
请参阅this
{p>的最新版本中的已更新为PyNaCl
,因此可能与libsodium 1.0.16.
不兼容
因此您可以从AWS
中删除PyNaCl
并将其添加到您的requirements.txt
:
Dockerfile
或者可以像这样设置RUN SODIUM_INSTALL=system pip3 install pynacl -t /var/task/lib
并将dockerfile
保留在PyNaCl
中:
requirements.txt
在安装PyNaCI之前,也请尝试设置钠盐:
ARG SODIUM_INSTALL=system
答案 1 :(得分:0)
好的,这就是我的方法。我必须在EC2 AMI Linux 2实例上构建所有内容。
amzn2-ami-hvm-2.0.20190823.1-x86_64-gp2(ami-0a1f49a762473adbd)
启动实例后,我使用this script安装Python 3.6(和pip)以及创建和激活虚拟环境。
对于docker部分,我遵循了this tutorial,但途中也遇到了一些麻烦(必须
sudo yum install polkit
和
sudo usermod -a -G docker ec2-user
和
重启
和
sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
和
sudo chmod +x /usr/local/bin/docker-compose
)。
但是无论如何,我还是设法在EC2实例上使用docker,构建了zip文件并将其上传到Lambda环境,在那里一切都按预期工作正常。
我认为docker是一个独立于主机的环境,但我想并非如此。