3

我在 AWS lambda 上成功使用了 Pychromeless 存储库。

现在我需要使用 NaCL 依赖项来解密字符串,但我得到了

Unable to import module 'lambda_function': /var/task/lib/nacl/_sodium.abi3.so

有一个补充

invalid ELF header  

在 AWS Lambda 上运行该函数时。

我知道这是与 AWS Lambda 环境相关的特定问题,因为我可以在我的 Mac 上的 docker 内运行该函数。

这是我的 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

这是码头文件

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

和makefile:

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% 相关。

解决这个问题有什么帮助吗?

4

2 回答 2

0

我想你可以尝试这样设置PyNaCl

SODIUM_INSTALL=system pip3 install pynacl

这将强制PyNaCl使用由提供的 libsodium 版本AWS

看到这个

在最新版本中PyNaCl已更新为,libsodium 1.0.16.因此可能与AWS

因此您可以从中删除PyNaCl并将requirements.txt其添加到您的Dockerfile

RUN SODIUM_INSTALL=system pip3 install pynacl -t /var/task/lib

或者也许像这样设置并dockerfile保留:PyNaClrequirements.txt

ARG SODIUM_INSTALL=system

在安装 PyNaCl 之前也尝试设置钠:

RUN wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.15.tar.gz \ && tar xzf libsodium-1.0.15.tar.gz \ && cd libsodium-1.0.15 \ && ./configure \ && make install

于 2019-09-09T12:18:07.867 回答
0

好的,我就是这样做的。我必须在 EC2 AMI Linux 2 实例上构建一切。

amzn2-ami-hvm-2.0.20190823.1-x86_64-gp2 (ami-0a1f49a762473adbd)

启动实例后,我使用此脚本安装 Python 3.6(和 pip)并创建和激活虚拟环境。

对于 docker 部分,我按照本教程进行操作,途中遇到了一些麻烦(不得不

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 是一个独立于主机的环境,但我想事实并非如此。

于 2019-09-10T15:45:22.080 回答