AWS SNS 的 CFT 部署因错误而失败:具有不同属性的订阅已存在

问题描述 投票:0回答:1

我正在尝试向 SNS 主题的现有订阅添加过滤器。当我使用云形成模板部署堆栈时,它给了我错误 -

“无效参数:属性原因:具有不同属性的订阅已存在”

我能够通过删除然后使用过滤器重新创建订阅来部署它,但这似乎不是最佳方法,特别是对于生产环境。

有什么建议我可以克服这个错误吗?

早些时候我使用下面的代码在没有订阅的情况下进行部署 -

 abcSNSSubscription:
    Type: 'AWS::SNS::Subscription'
    DependsOn: abcSNSTopic
    Properties:
      Endpoint: !Ref SNSEmailSubscriptionEndpoint
      Protocol: email
      TopicArn: !Join
        - '-'
        - - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}"
          - abc-loader-alert
          - !Ref Environment
          - !Ref Region

下面是我现在使用的代码-

  abcSNSSubscription:
    Type: 'AWS::SNS::Subscription'
    DependsOn: abcSNSTopic
    Properties:
      Endpoint: !Ref SNSEmailSubscriptionEndpoint
      Protocol: email
      TopicArn: !Join
        - '-'
        - - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}"
          - abc-loader-alert
          - !Ref Environment
          - !Ref Region
      FilterPolicy:
        AlertType:
          - anything-but:
            - Success
      FilterPolicyScope: MessageAttributes

谢谢

amazon-web-services aws-cloudformation amazon-sns
1个回答
0
投票

我正在为将来可能遇到此问题的任何人回答我的帖子。

我就这个问题联系了 AWS 支持人员,他们说如果使用 cloudformation 模板进行更新,这是更改 SNS 主题的任何订阅属性的预期行为。

例如,如果您在没有过滤策略的情况下部署了 SNS 主题的订阅。但在稍后阶段,您想要为订阅添加过滤策略,但您将无法使用 cloudformation 来做到这一点,因为 AWS 不会用新属性替换订阅。我会错误提示“订阅已存在且具有不同的属性”,并且不会让您直接更新它。

如果您想更新订阅而不完全删除它然后重新部署,则需要使用 SNS API 使用新属性更新订阅。

我不确定为什么 AWS 对 SNS 订阅有这样的行为。

© www.soinside.com 2019 - 2024. All rights reserved.