如何在 terraform apply 中移动 terraform 资源

Sha*_*dow 1 amazon-web-services terraform terraform-provider-aws

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

resource "aws_alb_target_group" "whatever" 
{
   ....
}
Run Code Online (Sandbox Code Playgroud)

事实证明whatever这个名字不好,我需要更新它。

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

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

Mar*_*o E 5

根据问题中的解释,我猜你最好的选择是使用块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
}
Run Code Online (Sandbox Code Playgroud)

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

编辑2:根据@Martin Atkins的评论,将资源名称更改为移动到而不是从移动的资源的名称。


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