【问题标题】:How to move terraform resource in terraform apply如何在 terraform apply 中移动 terraform 资源
【发布时间】:2022-11-08 22:56:00
【问题描述】:

我在我的 terraform 模块中定义了自定义资源:

resource "aws_alb_target_group" "whatever" 
{
   ....
}

原来whatever 不是个好名字,我需要更新它。

经典的做法是登录到每个环境并执行terraform state mv,但是我有很多环境,并且没有自动执行此类操作。

如何在不手动移动状态的情况下更改资源名称(仅通过编辑 terraform 模块和应用计划)?

【问题讨论】:

  • 为什么不重命名呢?它将删除具有旧名称的旧资源并用具有新名称的相同资源替换它

标签: amazon-web-services terraform


【解决方案1】:

根据问题中的解释,我想您最好的选择是使用 moved 块 [1]。因此,例如,在您的情况下,这将是:

resource "aws_alb_target_group" "a_much_better_whatever" 
{
   ....
}

moved {
  from = aws_alb_target_group.whatever
  to   = aws_alb_target_group.a_much_better_whatever
}

编辑:正如@Matt Schuchard 所指出的,moved 块仅适用于 Terraform 版本>=1.1.0

编辑 2:根据@Martin Atkins 的 cmets,将资源名称更改为资源名称搬到代替从移动.


[1]https://www.terraform.io/language/modules/develop/refactoring#moved-block-syntax

【讨论】:

  • 肯定是最好的前进道路,但您可能应该添加警告,这是针对 TF >= 1.1.0。
  • 我同意,我在考虑这个,我会更新答案。谢谢马特。
  • 一个小提示:在moved 的实际使用中,resource 块的命名应该匹配to 参数而不是from 参数,所以这将是resource "aws_alb_target_group" "a_much_better_whatever" 以获得所需的效果。
  • (这没什么大不了的,因为 Terraform 会报告与当前编写的配置完全相同的错误:您不能在与 moved 块的 from 相同的地址拥有配置的资源。)
  • 感谢您的额外解释,相应地更新了答案。
【解决方案2】:

我也有同样的情况。

我的计划是在 Terraform 中创建新的资源组,应用它,将 Azure 门户中的资源移动到新的资源组中,然后执行 terraform state mv 以移动 terraform 中的资源。 是的,如果你有很多资源,那很无聊..但我想我不会这样刹车。

【讨论】:

    猜你喜欢
    • 2020-05-02
    • 2021-08-28
    • 2021-11-16
    • 2020-07-08
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多