我努力尝试使用SAM / CloudFormation来创建Lambda函数,只要将对象添加到现有S3存储桶中就会触发该函数 .
到目前为止,我看到的所有示例似乎都要求您在创建Lambda函数时在相同的CloudFormation脚本中创建存储桶 . 这对我不起作用,因为我们的设计目标是能够使用CloudFormation将我们的整个堆栈重新部署到不同的区域或AWS账户,并快速启动我们的应用程序 . S3存储桶名称必须全局唯一,因此如果我在CloudFormation中创建存储桶,当我尝试将其部署到不同的区域/帐户时,脚本将会中断 . 我可以通过在名称中创建具有帐户名称/区域的存储桶来解决这个问题,但从存储桶蔓延的角度来看,这是不可取的 .
那么,是否有人有解决方案在CloudFormation中创建Lambda函数,该函数由写入现有S3存储桶的对象触发?
谢谢!
1 回答
这是不可能的,according to the SAM team . 这是底层CloudFormation服务无法做到的事情 .
如果您实现了一个自定义资源,可以触发一个单独的Lambda函数来修改现有存储桶并将其链接到您要部署的Lambda函数,则可能有一种解决方法 .
由于"implement a Custom Resource"不是非常具体:Here is an AWS github repo with scaffold code to help write it,然后在模板中声明类似以下内容(其中
LambdaToBucket
)是您编写的自定义函数 . 我发现你需要在该函数中配置两个东西:一个是存储桶上的存储桶通知配置(告诉Lambda有关更改),另一个是函数的Lambda权限(说允许从S3调用) .