【问题标题】:Subscription in SNS is present and need to use 1 subscription using cloudformationSNS 中的订阅存在,需要使用 cloudformation 使用 1 个订阅
【发布时间】:2021-07-06 10:51:23
【问题描述】:

我有一个 cloudformation.yaml 文件,并且我使用以下脚本添加了多个订阅。 如果我提供所有 3 个邮件 ID,它按预期工作,如果我只添加 1 或 2 个邮件 ID,则堆栈创建失败。我有两个问题如下:

  1. 即使我只提供 1 个电子邮件 ID,如何让我的模板正常工作?

  2. 由于我只实现了电子邮件通知,我需要在创建堆栈时从 UI 中删除“订阅协议”参数,并将电子邮件设置为默认参数。

有人可以帮我输入这个吗?

AWSTemplateFormatVersion: '2010-09-09'
Description: Creates SNS topic, SNS subscription and Cloudwatch rule for Codebuild Notification
Parameters:
  EmailID1:
    Type: String
    Description: Enter Email ID to receive notifications.
  EmailID2:
    Type: String
    Description: Enter Email ID to receive notifications.   
  EmailID3:
    Type: String
    Description: Enter Email ID to receive notifications.
  SubscriptionProtocol:
    Type: String
    Description: The subscription protocol to send notification (Ex: email)
    AllowedValues:
    - email
    Default: email
Mappings: {}
Conditions: {}
Resources:
  SNSTopicCodebuildFailNotify:
    Type: AWS::SNS::Topic
    Properties: {}
  SNSSubscription1:
    Type: AWS::SNS::Subscription
    Properties:
      Protocol:
        Ref: SubscriptionProtocol
      Endpoint:
        Ref: EmailID1      
      TopicArn:
        Ref: SNSTopicCodebuildFailNotify
  SNSSubscription2:
    Type: AWS::SNS::Subscription
    Properties:
      Protocol:
        Ref: SubscriptionProtocol
      Endpoint:
        Ref: EmailID2      
      TopicArn:
        Ref: SNSTopicCodebuildFailNotify      
  SNSSubscription3:
    Type: AWS::SNS::Subscription
    Properties:
      Protocol:
        Ref: SubscriptionProtocol
      Endpoint:
        Ref: EmailID3     
      TopicArn:
        Ref: SNSTopicCodebuildFailNotify

【问题讨论】:

    标签: amazon-web-services notifications amazon-cloudformation subscription


    【解决方案1】:

    您可以为每封电子邮件设置Conditions 并有条件地创建您的订阅:

    AWSTemplateFormatVersion: '2010-09-09'
    Description: Creates SNS topic, SNS subscription and Cloudwatch rule for Codebuild Notification
    Parameters:
      EmailID1:
        Type: String
        Default: ""
        Description: Enter Email ID to receive notifications.
      EmailID2:
        Type: String
        Default: ""
        Description: Enter Email ID to receive notifications.
      EmailID3:
        Type: String
        Default: ""
        Description: Enter Email ID to receive notifications.
    
    Conditions:
    
        HasEmail1:
            !Not [!Equals [!Ref EmailID1, ""]]
    
        HasEmail2:
            !Not [!Equals [!Ref EmailID2, ""]]
    
        HasEmail3:
            !Not [!Equals [!Ref EmailID3, ""]]
    
    Resources:
    
      SNSTopicCodebuildFailNotify:
        Type: AWS::SNS::Topic
        Properties: {}
    
      SNSSubscription1:
        Type: AWS::SNS::Subscription
        Condition: HasEmail1
        Properties:
          Protocol: email
          Endpoint:
            Ref: EmailID1
          TopicArn:
            Ref: SNSTopicCodebuildFailNotify
    
      SNSSubscription2:
        Type: AWS::SNS::Subscription
        Condition: HasEmail2
        Properties:
          Protocol: email
          Endpoint:
            Ref: EmailID2
          TopicArn:
            Ref: SNSTopicCodebuildFailNotify
    
      SNSSubscription3:
        Type: AWS::SNS::Subscription
        Condition: HasEmail3
        Properties:
          Protocol: email
          Endpoint:
            Ref: EmailID3
          TopicArn:
            Ref: SNSTopicCodebuildFailNotify
    

    【讨论】:

    • 谢谢 Marcin,除了一件事,一切都很好。如果我没有为订阅提供任何邮件 ID,那么堆栈创建也是成功的。我想将 1 个邮件 ID 作为强制性邮件 ID。您能否确认一下如何做到这一点?
    • @Kivi 您可以删除一个默认值和一个相应的条件。如果它有效,接受答案将不胜感激。
    猜你喜欢
    • 2015-12-29
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    相关资源
    最近更新 更多