首页 文章

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

提问于
浏览
0

我努力尝试使用SAM / CloudFormation来创建Lambda函数,只要将对象添加到现有S3存储桶中就会触发该函数 .

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

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

谢谢!

1 回答

  • 0

    这是不可能的,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调用) .

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

相关问题