You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wiki-terraform-provider-dyn.../1.3.0/05.01-Импортирование-ресурс...

86 lines
4.7 KiB

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