2017-07-03 78 views
2

我有一个非常简单的AWS CloudFormation模板,只是为了创造一个SQS资源,主要部分是这样的:重置SQS MessageRetentionPeriod财产没有工作

"Resources" : { 
     "Queue" : { 
     "Type" : "AWS::SQS::Queue", 
     "Properties" : { 
      "QueueName" : "QueueA" 
     } 
     } 
    } 

我这个部署(通过创建新堆栈),好吧,如official document所示,默认保留期限为4天,我检查过,它设置为4天,目前为止这么好。

然后我做了更改更改保留5分钟,这样的代码如下:

"Resources" : { 
     "Queue" : { 
     "Type" : "AWS::SQS::Queue", 
     "Properties" : { 
      "QueueName" : "QueueA", 
      "MessageRetentionPeriod": 300 
     } 
     } 
    } 

这是非常简单的,我得到这个部署(堆栈更新),和预期一致,保持设置到5分钟。

然后我想重置为默认,所以我删除了这条线:

  "MessageRetentionPeriod": 300 

我部署它(堆栈再次更新),但它没有工作,我等了1小时为DOC表示可能需要15分钟才能生效,但事实并非如此。

我的猜测是,如果我没有明确声明SQS属性的值,CloudFormation可以看到这个改变,但是它在幕后调用的API不会生效,是不是?

+0

您正在更新队列而不是创建新的队列?在这种情况下,它可能根本没有改变这个价值。如果您使用模板创建新队列,它将使用默认值。 –

+0

@JohnRotenstein我创建了它,然后所有的操作都在更新。抱歉让你困惑,我会更新说明。 – kevinjom

+0

您确定您已经从AWS CloudFormation控制台上的**更新堆栈**按钮更新了堆栈吗?因为资源属性的更改由CloudFormation读取,因此它必须将MessageRetentionPeriod更新为默认值。 –

回答

1

MessageRetentionPeriod不是required parameter这样你就不会被强制设置:

MessageRetentionPeriod

,亚马逊SQS保留了消息的秒数。您可以指定从60秒(1分钟)到1209600秒(14天)的整数值。默认值是345600秒(4天)。

要求:无

类型:整数

更新要求:无中断

然而,当CF栈更新要删除该值的显式设置,不将其重置为默认值。这是一个预期的行为。