【发布时间】:2021-12-18 07:47:57
【问题描述】:
我有一个使用 javascript 构建的 AWS CDK 堆栈。 Stack 有多个 lambda。它们中的大多数都在 javascript 中。我想在 python 中添加一个 lambda。当我不导入外部依赖项时,python lambda 工作正常,但在我安装它们时不理解。我尝试将软件包安装在 package 文件夹或 python 文件夹中,并按照这些文章的建议进行压缩,但没有成功:
https://docs.aws.amazon.com/lambda/latest/dg/python-package.html https://aws.amazon.com/premiumsupport/knowledge-center/lambda-import-module-error-python/
我得到的错误是"Unable to import module 'py1': No module named 'x'"
(x 指的是我尝试导入的任何包名)
我的 javascript CDK 库代码是这样的:
// javascript lambda
new lambda.Function(this, 'lambda-js1', {
functionName: `js1`,
code: lambda.Code.fromAsset('assets/lambdajs'),
handler: 'js1.handler',
runtime: lambda.Runtime.NODEJS_14_X,
})
// python lambda
new lambda.Function(this, 'lambda-py1', {
functionName: `py1`,
code: lambda.Code.fromAsset('assets/lambdapy'),
handler: 'py1.handler',
runtime: lambda.Runtime.PYTHON_3_8,
})
我使用 assets/lambdapy 安装了依赖项
pip install x
pip install --target ./package x
pip install -t python/ x
之后我把它们拉上拉链
我的python代码在assets/lambdapy/py1.py
# not sure how to import. none of the below worked
import x
import package.x
import python.x
def handler(event, context):
return {
'statusCode': 200
}
在调用 python lambda 时,我得到
{
"errorMessage": "Unable to import module 'py1': No module named 'x'",
"errorType": "Runtime.ImportModuleError",
"stackTrace": []
}
【问题讨论】:
-
你需要在 Lambda 中使用 Layers。打包所有依赖项并创建一个层并上传包将它们导入您的 Lambda docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html
标签: python amazon-web-services aws-lambda aws-cdk