Устанавливаем terraform.
# вариант для windows 10 с chocolatey choco install -y terraform
Генерируем api токен в hetzner cloud.
https://console.hetzner.cloud/projects > … > Access > API TOKENS > GENERATE API TOKEN.
Копируем сгенерированный api token. Что-то типа такого:
osieghGFOIsefl7983LKjhsekjgseghhseIJHIHiuseghiusy8KJ6khfawf7awfa
Генерируем ssh ключ (если еще нет)
# генерируем ключи ssh-keygen -q -N "" # копируем публичный ключ xclip -sel clip ~/.ssh/id_rsa.pub # ssh-rsa AAAAB3N...w== user@localhost
Добавляем его в hetzner cloud.
https://console.hetzner.cloud/projects > … > Access > SSH KEYS > ADD SSH KEYКопируем fingerprint, сгенерированный после добавления ssh ключа. Что-то типа такого:
de:c7:80:23:5b:3e:28:52:1a:5d:0f:84:1b:fe:38:ec
Создаем папку для проекта
mkdir -p ~/example-terraform-hetzner && cd ~/example-terraform-hetzner
Создаем конфигурационный файл для terraform
terraform.tf
# Token variable variable "hcloud_token" {} # Ssh key fingerprint variable variable "hcloud_ssh_key_fingerprint" {} # Define Hetzner provider provider "hcloud" { token = "${var.hcloud_token}" } # Obtain ssh key data data "hcloud_ssh_key" "ssh_key" { fingerprint = "${var.hcloud_ssh_key_fingerprint}" } # Create an Ubuntu 18.04 server resource "hcloud_server" "ubuntu18" { name = "ubuntu18" image = "ubuntu-18.04" server_type = "cx11" ssh_keys = ["${data.hcloud_ssh_key.ssh_key.id}"] } # Create Debian 10 server resource "hcloud_server" "debian10" { name = "debian10" image = "debian-10" server_type = "cx11" ssh_keys = ["${data.hcloud_ssh_key.ssh_key.id}"] } # Create CentOS 8 server resource "hcloud_server" "centos8" { name = "centos8" image = "centos-8" server_type = "cx11" ssh_keys = ["${data.hcloud_ssh_key.ssh_key.id}"] } # Output server IPs output "server_ip_ubuntu18" { value = "${hcloud_server.ubuntu18.ipv4_address}" } output "server_ip_debian10" { value = "${hcloud_server.debian10.ipv4_address}" } output "server_ip_centos8" { value = "${hcloud_server.centos8.ipv4_address}" }
Создаем файл со значениями переменных
terraform.tfvars
# api token из шага 2 hcloud_token = "osieghGFOIsefl7983LKjhsekjgseghhseIJHIHiuseghiusy8KJ6khfawf7awfa" # ssh key fingerprint из шага 3 hcloud_ssh_key_fingerprint = "a6:b5:f3:6a:81:31:c9:aa:96:8a:91:92:a3:4c:c1:9b"
Запускаем последовательно
# инициализация terraform (скачает плагин для hcloud и т.п.) terraform init # смотрим и проверяем план выполнения terraform plan # применяем изменения к hcloud terraform apply
После запуска, видим ip созданных серверов. И к ним сразу можно коннектиться по ssh. Например,
ssh root@116.203.44.172
Потом можно все удалить
terraform destroy
Пример готового проекта.
https://github.com/zobzn/terraform-hetzner-cloud