当前位置: 首页 > 知识库问答 >
问题:

如何在使用AWS CDK构建cdk时安装lambda函数的依赖项

范哲
2023-03-14

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

如何使用AWS CDK实现相同的行为?它似乎不是自动完成的,还是我遗漏了什么?

共有3个答案

乐欣可
2023-03-14

它不会自动完成,您需要打包这些。然后,您将能够使用fromAsset或fromBucket将代码连接到函数

乐正远航
2023-03-14

使用如下本地构建脚本,您可以非常轻松地执行此操作:

    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,
      }
    );

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

从文档中:

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

王子明
2023-03-14

这个功能确实缺失了。你需要自己编写包装。请记住,如果任何依赖项(如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

 类似资料:
  • 我正在试用AWS Codestar。我的目标是部署一个非平凡的lambdaendpoint,即处理程序具有依赖关系的地方。理想情况下,我希望能够在文件,但这似乎不是那么简单。具体地说,我想部署一个依赖于nltk的lambda处理程序,其中nltk标记器“punkt”的文件作为代码构建过程的一部分下载,并为lambda打包。 如何通过和?下面,我试图将依赖项安装到子目录,并将其包含在zip工件中。

  • 我在Eclipse内部使用Eclipse Maven(m2e),并且运行我的项目如下所示: 我的如下所示: 在我运行maven安装后,它正在工作... null 我没有办法...谁能告诉我一个正确的方法来添加我的依赖项在JAR?我不敢相信这么复杂,而且我到处都找不到我的问题的答案… 事先谢谢你

  • 问题内容: 我正在尝试使用Google Cloud Container Builder使用GCP构建触发器来自动构建容器 我的代码在Go中,并且在项目根目录中有一个文件夹,其中包含我所有的Go依赖项(我使用)。但是,此文件夹未签入到源代码管理中。 我有一个文件,首先将Go源代码构建为可执行文件,然后使用此可执行文件构建Docker映像。Container Builder确保这些构建步骤可以访问我的

  • 问题内容: 我已经建立了两个RPM套件 取决于存在的文件,它在RPM软件包中正确反映,如下所示: 由于缺少依赖项,安装失败。 如何确保在安装过程中自动安装? 我确实按照此处所述尝试了该选项,但对我而言不起作用。 还有其他办法吗? 谢谢你的帮助。 问题答案: 创建一个(本地)存储库,并使用它来为您解决依赖关系。 CentOS Wiki有一个漂亮的页面,提供有关此操作方法的信息。CentOS Wiki

  • 我有一个场景,需要使用AWS CDK python语言创建多个lambda函数。 当我尝试为每个函数创建多个堆栈时,它创建了第一个函数和显示该函数已经存在的其余函数。 如果我们调试cdk。对于创建的模板,两个堆栈Lambda函数显示相同的资源ID,如下所示: 如何为创建多个函数的资源获取唯一ID?你能建议如何克服这个问题吗?我想创建多个lambda函数,即使解决方案是通过创建循环来实现的,也很好

  • If you have just checked out a package from version control, you will need to install those dependencies. If you are adding dependencies for your project, then those dependencies are automatically ins