AWS Lambda:处理变量输入类型

时间:2019-03-03 20:27:17

标签: aws-lambda

当传入的JSON的格式根据触发器的类型而变化时,处理AWS Lambda处理函数的输入的标准方法是什么?

例如我有一个Lambda函数,当在每小时计划的事件触发时,在S3存储桶中创建对象时会调用该函数,。显然,传递给处理程序的JSON的格式不同。

重载Lambda处理函数,对于一个签名将输入类型定义为S3Event,对于另一个签名将其定义为ScheduledEvent是否可以接受?如果不是,开发人员是否只是在JsonConvert.DeserializeObject块中调用try?还是建立多个Lambda函数(每种输入类型一个)的标准惯例(y!)?

1 个答案:

答案 0 :(得分:0)

每个事件应使用一个功能。

为一个Lambda拥有多个触发器只会使事情变得更加艰难,因为如果您要应用设计模式,最终将遇到一堆if / else,switch语句甚至是Factory方法。

现在认为Lambda函数较小且可维护。想一想应该做一件事并且应该做得很好的代码段。当您开始拥有多个触发器时,您最终会遇到“ Lambda Monolith”,因为它将承担太多责任。不仅如此,您还将Lambda函数与事件紧密结合在一起,这意味着一旦添加了新的触发器,您的Lambda代码就应该更改。在两个或三个触发器之后,这只是不可伸缩的。

另一个缺点是,只有像这样设计语言时,您才必须使用一种语言。对于某些用例,Java可能是最佳选择。但是对于其他人,可能是Node JS,Python,Go ...

从本质上讲,您的函数应该足够小以易于维护,甚至在必要时进行重写。为每个事件创建一个函数绝对没有错,尽管显然您强烈反对使用它。可以将每个Lambda视为独立的微服务,它可以独立扩展,并具有自己的CI / CD管道和自己的测试套件。

要考虑的另一件事是,是否要根据触发器类型限制Lambda并发执行。通过“一个Lambda-Does-It-All”模型是无法实现的。

每个触发器粘上一个Lambda,晚上睡觉会更好。