簡體   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