如何使用 Javascript AWS CDK 部署 Python AWS Lambda 及其依赖项?

ana*_*rei 1 python amazon-web-services aws-lambda aws-cdk

我有一个使用 JavaScript 构建的 AWS CDK 堆栈。堆栈有多个 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,
})
Run Code Online (Sandbox Code Playgroud)

assets/lambdapy我在使用中安装了依赖项

pip install x
pip install --target ./package x
pip install -t python/ x
Run Code Online (Sandbox Code Playgroud)

之后我把它们拉上拉链

我的Python代码在assets/lambdapy/py1.py

pip install x
pip install --target ./package x
pip install -t python/ x
Run Code Online (Sandbox Code Playgroud)

调用 python lambda 后,我得到

{
  "errorMessage": "Unable to import module 'py1': No module named 'x'",
  "errorType": "Runtime.ImportModuleError",
  "stackTrace": []
}
Run Code Online (Sandbox Code Playgroud)

gsh*_*hka 5

使用aws-cdk.aws-lambda-pythonL2 构造,它会自动安装依赖项。

这是文档:

https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-python-readme.html

上面文档中的打字稿示例:

import * as lambda from "@aws-cdk/aws-lambda";
import { PythonFunction } from "@aws-cdk/aws-lambda-python";

new PythonFunction(this, 'MyFunction', {
  entry: '/path/to/my/function', // required
  index: 'my_index.py', // optional, defaults to 'index.py'
  handler: 'my_exported_func', // optional, defaults to 'handler'
  runtime: lambda.Runtime.PYTHON_3_6, // optional, defaults to lambda.Runtime.PYTHON_3_7
});
Run Code Online (Sandbox Code Playgroud)

它将安装来自诗歌文件、pipfile 或 requiremenets.txt 的依赖项

  • 这是迄今为止最简单的解决方案。请注意,对于 CDK 的当前版本(目前为 v2.10),这仍处于 alpha 阶段,这意味着您需要单独安装 `pip install aws-cdk.aws-lambda-python-alpha`,然后使用 `pip install aws-cdk.aws-lambda-python-alpha` 导入它将 aws_cdk.aws_lambda_python_alpha 导入为 aws_lambda_python`。虽然这个特殊的构造本身可能只是创建一个层,但我发现它很混乱,并且需要在我的应用程序中创建一个层来为单个 lambda 添加 deps,这增加了工作量。 (3认同)