【问题标题】:How to package up Lambda within reusable CDK construct?如何在可重用的 CDK 结构中打包 Lambda?
【发布时间】:2020-11-08 07:57:58
【问题描述】:

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

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

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

我能想到的选项是:

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

【问题讨论】:

  • 你大概可以看到cdk内部是如何完成的。 CustomResource SdkCall 在底层部署了它自己的 lambda。此外,还有用于日志组生命周期管理的工具,可在后台部署 lambda。

标签: amazon-web-services aws-lambda aws-cdk


【解决方案1】:

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

an example here,作者使用相同的方法创建了一个可再分发的 lambda 层。

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

【讨论】:

  • 例如,这是否适用于通过 Python 或 NuGet 分发的模块?
  • 从概念上讲,我不明白为什么不 - 包系统只需要能够分发到资产并且 CDK 构造需要能够找到它。不过,我完全不知道如何为 Python 或 Nuget 做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 2021-09-30
  • 2023-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多