Облачные сервисы Beget могут управляться пользователями не только вручную через Панель управления, но и с помощью автоматизированных средств, таких как Hashicorp Terraform. Провайдер для взаимодействия Terraform и нашей системы описан в данной документации.
Провайдер Beget для Terraform позволяет использовать параметры, ресурсы и источники данных, перечисленные в подразделах ниже.
- beget_compute_image - образы виртуальных серверов;
- beget_compute_instance - виртуальные сервера (VPS);
- beget_compute_snapshot - снапшоты виртуальных серверов;
- beget_postgresql_service - облачные сервисы PostgreSQL;
- beget_postgresql_role - роли (пользователи) в облачном сервисе PostgreSQL;
- beget_postgresql_db - базы данных облачного сервиса PostgreSQL;
- beget_mysql_service - облачные сервисы MySQL;
- beget_mysql_db - базы данных облачного сервиса MySQL;
- beget_mysql_access - доступы к базам данных облачного сервиса MySQL;
- beget_s3_bucket - бакеты объектного хранилища S3;
- beget_ssh_key - SSH-ключи доступа;
- beget_additional_ip - дополнительные выделенные IPv4-адреса;
- beget_private_network - приватные сети.
- beget_configuration - отдельная конфигурация виртуального сервера;
- beget_configurations - доступные конфигурации виртуальных серверов;
- beget_configuration_group - отдельная группа конфигураций виртуальных серверов, связанных по типу процессора;
- beget_configuration_groups - доступные группы конфигураций виртуальных серверов, связанных по типу процессора;
- beget_isp_license - отдельный тип лицензии ISP Manager;
- beget_isp_licenses - список доступных типов лицензии ISP Manager;
- beget_postgresql_configurations - список доступных конфигураций облачных сервисов PostgreSQL;
- beget_mysql_configurations - список доступных конфигураций облачных сервисов MySQL;
- beget_private_networks - список созданных для аккаунта приватных сетей;
- beget_region - отдельная локация для размещения виртуальных серверов;
- beget_regions - список доступных локаций для размещения виртуальных серверов;
- beget_software - информация об отдельном дистрибутиве ПО из маркетплейса;
- beget_softwares - список доступных для установки дистрибутивов ПО из маркетплейса.
token- токен доступа к Beget API, необходимый для работы провайдера.
default_create_timeout- время таймаута на операции создания ресурсов;default_delete_timeout- время таймаута на операции удаления ресурсов;default_read_timeout- время таймаута на операции получения данных от Beget API;default_update_timeout- время таймаута на операции обновления ресурсов.
Для работы необходимо установить клиент Terraform на устройство, с которого Вы планируете работать. Для этого воспользуйтесь официальной документацией Terraform.
- Для работы с Terraform рекомендуется создать отдельную директорию, в которой будут располагаться все файлы для работы над проектом. Создайте директорию с произвольным именем (например,
beget-cloud-project) и перейдите в нее. - В созданной директории создайте конфигурационный файл, в котором будет описан план для Terraform. Файл должен иметь расширение
.tf, имя может быть произвольным (например,main.tf).
Terraform поддерживает описание планов как на собственном языке HCL, так и в формате JSON. Во втором случае вместо расширения
.tfдолжно использоваться.json. В данном примере мы будем использовать именно HCL.
- Откройте файл плана Terraform и вставьте в него следующий блок конфигурации:
# Содержимое ниже вставьте с заменой в файл main.tf (или создайте его, если он отсутствует)
terraform {
required_providers {
beget = {
source = "tf.beget.com/beget/beget"
}
}
}
- В командной строке введите команду
terraform initдля скачивания и инициализации провайдера согласно плана. Terraform выполнит необходимые операции:
$ terraform init
Initializing the backend...
Initializing provider plugins...
- Finding latest version of tf.beget.com/beget/beget...
- Installing tf.beget.com/beget/beget v0.0.33...
- Installed tf.beget.com/beget/beget v0.0.33 (self-signed, key ID C4AB1984CA80EFC9)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://developer.hashicorp.com/terraform/cli/plugins/signing
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
Для работы с Terraform необходимо получить пользовательский токен. Чтобы это сделать, необходимо:
- Авторизоваться в Панели управления Beget.
- Перейти в раздел Настройки аккаунта, открыть категорию Ограничение доступа и перейти в подраздел Beget API.
- В открытом разделе включить пункт "Разрешить аутентификацию по API".
- Отправить любым удобным способом (с помощью curl, Postman или любого другого клиента) POST-запрос для получения токена согласно документации API.
- Полученный в ответе токен (поле
tokenв полученном json) указать в файле плана Terraform:
# Содержимое ниже вставьте с заменой в файл main.tf (или создайте его, если он отсутствует)
terraform {
required_providers {
beget = {
source = "tf.beget.com/beget/beget"
}
}
}
provider "beget" {
# Полученное в запросе значение токена вставьте сюда
token = "eyJhb..."
}
В качестве примера мы опишем создание виртуального сервера (VPS) в следующей конфигурации:
- локация - Россия, Санкт-Петербург (
ru1); - линейка CPU - Standard 3+ GHz (
normal_cpu); - конфигурация VPS - 1 ядро CPU, 1 ГБ RAM, 10 ГБ SSD;
- устанавливаемое ПО - Ubuntu 24.04 (в примере определяется с помощью источника данных
beget_software).
Для создания VPS необходимо указать хотя бы один публичный ключ в формате RSA - информацию о том, как создать такой ключ, можно прочитать в нашей документации. После создания пары ключей необходимо будет указать путь до ключа в соответствующем ресурсе beget_ssh_key.
# Содержимое ниже вставьте в файл main.tf (или создайте его, если он отсутствует)
terraform {
required_providers {
beget = {
source = "tf.beget.com/beget/beget"
}
}
}
provider "beget" {
# Полученное в запросе значение токена вставьте сюда
token = "eyJhb..."
}
resource "beget_ssh_key" "devops" {
name = "Test terraform key"
# Путь до собственного ключа необходимо указать здесь
public_key = file("/home/user/.ssh/id_rsa.pub")
}
# Данные обо всех доступных регионах можно получить с помощью data source "beget_regions"
data "beget_regions" "regions_list" {
}
# Для получения списка регионов нужно раскомментировать output ниже
# output "regions_list" {
# value = data.beget_regions.regions_list
# }
# Данные обо всех доступных линейках CPU можно получить с помощью data source "beget_regions"
data "beget_configuration_groups" "config_group_list" {
}
# Для получения списка линеек CPU нужно раскомментировать output ниже
# output "config_list" {
# value = data.beget_configuration_groups.config_group_list
# }
# Данные обо всех доступных дистрибутивах ПО можно получить с помощью data source "beget_softwares"
data "beget_softwares" "software_list" {
}
# Для получения списка ПО на экран нужно раскомментировать output ниже
# output "software_list" {
# value = data.beget_softwares.software_list
# }
# Данные о дистрибутиве ПО определяются с помощью data source "beget_software"
# Для этого можно использовать фильтры по данным, которые можно получить из beget_softwares - в данном случае по полю slug
data "beget_software" "ubuntu" {
slug = "ubuntu-24-04"
}
resource "beget_compute_instance" "test-server" {
name = "Test Server"
description = "Сервер, созданный с помощью Terraform"
hostname = "test-server"
# Здесь указывается регион, в котором будет создан VPS - его можно выбрать с помощью data source "beget_regions"
region = "ru1"
# Здесь указывается конфигурация VPS
configuration = {
cpu = 1
ram_mb = 1 * 1024
disk_mb = 10 * 1024
# Здесь указывается линейка CPU - список доступных можно узнать с помощью data source "beget_configuration_groups"
cpu_class = "normal_cpu"
}
image = {
software = {
# Для установки ПО необходим его ID - его мы можем получить как с помощью data source "beget_softwares" напрямую, так и с помощью data source "beget_software" на основе фильтров
id = data.beget_software.ubuntu.id
}
}
access = {
ssh_keys = [beget_ssh_key.devops.id]
}
}
После создания VPS доступ к ней можно будет получить как по SSH-ключу, сгенерированному ранее, так и по паролю, который придет на электронную почту, привязанную к аккаунту.
После того, как план подготовлен, необходимо:
- Удостовериться, что план корректен - для этого выполнить валидацию командой
terraform validate:
$ terraform validate
Success! The configuration is valid.
- Запустить планирование применения конфигурации (необязательно) с помощью команды
terraform plan- она отобразит изменения состояния проекта без применения изменений:
$ terraform plan
data.beget_software.ubuntu: Reading...
data.beget_software.ubuntu: Read complete after 0s [name=ubuntu]
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# beget_compute_instance.test-server will be created
+ resource "beget_compute_instance" "test-server" {
+ access = {
+ ssh_keys = [
+ (known after apply),
]
}
+ configuration = {
+ cpu = 1
+ cpu_class = "normal_cpu"
+ disk_mb = 10240
+ price_day = (known after apply)
+ price_month = (known after apply)
+ ram_mb = 1024
+ region = (known after apply)
}
+ date_create = (known after apply)
+ description = "Сервер, созданный с помощью Terraform"
+ hostname = "test-server"
+ id = (known after apply)
+ image = {
+ software = {
+ id = 6153
}
}
+ ip_address = (known after apply)
+ name = "Test Server"
+ region = "ru1"
+ slug = (known after apply)
+ software_domain = (known after apply)
+ status = (known after apply)
+ technical_domain = (known after apply)
}
# beget_ssh_key.devops will be created
+ resource "beget_ssh_key" "devops" {
+ fingerprint = (known after apply)
+ id = (known after apply)
+ name = "Test terraform key"
+ public_key = <<-EOT
ssh-rsa AAAAB...
EOT
}
Plan: 2 to add, 0 to change, 0 to destroy.
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.
- Запустить применение изменений командой
terraform apply:
$ terraform apply
data.beget_software.ubuntu: Reading...
data.beget_software.ubuntu: Read complete after 0s [name=ubuntu]
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# beget_compute_instance.test-server will be created
+ resource "beget_compute_instance" "test-server" {
+ access = {
+ ssh_keys = [
+ (known after apply),
]
}
+ configuration = {
+ cpu = 1
+ cpu_class = "normal_cpu"
+ disk_mb = 10240
+ price_day = (known after apply)
+ price_month = (known after apply)
+ ram_mb = 1024
+ region = (known after apply)
}
+ date_create = (known after apply)
+ description = "Сервер, созданный с помощью Terraform"
+ hostname = "test-server"
+ id = (known after apply)
+ image = {
+ software = {
+ id = 6153
}
}
+ ip_address = (known after apply)
+ name = "Test Server"
+ region = "ru1"
+ slug = (known after apply)
+ software_domain = (known after apply)
+ status = (known after apply)
+ technical_domain = (known after apply)
}
# beget_ssh_key.devops will be created
+ resource "beget_ssh_key" "devops" {
+ fingerprint = (known after apply)
+ id = (known after apply)
+ name = "Test terraform key"
+ public_key = <<-EOT
ssh-rsa AAAAB...
EOT
}
Plan: 2 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
- Подтвердить изменения вводом
yesв командной строке и дождаться выполнения операций:
Enter a value: yes
beget_ssh_key.devops: Creating...
beget_ssh_key.devops: Creation complete after 1s [id=27674]
beget_compute_instance.test-server: Creating...
beget_compute_instance.test-server: Still creating... [00m10s elapsed]
beget_compute_instance.test-server: Still creating... [00m20s elapsed]
beget_compute_instance.test-server: Creation complete after 26s [id=f03a3dbf-d1d7-4b5e-bdca-0ac66531acd6]
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
После завершения операций VPS будет создана - к ней можно подключиться по данным, указанном в письме, которое было отправлено на электронную почту. Также она будет отображаться в разделе Облако Панели управления.
Если в сервисах больше нет необходимости - их можно удалить. Для этого:
- Запустите удаление командой
terraform destroy:
$ terraform destroy
beget_ssh_key.devops: Refreshing state... [id=27709]
data.beget_software.ubuntu: Reading...
data.beget_software.ubuntu: Read complete after 0s [name=ubuntu]
beget_compute_instance.test-server: Refreshing state... [id=f03a3dbf-d1d7-4b5e-bdca-0ac66531acd6]
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
- destroy
Terraform will perform the following actions:
# beget_compute_instance.test-server will be destroyed
- resource "beget_compute_instance" "test-server" {
- access = {
- ssh_keys = [
- 27709,
] -> null
} -> null
- configuration = {
- cpu = 1 -> null
- cpu_class = "normal_cpu" -> null
- disk_mb = 10240 -> null
- price_day = 7 -> null
- price_month = 210 -> null
- ram_mb = 1024 -> null
- region = "ru1" -> null
} -> null
- date_create = "2025-11-19T18:22:58+03:00" -> null
- description = "Сервер, созданный с помощью Terraform" -> null
- hostname = "test-server" -> null
- id = "f03a3dbf-d1d7-4b5e-bdca-0ac66531acd6" -> null
- image = {
- software = {
- id = 6153 -> null
} -> null
} -> null
- ip_address = "5.35.90.219" -> null
- name = "Test Server" -> null
- region = "ru1" -> null
- slug = "test-server-164" -> null
- software_domain = "" -> null
- status = "RUNNING" -> null
- technical_domain = "" -> null
}
# beget_ssh_key.devops will be destroyed
- resource "beget_ssh_key" "devops" {
- fingerprint = "00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff" -> null
- id = "27709" -> null
- name = "Test terraform key" -> null
- public_key = <<-EOT
ssh-rsa AAAAB...
EOT -> null
}
Plan: 0 to add, 0 to change, 2 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в командной строке:
Enter a value: yes
beget_compute_instance.test-server: Destroying... [id=f03a3dbf-d1d7-4b5e-bdca-0ac66531acd6]
beget_compute_instance.test-server: Destruction complete after 1s
beget_ssh_key.devops: Destroying... [id=27674]
beget_ssh_key.devops: Destruction complete after 0s
Destroy complete! Resources: 2 destroyed.