Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何指定';原始消息传递';对于使用AWS CloudFormation的SNS订阅?_Amazon Web Services_Amazon Cloudformation_Devops - Fatal编程技术网

Amazon web services 如何指定';原始消息传递';对于使用AWS CloudFormation的SNS订阅?

Amazon web services 如何指定';原始消息传递';对于使用AWS CloudFormation的SNS订阅?,amazon-web-services,amazon-cloudformation,devops,Amazon Web Services,Amazon Cloudformation,Devops,我有一个AWS CloudFormation模板,可以创建SNS主题和订阅: "AcceptedTopic":{ "Type": "AWS::SNS::Topic", "Properties": { "DisplayName": {"Fn::Join": ["", ["Accepted-", {"Ref": "Env"}]]}, "TopicName": {"Fn::Join": ["

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

"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本身并不支持这一点。作为替代方案,您可以创建一个Lambda支持的自定义资源来绕过此限制,并改为使用
set subscription attributes
设置该属性。以下是一些有助于实现这一目标的有用资源:

  • SNS的API

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

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

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

第一:

{
    "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"
    }
}