Введение
В этом руководстве показано использование Terraform провайдера hcloud. Мы рассмотрим операции создания и удаления ресурсов, а также выполнение более сложных сценариев, таких как присоединение тома к серверу.
Требования
- Базовые знания о Hetzner Cloud
- Токен Hetzner Cloud API
- Terraform установлен и у вас есть базовые знания о нем
Вы можете найти общую информацию о типах серверов Hetzner Cloud, образах и томах на нашей Hetzner Docs.
Для того, чтобы создать Hetzner Cloud API Token, пожалуйста, посетите Hetzner Cloud Console по адресу https://console.hetzner.cloud, выберите проект, нажмите «Access» в меню слева, перейдите на вкладку «API TOKENS», нажмите кнопку «GENERATE API TOKEN» и следуйте инструкциям мастера создания токенов.
Шаг 1 — Базовое использование
Прежде всего, мы создаем новый каталог, который будет содержать нашу конфигурацию Terraform. Дадим каталогу имя terraform
и создадим в нем новый файл с названием hcloud.tf
. Вы можете назвать файл как угодно.
mkdir terraform
touch hcloud.tf
Теперь вы можете редактировать hcloud.tf
с помощью текстового редактора по вашему выбору.
Вы можете найти полную документацию о Terraform провайдере в документации Terraform.
Сначала мы скопируем Example Usage
из документации.
# Установите значение переменной в файле *.tfvars
# или в командной строке при помощью опции -var="hcloud_token=..."
variable "hcloud_token" {}
# Настройка провайдера Hetzner Cloud
provider "hcloud" {
token = "${var.hcloud_token}"
}
# Создание сервера
resource "hcloud_server" "web" {
# ...
}
Рассмотрим подробнее, что означают конкретные части:
# Установите значение переменной в файле *.tfvars
# или в командной строке при помощью опции -var="hcloud_token=..."
variable "hcloud_token" {}
Сообщаем Terraform, что передадим ему переменную под названием hcloud_token
. Значение этой переменной можно указать с помощью параметра командной строки или с помощью файла terraform.tfvars
. В этом руководстве мы будем использовать файл config.tfvars
. Этот файл будет содержать наш токен.
# Настройка провайдера Hetzner Cloud
provider "hcloud" {
token = "${var.hcloud_token}"
}
Мы говорим Terraform, что мы хотим использовать hcloud
провайдер. Terraform скачает последнюю версию плагина провайдера при terraform init
. Настраиваем плагин провайдера hcloud
при помощи переменной hcloud_token
.
# Создание сервера
resource "hcloud_server" "web" {
# ...
}
Этот короткий фрагмент ничего не делает. Он просто определяет ресурс из типа hcloud_server
под названием web
. Но это не сработает, потому что мы не сказали Terraform, какой сервер должен быть создан.
Так что теперь надо создать файл terraform.tfvars
, который будет содержать следующее:
hcloud_token = "YOUR_API_TOKEN"
После этого запустите terraform init
. Вы должны получить аналогичный этому
* provider.hcloud: version = "~> 1.8"
Terraform has been successfully initialized!
Поздравляем! Вы успешно установили плагин провайдера hcloud
!
Шаг 2 — Создание сервера
Теперь у вас есть общее представление о hcloud
провайдере Terraform, и теперь мы изучим его подробнее. Итак, давайте создадим сервер.
Откройте файл hcloud.tf
и перейти к секции resource "hcloud_server" "web"
. Замените его следующим фрагментом:
# Создание сервера
resource "hcloud_server" "web" {
name = "my-server"
image = "ubuntu-18.04"
server_type = "cx11"
}
Это позволит создать новый сервер с именем my-server
, на базе образа ubuntu-18.04
с типом сервера cx11
. Теперь выполнив команду terraform apply
и подтвердите сообщение, введя yes
ENTER, вы увидите новый сервер CX11 в Hetzner Cloud Console!
Вы должны получить аналогичный этому вывод:
hcloud_server.web: Creating...
backup_window: "" => "<computed>"
backups: "" => "false"
datacenter: "" => "<computed>"
image: "" => "ubuntu-18.04"
ipv4_address: "" => "<computed>"
ipv6_address: "" => "<computed>"
ipv6_network: "" => "<computed>"
keep_disk: "" => "false"
location: "" => "<computed>"
name: "" => "my-server"
server_type: "" => "cx11"
status: "" => "<computed>"
hcloud_server.web: Still creating... (10s elapsed)
hcloud_server.web: Still creating... (20s elapsed)
hcloud_server.web: Still creating... (30s elapsed)
hcloud_server.web: Creation complete after 30s (ID: 2035350)
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Круто! Вы создали свой первый Hetzner Cloud сервер с помощью Terraform! Теперь вы можете запустить terraform destroy
чтобы удалить сервер.
Вы должны получить результат, подобный этому:
hcloud_server.web: Refreshing state... (ID: 2035350)
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
- destroy
Terraform will perform the following actions:
- hcloud_server.web
Plan: 0 to add, 0 to change, 1 to destroy.
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
hcloud_server.web: Destroying... (ID: 2035350)
hcloud_server.web: Destruction complete after 0s
Destroy complete! Resources: 1 destroyed.
Шаг 3 — Создание и монтирование тома
Вы знаете, как создать ресурс. Теперь я хочу показать, как легко можно создать несколько ресурсов и объединить их. На этом шаге мы будем использовать базовый сервер CX11 и том.
Прежде всего, вы должны открыть файл hcloud.tf
с помощью текстового редактора по вашему выбору.
Вы должны увидеть что-то вроде этого:
# Установите значение переменной в файле *.tfvars
# или в командной строке при помощью опции -var="hcloud_token=..."
variable "hcloud_token" {}
# Настройка провайдера Hetzner Cloud
provider "hcloud" {
token = "${var.hcloud_token}"
}
# Создание сервера
resource "hcloud_server" "web" {
name = "my-server"
image = "ubuntu-18.04"
server_type = "cx11"
}
Теперь мы хотим добавить том в этот раздел, поэтому нам нужно добавить новый блок resource
:
# Создание тома
resource "hcloud_volume" "storage" {
name = "my-volume"
size = 50
server_id = "${hcloud_server.web.id}"
automount = true
format = "ext4"
}
Этот фрагмент создаст новый том
под названием my-volume
размером 50 ГБ
и отформатирует его в файловую систему ext4
. Том будет автоматически смонтирован на сервере. Мы также указали, что он должен быть прикреплен к серверу "${hcloud_server.web.id}"
, что соответствует идентификатору сервера my-server
.
Теперь выполнив команду terraform plan
, вы должны увидеть аналогичный ответ, как показано ниже:
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
+ hcloud_server.web
id: <computed>
backup_window: <computed>
backups: "false"
datacenter: <computed>
image: "ubuntu-18.04"
ipv4_address: <computed>
ipv6_address: <computed>
ipv6_network: <computed>
keep_disk: "false"
location: <computed>
name: "my-server"
server_type: "cx11"
status: <computed>
+ hcloud_volume.volume
id: <computed>
automount: "true"
linux_device: <computed>
location: <computed>
name: "my-volume"
server_id: "0"
size: "50"
Plan: 2 to add, 0 to change, 0 to destroy.
Теперь выполнив команду terraform apply
для применения изменений, вы должны увидеть том объемом 50 ГБ. Он подключен к серверу в вашей Hetzner Cloud Console.
Вывод
Теперь у вас есть базовый обзор Hetzner Cloud Terraform провайдера. Мы рассмотрели, как можно создавать и удалять ресурсы и как выполнять более сложные сценарии, такие как присоединение тома к серверу. Вы можете найти дополнительную помощь в официальной документации. Если вам требуется более глубокая помощь, просто создайте issue на Github.