amazon-web-services - 如何使用 AWS CloudFormation 为 SNS 订阅指定 'Raw Message Delivery'?

标签 amazon-web-services aws-cloudformation devops

我有一个用于创建 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中做到这一点?

最佳答案

现在 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"
    }
}

关于amazon-web-services - 如何使用 AWS CloudFormation 为 SNS 订阅指定 'Raw Message Delivery'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33675033/

相关文章:

hadoop - 使用java.lang.NoClassDefFoundError在AWS EMR上运行的Pig UDF:org/apache/pig/LoadFunc

amazon-web-services - VPC中普通RDS实例的只读副本

amazon-web-services - 适用于具有多个谓词条件的 Glue 的 AWS CloudFormation 模板

tfs - Azure DevOps (VSTS/TFS) 迭代容量选项卡下的新字段

c# - 如何关闭 `AmazonS3`对象中的自动代理检测?

amazon-web-services - AWS Sagemaker - 客户端错误 : An error occurred (ValidationException) when calling the CreateTransformJob operation

amazon-web-services - AWS CloudFormation 用户数据

amazon-web-services - 引用 `AWS::CodeDeploy::DeploymentGroup::LoadBalancerInfo?`的正确方法是什么

linux - 无法上传我的 Recipe

php - 将 Xdebug 从 php-fpm 和 nginx 容器中分离出来