Get Rewarded! We will reward you with up to €50 credit on your account for every tutorial that you write and we publish!

Краткое введение: Hetzner Cloud Terraform провайдер

profile picture
Author
Lukas Kämmerling
Published
2019-03-11
Time to read
6 minutes reading time

Введение

В этом руководстве показано использование 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.

Want to contribute?

Get Rewarded: Get up to €50 in credit! Be a part of the community and contribute. Do it for the money. Do it for the bragging rights. And do it to teach others!

Report Issue
Try Hetzner Cloud

Get 20€ free credit!

Valid until: 31 December 2024 Valid for: 3 months and only for new customers
Get started
Want to contribute?

Get Rewarded: Get up to €50 credit on your account for every tutorial you write and we publish!

Find out more