簡體   English   中英

在 Cloudformation 模板中重新使用現有的 SNS 主題

[英]Re-using an existing SNS Topic in a Cloudformation template

我有一個 SAM cloudformation 模板:

Transform: AWS::Serverless-2016-10-31
Description: Create SNS with a sub

Parameters:
    NotificationEmail:
        Type: String
        Description: Email address to subscribe to SNS topic

Resources:
    NotificationTopic:
        Type: AWS::SNS::Topic
        DeletionPolicy: Retain
        Properties:
            TopicName: sam-test-sns
            Subscription:
                - Endpoint: !Ref NotificationEmail
                  Protocol: email

Outputs:
    SNSTopic:
        Value: !Ref NotificationTopic

因此,我想保留sam-test-sns主題,因為已經有多個訂閱者,並且我不希望訂閱者在我拆除服務並將其重新啟動時繁瑣地重新訂閱。

使用Retain拆除服務可以保持話題,所以這很好。 但是當我嘗試部署模板時,它會失敗,因為它已經存在。

SNS 已經存在

那么使用現有 SNS 主題的正確方法是什么?

在移除堆棧但保留主題后將“Ec2NotificationTopic”資源保留在模板中,將指示 CloudFormation 在(重新)創建堆棧時也創建主題,這將始終失敗。

由於您只是在引用現有主題,因此您應該從模板中刪除資源並將對它的引用替換為 ARN/名稱。

output 完成后,您將導出變量。 我將假設您希望將此資源放在另一個堆棧中。

首先,您需要導出值,例如

Outputs:
    SNSTopic:
        Value: !Ref NotificationTopic
    Export:
        Name: Fn::Sub: "${AWS::StackName}-SNSTopic"

向新的SNSStackName堆棧添加一個參數,您將在其中傳入 SNS 堆棧名稱(在當前區域內)。

然后從您的新堆棧中引用您需要調用 output 值,如下所示:

Fn::ImportValue:
     Fn::Sub: "${SNSStackName}-SNSTopic"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM