如何确保本地开发环境与 AWS Lambda 运行时 (AWS CDK V2) 之间的兼容性

问题描述 投票:0回答:1

我目前在 AWS Lambda 上使用 Python 包时遇到问题。

我定义了一个这样的 Lambda 层:

        my_layer = _lambda.LayerVersion(
        self, "MyLayer",
        code=_lambda.Code.from_asset("layer_code_directory"), 
        compatible_runtimes=[_lambda.Runtime.PYTHON_3_12], 
        description="Lambda Layer for common dependancies"
    )

该层用于我的大多数 Lambda 共享的常见依赖项。其中之一是加密包。 pip 将requirements.txt 中的所有包安装到“layer_code_directory”中。 CDK(据我所知)将它们打包成 zip,然后上传到 lambda 层。

但是,当我尝试运行 Lambda 时,出现错误,缺少一些加密文件:

Runtime.ImportModuleError:无法导入模块“MyAuthorizer”:/opt/python/cryptography/hazmat/bindings/_rust.abi3.so:无法打开共享对象文件:没有这样的文件或目录

我通过检查该包是否可用于 Lambda 以及这些文件缺少哪些路径来对此进行调试。我用错误消息交叉检查了它们,所有文件都在正确的位置

根据谷歌的一些研究,我现在假设,我通过 pip 在本地安装的加密版本与 lambda 运行时不兼容,据我所知,pip 根据您所在的操作系统安装不同的文件。

在我的第一次尝试中,我使用的是 Alpine(官方 Python docker 容器),现在我已经迁移到基于 AWS Python、Lambda 和 Image 的容器。我假设,当我捆绑在此环境中安装的软件包时,这些软件包将与 AWS Lambda 兼容。但我仍然收到同样的错误消息。

如何解决这个问题或者还有什么可能?

我认为,通过 AWS CDK 部署 Lambda 代码和包是一种非常常见的做法,但使用的是 Google、AWS、Docs 和 LLM。

我无法找到解决方案或工作示例。

python amazon-web-services aws-lambda aws-cdk
1个回答
0
投票

在我看来,两件事可能是问题所在:
准备好一切后,在拉拉链之前,这样做 -

mkdir python
cp -r layer_code_directory/lib python/
zip -r layer_content.zip python

并使用 py 3.11(基于 lambda 文档)。

这些有点明显,所以如果情况并非如此,请分享您的文件结构,我将尝试使用合适的解决方案更新答案。

© www.soinside.com 2019 - 2024. All rights reserved.