【问题标题】:Terraform state mv destroys resourcesTerraform 状态 mv 破坏资源
【发布时间】:2020-05-15 14:49:44
【问题描述】:

我正在对几个 Terraform 文件进行重构。其中一项任务是将资源从 kebab-case 重命名为 snake_case。

为了防止上述资源的破坏和再利用,我使用了terraform state mv。现在,出于某种原因,我希望在这里理解,它仍然会破坏资源。我看到 2 个问题:

1- 再次计算 ID。

2- 对变量的引用被视为文字。

例子:

-/+ aws_volume_attachment.att_ebs_caldat_axon_apps (new resource required)
      id:                                                 "vai-4287143552" => <computed> (forces new resource)
      device_name:                                        "/dev/xvdb" => "/dev/xvdb"
      force_detach:                                       "true" => "true"
      instance_id:                                        "i-0ca294d44635d3ace" => "${module.instance_axon.instance_id}" (forces new resource)
      volume_id:                                          "vol-0298f5247bb2aa312" => "${aws_ebs_volume.ebs_caldat_axon_apps.id}" (forces new resource)

我正在使用 Terraform 0.11.14

移动该资源状态的命令是terraform state mv aws_volume_attachment.att-ebs-caldat-axon-apps aws_volume_attachment.att_ebs_caldat_axon_apps

我不知道我错过了什么。任何帮助表示赞赏。

【问题讨论】:

  • 所以根据那篇文章,我应该在考虑资源依赖关系的情况下按特定顺序完成状态移动......老实说,我认为如果我一次完成所有这些工作......现在我想我需要弄清楚如何回滚状态,因为我在远程,而且它是一个生产环境。
  • 我建议你备份你的状态文件(因为它是 prod )并尝试编辑状态
  • 我执行的每个(显然)每个状态 mv 都有一个状态文件备份。对最旧的备份进行状态推送以恢复所有已执行的移动是否安全?它需要一个 -force 标志,因为“目标状态具有更高的序列号”
  • 你能发布你的资源块代码吗?

标签: amazon-web-services terraform


【解决方案1】:

事实证明,如果您更改它们的卷或附件名称,即使您执行状态 mv,terraform 也会重新创建 EBS 资源。我不完全理解其原因,但在对其他资源(即安全组)执行相同操作时不会遇到相同的行为。

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2020-01-07
    • 2021-09-20
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    相关资源
    最近更新 更多