4.6 KiB
Импортирование ресурсов в terraform позволяет привести в соответствие состояние terraform (.tfstate) к состоянию ресурса в платформе.
Необходимость такого приведения возникает в нескольких случаях:
- Ресурс был создан через портал платформы, работа продолжается через terraform провайдер,
- Ресурс был создан через terraform провайдер, однако был изменен через портал платформы,
- Ресурс был создан через terraform провайдер, однако был изменен другим пользователем через terraform провайдер,
- И так далее
Такие расхождения в состоянии ресурсов нередки, путей их решения несколько:
- Использовать импортирование ресурсов,
- Использовать общие файлы состояний ресурсов, к которым будут иметь доступ все участники, занятые в работе с платформой. В текущем разделе рассматривается первый вариант.
Импортирование ресурсов
Импортирование ресурсов позволяет совершить запрос к платформе, чтобы сформировать файл состояния.
Чтобы совершить импортирование ресурсов необходимо ввести сл. команду:
terraform import <resource-name>.<resource-variable> <resource-id>
или использовать блок
import {
to = decort_disk.disk
id = "9"
}
А замтем команду
terraform apply
Пример
Предположим, что у нас ресурс, описывающий диск:
resource "decort_disk" "disk" {
account_id = 121212
disk_name = "mySuperDisk"
size_max = 100500
}
Если запустить команду:
terraform apply
То у нас будет создан новый диск.
Но, такой диск уже есть на площадке и мы хотели бы сформировать .tfstate для этого ресурса.
Поэтому, для начала, необходимо получить список дисков:
data "decort_disk_list" "dl"{
}
output "test" {
value = data.decort_disk_list.dl
}
В полученных данных необходимо найти требуемый диск, получить его id - параметр disk_id. Пусть это будет - 777777
Теперь можно выполнить импортирование:
terraform import decort_disk.disk 777777
Команда должна успешно завершиться, появиться файл состояний, который позволит манипулировать ресурсом.
Ошибки при импортировании
При импортировании ресурса могут возникнуть подобные ошибки:
Error: <field-name>: required field is not set
или
Error: Missing required argument
Ошибка возникает в том случае, если в описании ресурса отсутствует обязательное поле. Например:
resource "decort_disk" "disk" {
account_id = 121212
size_max = 100500
}
В приведенном выше описании отсутствует поле disk_name, поэтому, при попытке импортирования возникнет ошибка.
Для ее устранения, необходимо выполнить запрос на получение списка дисков, найти недостающее поле, после чего добавить его в описание ресурса.
После этого повторить попытку импортирования.
При использовании импорта через команду
terraform import
задание всех необходимых параметров может сразу не потребоваться, однако при попытке обновления ресурса обязательные поля все равно должны быть заполнены.