【问题标题】:Howto specify 'Raw Message Delivery' for an SNS subscription using AWS CloudFormation?如何使用 AWS CloudFormation 为 SNS 订阅指定“原始消息传递”?
【发布时间】:2016-02-13 23:44:36
【问题描述】:

我有一个创建 SNS 主题和订阅的 AWS CloudFormation 模板:

"AcceptedTopic":{
            "Type": "AWS::SNS::Topic",
            "Properties": {
                "DisplayName": {"Fn::Join": ["", ["Accepted-", {"Ref": "Env"}]]},
                "TopicName": {"Fn::Join": ["", ["Accepted-", {"Ref": "Env"}]]},
                "Subscription": [{
                    "Endpoint": {"Fn::GetAtt" : [ "SomeQueue" , "Arn" ]},
                    "Protocol": "sqs"
                }]
            }
        }

我需要指定“原始消息传递”订阅属性。我如何在 AWS CloudFormation 中做到这一点?

【问题讨论】:

标签: amazon-web-services amazon-cloudformation devops


【解决方案1】:

现在 AWS CloudFormation 通过AWS::SNS::Subscription 支持它。因此,不要将订阅添加为主题的属性,而是添加上面链接的订阅资源。

但需要注意的是,如果您已经使用该订阅创建了一个主题并且现在正在尝试添加该属性,那么它会因无效参数错误而惨遭失败。 原因是它正在考虑将模板中添加的独立订阅作为新资源并尝试创建它。除了手动删除该订阅之外,我还没有找到解决此问题的好方法,这在生产环境中不是很好的做法。

我的解决方案是将其分为两个步骤。首先,从主题中移除属性订阅并添加订阅资源。然后,为订阅资源添加新属性。

第一:

{
    "AcceptedTopic": {
        "Type": "AWS::SNS::Topic",
        "Properties": {
            "DisplayName": {
                "Fn::Join": ["", ["Accepted-", {"Ref": "Env"}]]
            },
            "TopicName": {
                "Fn::Join": ["", ["Accepted-", {"Ref": "Env"}]]
            }
        }
    }
    "AcceptedTopicSubscription": {
        "TopicArn": { "Ref": "AcceptedTopic" },
        "Endpoint": {
            "Fn::GetAtt": ["SomeQueue", "Arn"]
        },
        "Protocol": "Sqs"
    }
}

然后:

{
    ...
    "AcceptedTopicSubscription": {
        "TopicArn": { "Ref": "AcceptedTopic" },
        "Endpoint": {
            "Fn::GetAtt": ["SomeQueue", "Arn"]
        },
        "Protocol": "Sqs",
        "RawMessageDelivery": "true"
    }
}

【讨论】:

    【解决方案2】:

    在撰写本文时,AWS CloudFormation 本身并不支持该功能。作为替代方案,您可以创建一个 Lambda 支持的自定义资源来绕过此限制,并改为使用 set-subscription-attributes 设置该属性。以下是一些有助于实现这一目标的有用资源:

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 2015-12-29
      • 1970-01-01
      • 2016-05-29
      • 2017-06-21
      • 2015-05-29
      相关资源
      最近更新 更多