当传入的JSON的格式根据触发器的类型而变化时,处理AWS Lambda处理函数的输入的标准方法是什么?
例如我有一个Lambda函数,当在每小时计划的事件触发时,在S3存储桶中创建对象时会调用该函数,或。显然,传递给处理程序的JSON的格式不同。
重载Lambda处理函数,对于一个签名将输入类型定义为S3Event
,对于另一个签名将其定义为ScheduledEvent
是否可以接受?如果不是,开发人员是否只是在JsonConvert.DeserializeObject
块中调用try
?还是建立多个Lambda函数(每种输入类型一个)的标准惯例(y!)?
答案 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,晚上睡觉会更好。