terraform 0.13.5 资源在连续调用时相互覆盖

terraform 0.13.5 resources overwrite each other on consecutive calls

至于为什么会这样:

  • 在第一个 运行 期间,terraform 部署第一个资源,然后是第二个 - 这个顺序是由于 depends_on 关系(接下来的步骤不管任何 depends_on) .第二个覆盖第一个
  • 在第二次部署 Terraform 期间查看需要完成的工作:
    • 第一个丢失(被覆盖),需要创建它们
    • 第二个很好,terraform 在这次更新中忽略了它们
    • 现在只会创建第一个,它们会覆盖第二个
  • 在第三次 运行 中发生了同样的情况,但恰恰相反,秒丢失,第一个被忽略,第二个首先被覆盖
  • 随心所欲地重复,您永远不会以稳定的部署结束。

解决方案:不要在 terraform 中指定冲突的内容。 Terraform 应该是对基础设施应该是什么样子的描述——并说 “这个资源应该只有 属性 A”“这个资源应该只有 属性 B 是矛盾的,terraform 将无法优雅地处理这个问题。

你具体应该做什么:不要使用aws_iam_policy_attachment,基本上不用,看docs中的大红框。使用多个 aws_iam_role_policy_attachment 代替,它们是相加的,它们不会相互覆盖。