如何使用AWS CDK在CDK构建上安装Lambda函数的依赖项

Mil*_*lan 6 amazon-web-services aws-cdk

使用AWS SAM时,我曾经运行build命令,该命令将遍历我所有的Lambda函数包并安装它们的依赖项(npm install在它们上运行)。

如何使用AWS CDK实现相同的行为?它似乎不是自动执行的,还是我缺少了什么?

小智 12

您可以使用本地构建脚本轻松完成此操作,如下所示:

    const websiteRedirectFunction = new lambda.Function(
      this,
      "RedirectFunction",
      {
        code: lambda.Code.fromAsset(path.resolve(__dirname, "../../redirect"), {
          bundling: {
            command: [
              "bash",
              "-c",
              "npm install && npm run build && cp -rT /asset-input/dist/ /asset-output/",
            ],
            image: lambda.Runtime.NODEJS_12_X.bundlingDockerImage,
            user: "root",
          },
        }),
        handler: "index.redirect",
        tracing: lambda.Tracing.ACTIVE,
        runtime: lambda.Runtime.NODEJS_12_X,
      }
    );
Run Code Online (Sandbox Code Playgroud)

假设您有一个要构建并上传 Lambda 的处理程序和 node_modules 的文件夹。

来自文档

使用 lambda.Code.fromAsset(path) 时,可以通过在 Docker 容器中运行命令来捆绑代码。资产路径将安装在 /asset-input 处。Docker 容器负责将内容放入 /asset-output。/asset-output 处的内容将被压缩并用作 Lambda 代码。


0x3*_*dfb 6

这个功能确实缺失。您需要编写自己的包装。请记住,如果任何依赖项(例如 Numpy)使用具有本机 C 代码的共享库,则 lambda 依赖项必须构建在与 AWS (Linux) 中的目标系统具有相同架构的系统上。

有一个可用的 Docker 镜像,旨在提供一个尽可能接近 AWS 的环境:lambci/lambda:build-python3.7

因此,如果您在任何非 Linux 架构上进行构建,则可能需要它来实现一些更复杂的 lambda 函数。

编辑:我开源了用于 lambda 打包的 Python 代码:https://gitlab.com/josef.stach/aws-cdk-lambda-asset