Terraform позволяет управлять облачной инфраструктурой Рег.облака как кодом. Вместо того чтобы работать с ресурсами через панель управления, вы описываете желаемую инфраструктуру в конфигурационных файлах. Эти файлы используют HCL (HashiCorp Configuration Language) — простой язык, который по структуре похож на JSON или YAML. Terraform анализирует файлы и выполняет нужные действия (создает, обновляет или удаляет ресурсы), чтобы привести инфраструктуру к тому виду, который вы описали.
Terraform делает инфраструктуру прозрачной, повторяемой и контролируемой. Конфигурации можно хранить в репозитории, версионировать и использовать повторно, например, для развертывания одинаковой инфраструктуры в различных средах. Кроме того, вы всегда точно сможете узнать, что и где развернуто. Terraform работает по одному и тому же принципу на разных платформах, но у каждого облака есть свой провайдер. Описания ресурсов у разных провайдеров могут отличаться, но подходы и инструменты будут одинаковыми независимо от того, на какой платформе строите решения. Это снижает риск ошибок, ускоряет развертывание и делает инфраструктуру предсказуемой.
Какими ресурсами можно управлять с помощью Terraform в Рег.облаке
На данный момент в Рег.облаке с помощью Terraform можно управлять:
- облачными серверами,
- облачными серверами с GPU,
- снэпшотами,
- SSH-ключами.
Подготовка к работе с Terraform
-
1
Если у вас еще нет аккаунта в Рег.облаке, зарегистрируйтесь. Если у вас есть аккаунт, войдите в панель управления.
-
2
Убедитесь, что на балансе облачного счета достаточно средств для создания инфраструктуры. Если средств недостаточно, пополните баланс: Как пополнить баланс облачных серверов.
Установка Terraform
Из бинарного файла
Обратите внимание
Официальный сайт Terraform может быть недоступен на территории РФ.
Скачайте дистрибутив Terraform и установите его по инструкции.
Через менеджер пакетов
-
1
-
2
Введите команду:
sudo snap install terraform --classic
-
1
Установка будет производиться через менеджер пакетов
Homebrew. Если у вас нетHomebrew, установите его. -
2
Введите команду:
brew install terraform
-
1
Установка будет производиться через менеджер пакетов
chocolatey. Если у вас нетchocolatey, установите его. -
2
Введите команду:
choco install terraform
Аутентификация в Terraform
В Terraform все операции выполняются от имени вашего аккаунта. Для аутентификации в Terraform используется токен для API. Получить или изменить токен вы можете в панели управления в разделе Настройки.
Чтобы настроить аутентификацию:
-
1
Создайте директорию, в которой будут храниться конфигурационные файлы Terraform. Имя директории может быть любым, например,
cloud-terraform. -
2
Создайте файл с описанием переменных, например,
variables.tf. -
3
Добавьте в файл следующие блоки:
variable "token" { type = string description = "API token" sensitive = true } variable "api_url" { type = string description = "API URL" } -
4
Создайте файл со значениями переменных, например
terraform.tfvars. -
5
Добавьте в файл следующие значения:
token = “your-token”Где your-token — ваш токен для API, который находится в панели управления в разделе Настройки.
Вместо того чтобы создавать файл с переменными, вы можете задать токен через переменную окружения TF_VAR_token:
Linux/MacOS
export TF_VAR_token=“your-token”
Windows
$env:TF_VAR_token=“your-token”
Настройка провайдера
В Terraform провайдер — это плагин, который обеспечивает взаимодействие Terraform с внешними сервисами через их API. Он отвечает за создание, изменение и удаление ресурсов конкретного сервиса. Без провайдера Terraform не сможет управлять инфраструктурой.
Чтобы настроить провайдера:
-
1
Перейдите в директорию с конфигурационными файлами (
cloud-terraform). -
2
Создайте файл с расширением
.tf, напримерmain.tf.Файлы
*.tf— это текстовые файлы с описанием инфраструктуры и конфигурации Terraform. В проекте может быть несколько таких файлов. При запускеplanилиapplyTerraform автоматически объединяет их в единую конфигурацию, как если бы они были одним большим файлом. -
3
В файл
main.tfдобавьте блоки с указанием ссылки на провайдер Рег.облака:terraform { required_providers { regcloud = { source = "tf.reg.cloud/regru/regcloud" } } } provider "regcloud" { token = var.token api_url = var.api_url } -
4
Выполните команду в текущей директории с вашими .tf-файлами, чтобы инициализировать Terraform:
terraform initЕсли вы хотите обновить провайдер до последней версии, в текущей директории с вашими .tf-файлами выполните:
terraform init -upgrade
Подготовка плана инфраструктуры
В примере ниже мы добавим в файл main.tf конфигурацию, с помощью которой будут созданы следующие ресурсы:
- SSH-ключ;
- облачный сервер с 1 ядром vCPU, 1 ГБ RAM, 10 ГБ диска, тарифом «Производительный», ОС Ubuntu 24.04 LTS и образом Docker в регионе Mосква-1;
- снэпшот облачного сервера.
-
1
Для загрузки SSH-ключа добавьте в
main.tfследующий код:resource "regcloud_ssh_key" "test" { name = "example_key" public_key = file("./assets/id_rsa_example.pub") } output "ssh_key_fingerprint" { value = regcloud_ssh_key.test.fingerprint } output "ssh_key_name" { value = regcloud_ssh_key.test.name }В Terraform
resource— это описание любого создаваемого или управляемого объекта инфраструктуры (например, сервера, SSH-ключа или снэпшота).outputиспользуется для вывода нужных данных после создания ресурсов.Terraform загрузит публичный ключ из файла
./assets/id_rsa_example.pubи добавит его в облако как новый SSH-ключ с именемexample_key.Если вы еще не создавали SSH-ключ на своем компьютере, сгенерируйте его по инструкции: Как создать SSH-ключ. Затем вместо
./assets/id_rsa_example.pubукажите ваш файл с публичным ключом. -
2
Для создания облачного сервера с загруженным выше ключом добавьте в
main.tfкод:resource "regcloud_server" "example_server" { name = "example_server_001" size = "c1-m1-d10-hp" image = "ubuntu-24-04-amd64-docker" region_slug = "openstack-msk1" ssh_keys = [regcloud_ssh_key.test.fingerprint] isp_license_size = null # значение указывается только для образов с ispmanager, в этом случае null backups = false } output "server_id" { value = regcloud_server.example_server.server_id } output "created_at" { value = regcloud_server.example_server.created_at } output "size" { value = regcloud_server.example_server.size }Где:
- name — имя сервера,
- size — выбранный тариф (количество CPU, RAM, диска, линейка тарифов),
- image — образ операционной системы (Ubuntu 24.04 LTS с Docker),
- region_slug — регион размещения (Москва-1),
- ssh_keys — SSH-ключ, привязанный для доступа к серверу,
- isp_license_size — тарифный план лицензии ispmanager,
- backups — отключение автоматических бэкапов.
Посмотреть доступные значения параметров
size,imageиregion_slugможно в панели управления.Обратите внимание
Не все образы и тарифы доступны в каждом регионе. Кроме того, некоторые тарифы могут быть несовместимы с определенными образами. Точнее узнать о доступности можно на странице заказа сервера.
-
3
Для создания снэпшота облачного сервера добавьте в
main.tfкод:resource "regcloud_server_snapshot" "example" { reglet_id = regcloud_server.example_server.server_id name = "tf_snap" offline = 1 } output "id" { value = regcloud_server_snapshot.example.id } output "name" { value = regcloud_server_snapshot.example.name } output "snapshot_created_at" { value = regcloud_server_snapshot.example.created_at }Где:
- reglet_id — ID сервера, с которого делается снимок,
- name — имя снимка,
- offline = 1 — сделать снимок с остановкой сервера.
В итоге файл
main.tfдолжен выглядеть следующим образом:
main.tf
terraform {
required_providers {
regcloud = {
source = "tf.reg.cloud/regru/regcloud"
}
}
}
provider "regcloud" {
token = var.token
api_url = var.api_url
}
resource "regcloud_ssh_key" "test" {
name = "example_key"
public_key = file("./assets/id_rsa_example.pub")
}
output "ssh_key_fingerprint" {
value = regcloud_ssh_key.test.fingerprint
}
output "ssh_key_name" {
value = regcloud_ssh_key.test.name
}
resource "regcloud_server" "example_server" {
name = "example_server_001"
size = "c1-m1-d10-hp"
image = "ubuntu-24-04-amd64-docker"
region_slug = "openstack-msk1"
ssh_keys = [regcloud_ssh_key.test.fingerprint]
isp_license_size = null
backups = false
}
output "server_id" {
value = regcloud_server.example_server.server_id
}
output "created_at" {
value = regcloud_server.example_server.created_at
}
output "size" {
value = regcloud_server.example_server.size
}
output "snapshot_created_at" {
value = regcloud_server_snapshot.example.created_at
}
output "distribution" {
value = regcloud_server_snapshot.example.distribution
}
output "min_disk_size" {
value = regcloud_server_snapshot.example.min_disk_size
}
output "size_gigabytes" {
value = regcloud_server_snapshot.example.size_gigabytes
}
Проверка конфигурации
Для проверки файла main.tf на наличие синтаксических ошибок введите команду:
terraform validate
Если ошибок нет, вы увидите следующее сообщение:
Success! The configuration is valid.
Создание ресурсов
-
1
Введите команду:
terraform planTerraform сопоставит текущую инфраструктуру с желаемой и выведет список изменений, которые будут внесены. Если указанный в выводе результат вас устраивает, перейдите к следующему шагу.
-
2
Чтобы применить конфигурацию и создать ресурсы, введите команду:
terraform applyДля подтверждения операции введите yes и нажмите Enter.
При создании ресурсов в терминале будут появляться сообщения о ходе выполнения операций. Terraform выполняет операции синхронно, поэтому создание ресурсов занимает некоторое время. Убедиться, что ресурсы созданы и настроены корректно, можно в панели управления.
Удаление ресурсов
Для удаления всех ресурсов введите команду:
terraform destroy
Чтобы подтвердить операцию, введите yes и нажмите Enter.