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

标签 amazon-web-services amazon-s3 aws-lambda aws-cloudformation

我使用 CloudFormation YAML 一段时间了,发现它非常全面 - 直到现在。我正在努力尝试使用 SAM/CloudFormation 创建一个 Lambda 函数,每当将对象添加到现有 S3 存储桶时就会触发该函数。

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

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

谢谢!

最佳答案

这是不可能的,according to the SAM team 。这是底层 CloudFormation 服务无法做到的。

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

由于“实现自定义资源”不是很具体:Here is an AWS github repo with scaffold code to help write it ,然后在模板中声明类似以下内容(其中 LambdaToBucket )是您编写的自定义函数。我发现您需要在该函数中配置两件事:一是存储桶上的存储桶通知配置(即告诉 Lambda 有关更改的信息),另一个是该函数的 Lambda 权限(即允许来自 S3 的调用)。

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

关于amazon-web-services - 如何在 CloudFormation 中添加带有 S3 触发器的 Lambda 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49979590/

相关文章:

aws-lambda - AWS自动化文档不更新Lambda别名

ruby-on-rails - 从 Faker 播种存储在 S3 中的个人资料图片

python - "Fork and Join"具有无服务器函数(例如 AWS Lambda)/Python

python - AWS 无法导入模块 'app' : no module named Pymysql

amazon-web-services - 如何将 mapreduce 操作的结果返回给 AWS API 请求

amazon-web-services - S3 存储桶策略限制对单个文件夹的访问

caching - Redis 缓存未命中行为

javascript - AWS SDK 无法将 Lambda 作为目标添加到 Cloudwatch 事件

amazon-web-services - 如何通过 IP 限制 AWS Lambda 或 API Gateway?

amazon-web-services - 如何从 AWS EMR 下载 Zeppelin Notebook