繁体   English   中英

如何在CloudFormation中添加带有S3触发器的Lambda函数?

[英]How do I add a Lambda Function with an S3 Trigger in CloudFormation?

到目前为止,我一直在使用CloudFormation YAML,并且发现它是全面的。 我在尝试使用SAM / CloudFormation创建Lambda函数时遇到了麻烦,每当将对象添加到现有 S3存储桶时都会触发该Lambda函数。

到目前为止,我所看到的所有示例似乎都要求您在创建Lambda函数时,在同一CloudFormation脚本中创建存储桶。 这对我而言不起作用,因为我们的设计目标是能够使用CloudFormation将整个堆栈重新部署到不同的区域或AWS账户,并快速维护我们的应用程序。 S3存储桶名称必须是全局唯一的,因此,如果我在CloudFormation中创建存储桶,则当我尝试将其部署到其他区域/帐户时,脚本将中断。 我可以通过创建名称名称为帐户名称/区域的存储桶来解决此问题,但是从存储桶蔓延的角度来看,这并不理想。

那么,有没有人有在CloudFormation中创建Lambda函数的解决方案,该解决方案是由将对象写入现有 S3存储桶触发的?

谢谢!

据SAM团队说 ,这是不可能的。 这是基础CloudFormation服务无法做到的。

如果实现自定义资源,则可能有一种解决方法,该资源将触发一个单独的Lambda函数来修改现有存储区并将其链接到您要部署的Lambda函数。

因为“实现自定义资源”不是很具体: 这是一个带脚手架代码的AWS github存储库,可以帮助编写该代码 ,然后在模板中声明如下内容(其中LambdaToBucket是您编写的自定义函数)。 我发现您需要在该函数中配置两件事:一是存储桶上的存储桶通知配置(说告诉Lambda有关更改),另一是该函数的Lambda许可(说来自S3的允许调用)。

    Resources:
      JoinLambdaToBucket:
      Type: Custom::JoinLambdaToExistingBucket
      Properties:
        ServiceToken: !GetAtt LambdaToBucket.Arn

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM