首页 > 解决方案 > 如何在可重用的 CDK 结构中打包 Lambda?

问题描述

如果我想将 Lambda 函数重新分发为 CDK 构造,我有哪些选择?我的意思是指其他人可以在他们的项目中使用的一种构造,它可能定义一个或多个 Lambda 函数。

假设 CDK 构造是用 Typescript 编写的,那么构造本身可以打包用于其他用 Typescript 编写的 CDK 项目并通过 npm 重新分发,或者它可以转译成其他 JSII 支持的语言,例如 Python 或 Java,并在适当的模块位置,例如 Maven Central 等。

但是,如何通过该 CDK 模块(即 Lambda 触发时将执行的代码)重新分配 Lambda 的实现?

我能想到的选项是:

  1. 用 JS 或 Python 等语言编写 Lambda,并在 CDK 构造中定义 Lambda 内联。仅限于小函数并排除用其他语言编写的 Lambda,例如 Golang、Rust 或 Java。
  2. 构造的发布者将 Lambda 实现(作为 zip)保存在 S3 中的某处,并在该位置拥有构造点。这意味着发布模块的人将负责托管实现 zip,并假设使用该构造的人信任实现中编写的内容。
  3. 如果有的话,还有哪些其他选项可用?

标签: amazon-web-servicesaws-lambdaaws-cdk

解决方案


实现不能通过 npm 与 CDK 模块一起分发吗?如果 CDK 构造可以相对于自身解析资产(例如 via __dirname),那么它应该可以正常工作,不是吗?

这里有一个例子,作者使用相同的方法创建了一个可再分发的 lambda 层。

export class NodeJwtLayer extends LayerVersion {
  constructor(scope: Construct, id: string = "NodeJwtLayer") {
    super(scope, id, {
      code: new AssetCode(__dirname + "/nodejs.zip")

推荐阅读