如何为S3触发的AWS Lambda函数指定其他参数

时间:2017-06-24 19:43:02

标签: amazon-web-services events amazon-s3 aws-lambda

我正在为S3存储桶上的每个PUT创建一个AWS Lambda函数。一个单独的Java应用程序创建S3存储桶,在Put上设置Lambda的触发器,并将一组文件PUT放入存储桶。 Lambda函数执行已编译的二进制文件,它将二进制文件传递给二进制文件,该脚本作用于新的S3对象。

所有这一切都很好。

我的问题是我有一组接近100个不同的脚本,并且我经常开发新的脚本。 Lambda的ZIP包含所有脚本。脚本对应于不同类型的文件,因此当我运行Java应用程序时,我想在Lambda函数中指定要使用的WHICH脚本。我试图避免为每个脚本创建一个新的Lambda,因为每个脚本都有效地执行完全相同的操作但是脚本的名称。

当您发送一个Lambda时,您可以将参数放入上下文中。但是我的Lambda被触发了,所以我做出的大部分反应都是在事件中。在设置S3存储桶和事件触发器时,我无法弄清楚如何有效地将这个简单参数传递给Lambda。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您无法为Lambda函数添加S3后额外参数。您可以做的是创建一个DynamoDB表,将S3存储桶映射到脚本,或将S3前缀映射到脚本,或者某种类型。然后,您的Lambda函数可以在执行脚本之前查找该映射。

答案 1 :(得分:1)

无法指定传递给AWS Lambda函数的参数。该功能由Amazon S3触发,它传递标准信息(存储桶,密钥)。

但是,在Amazon S3中创建对象时,您可以附加对象元数据。然后,Lambda函数可以在通知事件后检索元数据。

另一种方法是订阅几个Lambda函数到S3存储桶。这些函数可以查看事件并决定是否处理事件。

例如,如果您存储了图片和文本文件,则可以为图片创建一个Lambda函数,为文本文件创建另一个Lambda函数。在创建对象时将触发这两个函数。每个函数都会查看文件扩展名(或者,如果需要,可以查看对象本身)。如果它是一个句柄的文件类型,那么它可以处理该对象。如果它处理的文件类型,则该函数可以简单地退出。这种类型的检查可以非常快速地执行,而Lambda每100毫秒只收费,因此成本几乎无关紧要。

这种方法的好处是你可以让你的库彼此分开,而不是制作一个大的Lambda包。