Рубрики
Uncategorized

Как переместить отдельные ресурсы по терафору

. Помечено террафом, Hashicorp, DevOps, InfraStructureasCode.

Террафору обладают невероятными встраиваемыми способностями, чтобы изменить, где хранятся его конфигурация, но иногда нет необходимости делать хирургию государственной хирургии.

В этом случае у меня есть репо с какой-то конфигурацией террафора. Позже этот репо стал модулем, а не независимым репо.

Простой путь — это Террафору уничтожить старые ресурсы и Террафом применяется новый модуль.

Тем не менее, есть ресурсы, которые я хочу сохранить (ведра S3, клавиши KMS …)

Правила жизненного цикла

Прежде чем мы продолжим, сделайте абсолютно уверены, что ресурсы, которые вы хотите переместить, не могут быть удалены случайно.

Добавьте следующее на любой ресурс для предотвращения удаления террафора.

lifecycle {
  prevent_destroy = true
}

Если вы выпустите Террафору уничтожить Хотя эти ресурсы отслеживаются, Terraform не позволит вам продолжить.

Основной план атаки является создание источника террафора прекратить отслеживание ресурса с Государство террафора RM и получить пункт назначения Terraform, чтобы начать с Импорт террафора Отказ

Откройте терминал как в источнике, так и на назначении Terraform Repos.

В этом примере мы перемещаем клавишу KMS.

resource "aws_kms_key" "foo" {
  lifecycle {
    prevent_destroy = true
  }
}

Это известно в источнике террафора как aws_kms_key.foo и место назначения как module.example-module.aws_kms_key.foo Отказ

Обратите внимание, что поскольку REPO является модулем в пункте назначения, что его имя префиксировано модуль. $ {module_name}.

Получить его состояние из источника

В источнике репо

source> terraform state show aws_kms_key.foo

id                  = aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
arn                 = arn:aws:kms:us-west-2:REDACTED:key/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
enable_key_rotation = false
is_enabled          = true
key_id              = aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
key_usage           = ENCRYPT_DECRYPT
policy              = ...

Специально то, что мы ищем, это первая строка, ID Отказ

Или для простоты, Terraporm State Show AWS_KMS_KEY.FOO | голова -n1. .

Мы могли бы рассказать террафору прекратить отслеживать его в этот момент, но давайте сделаем это после того, как импорт будет безопасным.

Импортировать его в пункт назначения

В вашем пункте назначения репо

destination> terraform import module.example-module.aws_kms_key.foo aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee

module.example-module.aws_kms_key.foo: Importing from ID "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"...
module.example-module.aws_kms_key.foo: Import complete!
  Imported aws_kms_key (ID: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee)
module.example-module.aws_kms_key.foo: Refreshing state... (ID: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee)

Import successful!

Если этот шаг дает вам какие-либо проблемы, Docs Terraform всегда приводят пример того, как импортировать что-то.

Удалить состояние из источника

Вернуться в исходный репо, RM ресурс из государства. Это сохранит его из любого будущего уничтожить Операции.

source> terraform state rm aws_kms_key.foo

1 items removed.
Item removal successful.

Вот и все. Повторите для всех ваших критических ресурсов.

В конце вы добираетесь до Террафору уничтожить Ваше старое репо и Террафом применяется ваш новый.

Оригинал: «https://dev.to/sammyers/how-to-move-individual-resources-across-terraform-backends-52ol»