Terraformer — Инструмент командной строки, который генерирует файлы TF/JSON и TFState на основе существующей инфраструктуры (reverse Terraform).
Установка Terraformer в Unix/Linux
Есть пару способов как можно установить данную тулзовину себе на рабоче место.
Установка Terraformer в Linux
Простой способ, выполнить:
$ export PROVIDER={all,google,aws,kubernetes}
curl -LO https://github.com/GoogleCloudPlatform/terraformer/releases/download/$(curl -s https://api.github.com/repos/GoogleCloudPlatform/terraformer/releases/latest | grep tag_name | cut -d '"' -f 4)/terraformer-${PROVIDER}-linux-amd64
chmod +x terraformer-${PROVIDER}-linux-amd64
sudo mv terraformer-${PROVIDER}-linux-amd64 /usr/local/bin/terraformer
Так же, можно собрать пакет, склонировавши репу:
$ git clone https://github.com/GoogleCloudPlatform/terraformer.git
Идем далее.
Установка Terraformer в Mac OS
Один из простых способов — это использовать HOMEBREW:
$ brew install terraformer
Еще можно выполнить:
$ export PROVIDER={all,google,aws,kubernetes}
curl -LO https://github.com/GoogleCloudPlatform/terraformer/releases/download/$(curl -s https://api.github.com/repos/GoogleCloudPlatform/terraformer/releases/latest | grep tag_name | cut -d '"' -f 4)/terraformer-${PROVIDER}-darwin-amd64
chmod +x terraformer-${PROVIDER}-darwin-amd64
sudo mv terraformer-${PROVIDER}-darwin-amd64 /usr/local/bin/terraformer
Так же, можно собрать пакет, склонировавши репу:
$ git clone https://github.com/GoogleCloudPlatform/terraformer.git
Идем далее.
Использование Terraformer в Unix/Linux
Запускаю первый пробный запуск и получаю ошибку:
$ terraformer import aws --resources=vpc,subnet --filter=vpc=default --regions=us-east-1
2021/05/31 17:59:22 aws importing region us-east-1
2021/05/31 17:59:22 open /Users/captain/.terraform.d/plugins/darwin_amd64: no such file or directory
Решением, — есть создание папок:
$ mkdir -p ~/.terraform.d/plugins/darwin_amd64
И пробую сново запустить, получаю:
$ terraformer import aws --resources=vpc,subnet --filter=vpc=default --regions=us-east-1
2021/05/31 18:01:14 aws importing region us-east-1
2021/05/31 18:01:14 fork/exec : no such file or directory
Решением есть, — скопировать бинарь от провайдера (в моем случае — это AWS), например:
$ cp -r Projects/Terraform/aws/examples/s3/.terraform/providers/registry.terraform.io/hashicorp/aws/3.42.0/darwin_amd64/terraform-provider-aws_v3.42.0_x5 ~/.terraform.d/plugins/darwin_amd64/
И запускаем еще раз:
$ terraformer import aws --resources=vpc,subnet --filter=vpc=default --regions=us-east-1
2021/05/31 18:13:30 aws importing region us-east-1
2021/05/31 18:13:33 aws importing... vpc
2021/05/31 18:13:34 aws done importing vpc
2021/05/31 18:13:34 aws importing... subnet
2021/05/31 18:13:35 aws done importing subnet
2021/05/31 18:13:35 Number of resources for service vpc: 0
2021/05/31 18:13:35 Number of resources for service subnet: 12
2021/05/31 18:13:35 Refreshing state... aws_subnet.tfer--subnet-002D-087ab3540e1a1ace4
2021/05/31 18:13:35 Refreshing state... aws_subnet.tfer--subnet-002D-049129ea82abc346a
2021/05/31 18:13:35 Refreshing state... aws_subnet.tfer--subnet-002D-06373f4c58dfe35a9
2021/05/31 18:13:35 Refreshing state... aws_subnet.tfer--subnet-002D-00db3165c99b03ee0
2021/05/31 18:13:35 Refreshing state... aws_subnet.tfer--subnet-002D-07021252bab163bcf
2021/05/31 18:13:35 Refreshing state... aws_subnet.tfer--subnet-002D-02b0ff71a1d00deb2
2021/05/31 18:13:35 Refreshing state... aws_subnet.tfer--subnet-002D-03212d250885f6986
2021/05/31 18:13:35 Refreshing state... aws_subnet.tfer--subnet-002D-04b6d772342323e4f
2021/05/31 18:13:35 Refreshing state... aws_subnet.tfer--subnet-002D-003e3e93d58873d28
2021/05/31 18:13:35 Refreshing state... aws_subnet.tfer--subnet-002D-081b69deddee10c61
2021/05/31 18:13:35 Refreshing state... aws_subnet.tfer--subnet-002D-01b817896302a1b98
2021/05/31 18:13:35 Refreshing state... aws_subnet.tfer--subnet-002D-029a45d1cf920abd6
2021/05/31 18:13:36 Filtered number of resources for service subnet: 12
2021/05/31 18:13:36 Filtered number of resources for service vpc: 0
2021/05/31 18:13:36 aws Connecting....
2021/05/31 18:13:36 aws save vpc
2021/05/31 18:13:36 aws save tfstate for vpc
2021/05/31 18:13:36 aws save subnet
2021/05/31 18:13:36 aws save tfstate for subnet
И так, я сгенерировал стек основываясь на VPC + subnets в определенном регионе. Сам statefile от Терраформа, можно найти по пути:
$ tree generated
generated
`-- aws
|-- subnet
| |-- outputs.tf
| |-- provider.tf
| |-- subnet.tf
| |-- terraform.tfstate
| `-- variables.tf
`-- vpc
|-- provider.tf
`-- terraform.tfstate
3 directories, 7 files
Так образом, можно получить всю структуру и при необходимости уменьшить трудозатраты на инвестигейт или рефакторинг существующей структуры
Помощь получить можно выполнив:
$ terraformer --help
Usage:
[command]
Available Commands:
help Help about any command
import Import current state to Terraform configuration
plan Plan to import current state to Terraform configuration
version Print the version number of Terraformer
Flags:
-h, --help help for this command
-v, --version version for this command
Use " [command] --help" for more information about a command.
Не всегда спасет. Но всегда может выручить!
Статья «Установка Terraformer в Unix/Linux» завершена.