_此问题最初由@kfrn以hashicorp / terraform#15579开头。 由于提供者的分裂,它被迁移到了这里。 问题的原始内容如下。
每次我运行terraform plan
,即使实际上没有任何更改,我的SQS队列的重新驱动策略也会显示为已修改。
我正在使用一个模块来创建我的SQS队列。
resource "aws_sqs_queue" "sqs_queue" {
name = "${var.environment}_${var.name}"
message_retention_seconds = "${var.sqs_queue["message_retention_seconds"]}"
visibility_timeout_seconds = "${var.sqs_queue["visibility_timeout_seconds"]}"
redrive_policy = <<-JSON
{
"deadLetterTargetArn": "${aws_sqs_queue.sqs_dead_queue.arn}",
"maxReceiveCount": "${var.sqs_queue["max_receive_count"]}"
}
JSON
}
resource "aws_sqs_queue" "sqs_dead_queue" {
name = "${var.environment}_${var.name}_dead"
message_retention_seconds = "${var.sqs_dead_queue["message_retention_seconds"]}"
visibility_timeout_seconds = "${var.sqs_dead_queue["visibility_timeout_seconds"]}"
}
maxReceiveCount
在模块变量中设置:
variable "sqs_queue" {
type = "map"
default = {
message_retention_seconds = 1209600
visibility_timeout_seconds = 30
max_receive_count = 10
}
}
Terraform v0.9.8
由于未进行更改,因此未检测到重新驱动策略的更改。
请列出重现该问题所需的步骤,例如:
terraform get
terraform plan -var-file=<var-file>.tfvars -out=<my-update>.plan -state=<current-state-file>.tfstate
terraform apply -state-out=<new-state-file>.tfstate <my-update>.plan
此问题已于2016年2月在这里讨论:hashicorp / terraform#5119
似乎是因为那个人的代码中的maxReceiveCount
是一个字符串,而不是数字。 然后,该错误获得了补丁(#5888)。
因此,我真的不确定为什么会发生这种情况。 作为记录,我的maxReceiveCount
绝对是整数。
@kfrn您是否在这里解决了问题?
在上面的配置中,您有"${var.sqs_queue["max_receive_count"]}"
。 JSON heredoc中的引号是多余的,在这种情况下,Terraform的配置不需要使用引号来获取变量插值,因此您的JSON如下所示:
redrive_policy = <<-JSON
{
"deadLetterTargetArn": "${aws_sqs_queue.sqs_dead_queue.arn}",
"maxReceiveCount": ${var.sqs_queue["max_receive_count"]}
}
JSON
由于缺乏回应而关闭,并提出了上述解决方案。
只是对此的后续行动。
我遇到了同样的问题,并删除了${var.sqs_queue["max_receive_count"]
上的多余引号,从而解决了该问题
谢谢@bflad
最有用的评论
@kfrn您是否在这里解决了问题?
在上面的配置中,您有
"${var.sqs_queue["max_receive_count"]}"
。 JSON heredoc中的引号是多余的,在这种情况下,Terraform的配置不需要使用引号来获取变量插值,因此您的JSON如下所示: