【发布时间】:2021-10-18 15:45:39
【问题描述】:
我有一个 lambda 层文件,其中定义了枚举(将在不同的 lambda 函数中使用),如下所示:
exports enum EventTypes {
Create,
Delete,
Update,
}
这很好用,因为我在不同的 lambda 函数中进行了测试。 然后我在同一个文件中添加了更多的接口定义,并将它们导入到我的实现代码中。它最终看起来像这样:
exports enum EventTypes {
Create,
Delete,
Update,
}
export interface ProjectEvent {
eventType: EventTypes;
}
export interface CreateEvent extends ProjectEvent {
userId: string;
}
export interface DeleteEvent extends ProjectEvent {
userList: string[];
}
export interface UpdateEvent extends ProjectEvent {
userList: string[];
}
使用这个版本的文件,我什至无法成功构建项目。 我的问题是:在将 Typescript 与 Lambda 层集成时,我是否遗漏了任何限制?
下面是我所说的设置我的 typescript-aws 集成:
[1]https://github.com/aws/aws-sam-cli/issues/2636
[2]https://evilmartians.com/chronicles/serverless-typescript-a-complete-setup-for-aws-sam-lambda
【问题讨论】:
-
如果您只是使用 Lambda 层来共享类型,那么它们的效率将会非常低 - 如果您共享的只是类型、服务等,请构建一个内部 npm 包并在多个函数中使用它。
-
除了 Ermiya(他总是擅长 AWS 问题)之外,您不能直接将对象从一个 lambda 传递到另一个 - 它总是在 lambda 之间转换为 JSON。因此,如果您有任何 lambdas 协同工作,那么您将有更多的开销和更容易出现错误的区域,因为您必须将 json 对象映射到您的界面中。出于这个原因,使用 json 兼容的对象在内部和 lambda 之间存储和传递数据要好得多。将 lambda 串在一起时,OOP 和许多经典的类继承都消失了(专注于消息!)
-
@ErmiyaEskandary 非常感谢您的建议,这绝对是跨函数共享接口定义的最佳实践!
-
@lynkfox 谢谢你的好话 :)
标签: typescript amazon-web-services aws-lambda aws-lambda-layers