amazon-web-services - SNS 中的订阅已存在,并且需要使用 1 个使用 cloudformation 的订阅

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

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

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

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

有人可以帮我输入此信息吗?

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

最佳答案

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

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

关于amazon-web-services - SNS 中的订阅已存在,并且需要使用 1 个使用 cloudformation 的订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68269204/

相关文章:

ios - Firebase 事件监听器不起作用,我无法收到正确的快照

amazon-web-services - 是否可以在新的 CFT 中使用现有的 ELB,而无需由现有的 CF 堆栈导出 ELB?

python - 为什么我的 AWS SQS 消息没有被删除?

amazon-web-services - AWS CLI 假设角色后跟其他命令

android - Uri 默认声音通知?

amazon-web-services - 使用 CloudFormation 将 LambdaFunctionAssociation 添加到现有 CloudFront 分配

aws-cloudformation - AWS Cloudformation - 多行参数

amazon-web-services - 在Lambda函数中获取Cognito用户池身份

ios - 从 iOS 成功登录 Amazon Cognito 后如何获取 AccessToken 和 IdToken

android - java.lang.SecurityException : Requires VIBRATE permission on Jelly Bean 4. 2