为什么terraform认为我改变了许多来自&引用;无效?

为什么terraform认为我改变了许多来自&引用;无效?,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我刚刚执行了terraformplan,它报告了许多虚假的变化。它报告说它需要重新创建大量资源,因为一些“(空字符串)属性不是null 例如,它认为我改变了这条路线 route = [ - { - cidr_block = "0.0.0.0/0" - egress_only_gateway_id = "" - gateway_i

我刚刚执行了
terraformplan
,它报告了许多虚假的变化。它报告说它需要重新创建大量资源,因为一些
(空字符串)属性不是
null

例如,它认为我改变了这条路线

route            = [
      - {
          - cidr_block                = "0.0.0.0/0"
          - egress_only_gateway_id    = ""
          - gateway_id                = "igw-xxxx"
          - instance_id               = ""
          - ipv6_cidr_block           = ""
          - nat_gateway_id            = ""
          - network_interface_id      = ""
          - transit_gateway_id        = ""
          - vpc_peering_connection_id = ""
        },
      + {
          + cidr_block                = "0.0.0.0/0"
          + egress_only_gateway_id    = null
          + gateway_id                = "igw-xxxx"
          + instance_id               = null
          + ipv6_cidr_block           = null
          + nat_gateway_id            = null
          + network_interface_id      = null
          + transit_gateway_id        = null
          + vpc_peering_connection_id = null
        },
据我所知,没有实际的变化(在地形配置中),所以我怀疑 存储状态和terraform计算“所需”状态的方式之间一定存在一些差异


这是什么原因造成的?这是terraform 0.13.1和0.13.5之间的变化吗?

我遇到了同样的问题。这一答复明确了解决办法:

我不确定这个bug是什么时候或者如何在AWS提供商中引入的,但它是在从0.11.14升级到0.12.28之后突然出现的

如果显式定义所有这些空值,Terraform将不再将其视为更改

   route {
-    cidr_block = "0.0.0.0/0"
-    gateway_id = "igw-ID"
+    cidr_block                = "0.0.0.0/0"
+    gateway_id                = "igw-ID"
+    egress_only_gateway_id    = ""
+    instance_id               = ""
+    ipv6_cidr_block           = ""
+    nat_gateway_id            = ""
+    network_interface_id      = ""
+    transit_gateway_id        = ""
+    vpc_peering_connection_id = ""
将我的计划从销毁和重新创建所有路由更改为仅添加新路由(匿名值):


与其说是地形升级,不如说是
terraformprovider aws
升级导致了这种情况。虽然我自己并没有看过。你们能分享更多的计划来提供背景吗?现在很难看出这是否只是因为其他因素在改变,它只是显示出比你可能习惯的更大的差异。我重新编写了这个,并且可以验证它是在我将一些TF从0.11.14升级到0.12.28时引入的。我只在更改同一表中的另一个路由(使用内联路由)时才看到该错误。您可以通过显式定义空字段来解决此问题。我将在下面的回答中补充这一点。
  # aws_route_table.main-vpc-ID will be updated in-place
  ~ resource "aws_route_table" "main-vpc-ID" {
        id               = "rtb-ID"
        owner_id         = "accountid"
        propagating_vgws = []
      ~ route            = [
            {
                cidr_block                = "0.0.0.0/0"
                egress_only_gateway_id    = ""
                gateway_id                = "igw-ID"
                instance_id               = ""
                ipv6_cidr_block           = ""
                nat_gateway_id            = ""
                network_interface_id      = ""
                transit_gateway_id        = ""
                vpc_peering_connection_id = ""
            },
          + {
              + cidr_block                = "10.100.2.0/24"