У меня есть собственный ресурс, определенный в моем модуле terraform:
resource "aws_alb_target_group" "whatever"
{
....
}
Оказывается, whatever
не очень хорошее имя, и мне нужно его обновить.
Классический способ сделать это — войти в каждую среду и выполнить terraform state mv
, однако у меня много сред и нет автоматизации для такого действия.
Как я могу изменить имя ресурса без ручного перемещения состояния (только путем редактирования модулей терраформирования и применения планов)?
Основываясь на объяснении в вопросе, я думаю, вам лучше всего использовать блок 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
.
Обновлено еще раз: Согласно комментариям @Martin Atkins, имя ресурса было изменено на имя ресурса переехать в вместо переходя от.
[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 сообщит об ошибке с конфигурацией точно так, как написано в настоящее время: у вас не может быть сконфигурированного ресурса по тому же адресу, что и from
блока moved
.)
Спасибо за дополнительное объяснение, соответственно обновил ответ.
почему бы просто не переименовать? он удалит старый ресурс со старым именем и заменит его тем же ресурсом с новым именем