Terraform-provider-aws: 在计划中,redrive_policy始终标记为已修改

创建于 2017-07-18  ·  3评论  ·  资料来源: hashicorp/terraform-provider-aws

_此问题最初由@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

预期行为

由于未进行更改,因此未检测到重新驱动策略的更改。

实际行为

screen shot 2017-07-18 at 4 39 38 pm

重现步骤

请列出重现该问题所需的步骤,例如:

  1. terraform get
  2. terraform plan -var-file=<var-file>.tfvars -out=<my-update>.plan -state=<current-state-file>.tfstate
  3. terraform apply -state-out=<new-state-file>.tfstate <my-update>.plan

参考

此问题已于2016年2月在这里讨论:hashicorp / terraform#5119
似乎是因为那个人的代码中的maxReceiveCount是一个字符串,而不是数字。 然后,该错误获得了补丁(#5888)。
因此,我真的不确定为什么会发生这种情况。 作为记录,我的maxReceiveCount绝对是整数。

bug servicsqs

最有用的评论

@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

所有3条评论

@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

此页面是否有帮助?
0 / 5 - 0 等级