我需要一个“傻瓜式”的答案来回答这个问题,我知道以前已经有人问过这个问题。
我们正在为 AWS 托管的应用程序使用无服务器框架。Runtime=python3.8
得到了一个不错的大 yml 文件,其中包含 16 个函数,其中 2 个包含用于密码学和 PyNaCl 的层,我们从这里引入 -https://github.com/keithrozario/Klayers https://github.com/keithrozario/Klayers并已经成功使用了一段时间。
上周,我需要更新一个不同的函数,这意味着重新测试,这意味着发现有更新版本的加密层,所以我将其更新为 Cyptography v.39。现在我有一个因错误而失败的函数,/lib64/libc.so.6: version `GLIBC_2.28' not found (required by /var/task/cryptography/hazmat/bindings/_rust.abi3.so)
从 07/2022 开始就没有使用过这个功能,当时还好。显然,距离我们从无服务器重新部署以来也已经过去了很长时间。
尝试修复:
- 我恢复到之前的加密层;没有不同
- 我通过此链接找到了一个答案https://aws.amazon.com/premiumsupport/knowledge-center/lambda-python-package-complete/ https://aws.amazon.com/premiumsupport/knowledge-center/lambda-python-package-compatible/,按照该指南更改我的本地安装,并制作我自己的图层并将其附加到控制台中;没有不同
- 另一个SO答案引导我来到这里 -https://github.com/pyca/cryptography/issues/6390 https://github.com/pyca/cryptography/issues/6390,然后转到https://github.com/pyca/cryptography/issues/6391 https://github.com/pyca/cryptography/issues/6391,这也没有帮助
- 今天我发现了这个链接https://repost.aws/questions/QU85KE-2hPQ4KDQyByKV_WIw/creating-a-lambda-zip-package-that-runs-python-package-cryptography https://repost.aws/questions/QU85KE-2hPQ4KDQyByKV_WIw/creating-a-lambda-zip-package-that-runs-python-package-cryptographyOP 表示他们必须将所有 lambda 从 x86_64 转换为 arm64,即使这些函数没有使用密码学。这看起来很疯狂,而且……怎么办?
这个问题Lambda 函数因 /lib64/libc.so.6 失败:找不到版本“GLIBC_2.18” https://stackoverflow.com/questions/69475140/lambda-function-failing-with-lib64-libc-so-6-version-glibc-2-18-not-found包括从 Cryptography v.39 一直回到 v.3.4.7(从 03/2021 开始)的建议,这似乎是个糟糕的建议。当然,这两个版本之间的 14 次更新包括一些重要的变化。
我不知所措。我觉得我只是在原地踏步,同时无法在我尝试更新的实际功能上取得进展,因为这是一个障碍。
我正在使用无服务器并且https://www.npmjs.com/package/serverless-python-requirements https://www.npmjs.com/package/serverless-python-requirements捆绑 Python 3.9 函数,并遇到了相同的错误。我向无服务器插件添加了几个 pip 参数来指定目标系统,这让我解决了这个问题:pipCmdExtraArgs: ['--platform manylinux2014_x86_64', '--only-binary=:all:']
这是我用于插件的完整配置(来自我的 serverless.ts):
pythonRequirements: {
dockerizePip: false,
usePoetry: false,
layer: true,
useDownloadCache: false,
useStaticCache: false,
pipCmdExtraArgs: ['--platform manylinux2014_x86_64', '--only-binary=:all:'],
slim: true
}
这会产生如下所示的 pip install 命令(以防万一您在管道中手动调用 pip install):python3.9 -m pip install --platform manylinux2014_x86_64 --only-binary=:all: -t /someOutputFolder -r requirements.txt
更新:我发现的另一个选择是使用 docker 容器作为 lambda 容器,并在 dockerfile 中安装 python 依赖项,如这些文档所示:https://docs.aws.amazon.com/lambda/latest/dg/images-create.html https://docs.aws.amazon.com/lambda/latest/dg/images-create.html无服务器使得部署容器镜像变得非常容易:https://www.serverless.com/blog/container-support-for-lambda https://www.serverless.com/blog/container-support-for-lambda
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)