Как переместить ресурс terraform в terraform apply

У меня есть собственный ресурс, определенный в моем модуле terraform:

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

Оказывается, whatever не очень хорошее имя, и мне нужно его обновить.

Классический способ сделать это — войти в каждую среду и выполнить terraform state mv, однако у меня много сред и нет автоматизации для такого действия.

Как я могу изменить имя ресурса без ручного перемещения состояния (только путем редактирования модулей терраформирования и применения планов)?

почему бы просто не переименовать? он удалит старый ресурс со старым именем и заменит его тем же ресурсом с новым именем

Stack Overflow 06.04.2022 15:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.

Обновлено еще раз: Согласно комментариям @Martin Atkins, имя ресурса было изменено на имя ресурса переехать в вместо переходя от.


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

Конечно, это лучший путь вперед, но вам, вероятно, следует добавить предостережение, что это для TF> = 1.1.0.

Matt Schuchard 06.04.2022 17:11

Я согласен, я думал об этом, я обновлю ответ. Спасибо, Мэтт.

Marko E 06.04.2022 17:45

Небольшое примечание: при реальном использовании moved блок resource должен быть назван в соответствии с аргументом to, а не с аргументом from, так что это будет resource "aws_alb_target_group" "a_much_better_whatever" для получения желаемого эффекта.

Martin Atkins 06.04.2022 19:01

(Не имеет большого значения, поскольку Terraform сообщит об ошибке с конфигурацией точно так, как написано в настоящее время: у вас не может быть сконфигурированного ресурса по тому же адресу, что и from блока moved.)

Martin Atkins 06.04.2022 19:01

Спасибо за дополнительное объяснение, соответственно обновил ответ.

Marko E 07.04.2022 10:08

Другие вопросы по теме