Lui*_*ock 5 python python-3.x docker nacl-cryptography aws-lambda
我正在AWS lambda 上使用Pychromeless 存储库并取得成功。
\n\n现在我需要使用 NaCL 依赖项来解密字符串,但我得到了
\n\nUnable to import module \'lambda_function\': /var/task/lib/nacl/_sodium.abi3.so
与补充
\n\ninvalid ELF header\n\xc2\xa0
在 AWS Lambda 上运行该函数时。
\n\n我知道这是一个与 AWS Lambda 环境相关的特定问题,因为我可以在 Mac 上的 docker 中运行该函数。
\n\n这是我的requirements.txt 文件
\n\nboto3==1.6.18\nbotocore==1.9.18\nselenium==2.53.6\nchromedriver-install==1.0.3\nbeautifulsoup4==4.6.1\ncertifi==2018.11.29\nchardet==3.0.4\neditdistance==0.5.3\nfuture==0.17.1\nidna==2.7\npython-telegram-bot==10.1.0\nrequests==2.19.1\nsoupsieve==1.7.3\nurllib3==1.23\nPyNaCl==1.3.0\nRun Code Online (Sandbox Code Playgroud)\n\n这是 dockerfile
\n\nFROM lambci/lambda:python3.6\nMAINTAINER tech@21buttons.com\n\nUSER root\n\nENV APP_DIR /var/task\n\nWORKDIR $APP_DIR\n\nCOPY requirements.txt .\nCOPY bin ./bin\nCOPY lib ./lib\n\nRUN mkdir -p $APP_DIR/lib\nRUN pip3 install -r requirements.txt -t /var/task/lib\nRun Code Online (Sandbox Code Playgroud)\n\n和生成文件:
\n\nclean:\n rm -rf build build.zip\n rm -rf __pycache__\n\nfetch-dependencies:\n mkdir -p bin/\n\n # Get chromedriver\n curl -SL https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip > chromedriver.zip\n unzip chromedriver.zip -d bin/\n\n # Get Headless-chrome\n curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-37/stable-headless-chromium-amazonlinux-2017-03.zip > headless-chromium.zip\n unzip headless-chromium.zip -d bin/\n\n # Clean\n rm headless-chromium.zip chromedriver.zip\n\ndocker-build:\n docker-compose build\n\ndocker-run:\n docker-compose run lambda src/lambda_function.lambda_handler\n\n\nbuild-lambda-package: clean fetch-dependencies\n mkdir build\n cp -r src build/.\n cp -r bin build/.\n cp -r lib build/.\n pip install -r requirements.txt -t build/lib/.\n cd build; zip -9qr build.zip .\n cp build/build.zip .\n rm -rf build\nRun Code Online (Sandbox Code Playgroud)\n\n如果没有解密部分,代码就可以很好地工作。所以这个问题100%与PyNaCl有关。
\n\n有什么帮助解决这个问题吗?
\n我想你可以尝试PyNaCl这样设置:
SODIUM_INSTALL=system pip3 install pynacl
Run Code Online (Sandbox Code Playgroud)
这将强制PyNaCl使用由提供的 libsodium 版本AWS
看到这个
在最新版本中PyNaCl更新为,libsodium 1.0.16.因此可能不兼容AWS
因此您可以将其删除PyNaCl并requirements.txt添加到您的Dockerfile:
RUN SODIUM_INSTALL=system pip3 install pynacl -t /var/task/lib
Run Code Online (Sandbox Code Playgroud)
或者也许像这样设置dockerfile并PyNaCl保留requirements.txt:
ARG SODIUM_INSTALL=system
Run Code Online (Sandbox Code Playgroud)
在安装 PyNaCI 之前尝试设置钠:
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
| 归档时间: |
|
| 查看次数: |
2410 次 |
| 最近记录: |