Я новичок в Terraform и пытаюсь разобраться в этом. У нас есть облачная среда, созданная в рамках разработки и тестирования. В процессе команда создала множество нежелательных ресурсов. В конце концов был создан код Terraform, а также файл состояния. Каким-то образом кто-то (или многие) добавлял и удалял/уничтожал ресурсы по своей прихоти. В результате у нас теперь есть некоторые ресурсы, которые не являются частью файла состояния.
Сейчас мы пытаемся оптимизировать процесс и очистить код, когда поняли, что существующие критические ресурсы будут либо изменены, либо уничтожены. Нам это не подойдет.
Пример:
Синапс: он был создан вручную и имеет для нас решающее значение. Однако файл состояния его не распознает (что, я думаю, нормально). Я создал synapse.tf со всеми необходимыми ресурсами и выполнил план Terraform, в котором выяснилось, что будет создана новая учетная запись Synapse и ее зависимые объекты. Мы этого не хотим.
Module.network.azurerm_network_security_rule.appgw-subnet-nsg-block-bad-ips будет уничтожен (поскольку azurerm_network_security_rule.appgw-subnet-nsg-block-bad-ips не указан в конфигурации) Этого не следует делать, поскольку это повлияет на сетевые правила.
Есть много других подобных вопросов, которые я пытаюсь решить.
Каковы мои варианты и какой подход будет хорошим для очистки файла состояния?? Любые предложения и материалы будут полезны.
Вы пробовали использовать terraform import
?
$ terraform import azurerm_synapse_workspace.<name of Synapse Workspace> <the resource id of your Synapse workspace>
Предполагается, что, когда вы говорите «Synapse», вы имеете в виду рабочую область Synapse.
Сначала напишите файл .tf, описывающий существующий ресурс (похоже, что вы уже это сделали).
Затем выполните следующую команду (заменив фиктивные значения правильными).
$ terraform import azurerm_synapse_workspace.example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.Synapse/workspaces/workspace1
Первое и самое очевидное, что нужно сделать, — убедиться, что все ресурсы, которыми должен управлять Terraform, определены в файлах конфигурации (main.tf
и других).
Другие вещи, которые могут быть полезны:
Если в файле состояния присутствуют один или несколько ресурсов, которые НЕ должны управляться Terraform, но НЕ должны быть удалены, вы можете удалить их из файла состояния с помощью команды terraform state rm.
Если один или несколько ресурсов, которыми должен управлять Terraform, были созданы вручную, вы можете импортировать эти ресурсы в файл состояния с помощью команды terraform import.
Если вы внесли какие-либо изменения в конфигурацию, например изменили имена ресурсов, переместили ресурсы в/из модулей и т. д., вы можете перемещать ресурсы, манипулируя состоянием (используя terraform state mv ) или используя перемещенный блок конфигурации.
Более подробную информацию можно найти в Учебном пособии - Сертификация Terraform Associate, которое находится в свободном доступе на сайте Hashicorp.
Какой бардак, я тебе совсем не завидую. Один совет: манипулирование файлом состояния может быть болезненным (как вы, вероятно, уже поняли), поэтому с этого момента я предлагаю вам и другим членам вашей команды делать все с Terraform с самого начала. Не создавайте ресурсы вручную, если, например, вы не выполняете PoC или что-то в этом роде и не знаете, что эти ресурсы будут удалены, как только они станут не нужны.