VK Private Cloud logo
Помощь
Обновлена 17 июля 2026 г. в 15:55

Создание ВМ через Terraform

Terraform — open-source программное обеспечение Infrastructure as code (IaC) или «инфраструктура как код», созданное HashiCorp. Оно позволяет пользователям определять и предоставлять инфраструктуру центра обработки данных, используя декларативный язык конфигурации, известный как язык конфигурации HashiCorp, или, опционально, JSON.

Предполагается, что Terraform уже подготовлен и настроен в соответствии с инструкцией Установка Terraform c помощью конфигурационного файла.

Создание конфигурации

Опишите конфигурацию создаваемой виртуальной инфраструктуры, создав файл main.tf в директории с конфигурационными файлами Terraform. Пример файла main.tf приведен ниже.

Пример файла main.tf
terraform {required_version = ">= 0.13.0"    required_providers {        vkcs = {            source  = "vk-cs/vkcs"            version = "~> 0.1.12"        }    }}# Блок создания ключевой парыresource "vkcs_compute_keypair" "ssh" {  # Название SSH-ключа. Ключ будет отображаться в настройках аккаунта на вкладке *Ключевые пары*  name = "terraform_ssh_key"  # Путь до открытого ключа  public_key = file("${path.module}/terraform.pem.pub")}# Блок создания группы безопасностиresource "vkcs_networking_secgroup" "secgroup_test" {  name        = "secgroup_test"  description = "My security group"}# Блок создания правила для группы безопасностиresource "vkcs_networking_secgroup_rule" "secgroup_rule_test" {  ethertype         = "IPv4"  direction         = "ingress"  protocol          = "tcp"  port_range_min    = 22  port_range_max    = 22  remote_ip_prefix  = "0.0.0.0/0"  security_group_id = "${vkcs_networking_secgroup.secgroup_test.id}"}# Блок создания дискаresource "vkcs_blockstorage_volume" "volume" {  # Название диска  name = "storage"  size = 10  # UUID образа диска  image_id = "4d8bc6c0-5623-43bf-9179-1bebcb943b47"   # Тип создаваемого диска  volume_type = "ceph"  # Зона доступности для диска  availability_zone = "AZ1"}# Блок создания сетиresource "vkcs_networking_network" "network_test" {  # Название подсети  name = "test_network"  # Признак доступа для администратора  admin_state_up = "true"  # Настройка безопасности для портов сети  port_security_enabled = "true"}# Блок создания подсетиresource "vkcs_networking_subnet" "subnet_test" {  # Название подсети  name = "test_subnet"  # Сеть, в которой создаётся данная подсеть  network_id = "${vkcs_networking_network.network_test.id}"  # Диапазон IP-адресов подсети в нотации CIDR  cidr = "192.168.199.0/24"  no_gateway = false  enable_dhcp = "true"}# Блок создания ВМresource "vkcs_compute_instance" "instance1" {  # Название создаваемой ВМ  name = "terraform-test"  # Шаблон ВМ  flavor_id = "dc84b839-a97b-4074-83d6-233531ffd8b3"  # Используемая ключевая пара  key_pair = "${vkcs_compute_keypair.ssh.name}"  # Группы безопасности для ВМ  security_groups = [    "${vkcs_networking_secgroup.secgroup_test.name}"  ]  # Сеть для ВМ  network {    name = "${vkcs_networking_network.network_test.name}"  }  # Диск для ВМ  block_device {    uuid                  = "${vkcs_blockstorage_volume.volume.id}"    source_type           = "volume"    volume_size           = 20    boot_index            = 0    destination_type      = "volume"    delete_on_termination = true    volume_type           = "ceph"  }}

Дополнительные опции

После создания ВМ начинается подготовка её к использованию. В данном примере показано удалённое подключение и выполнение CLI-команд.

provisioner "remote-exec" {  # Реквизиты соединения  connection {    # Указанный адрес можно получить на вычислительном узле при создании ВМ    host = vkcs_compute_instance.instance1.access_ip_v4    # Пользователь, от имени которого запускается SSH-соединение    user = "ubuntu"    # Закрытый ключ, который будет использован    # В этом примере он лежит в одной директории с main.tf    private_key = file("${path.module}/terraform.pem")  }  # CLI-команды, которые необходимо использовать  inline = [    "sudo apt-get update",    "sudo apt-get -y install nginx",  ]}

Чтобы вывести дополнительные артефакты, например, IP-адрес внешней сети (external / ext-net), который получила ВМ, добавьте фрагмент вида:

output "instances" {  value = "${vkcs_compute_instance.instance1.access_ip_v4}"}

Развёртывание инфраструктуры

  1. Выполните загрузку параметров подключения из конфигурационного файла.

    $ source ~/users_projects-openrc.sh

    Здесь ~/users_projects-openrc.sh — путь к конфигурационному файлу для подключения.

  2. При необходимости введите токен API.

    Пример запроса токена API
    Please enter your API token for project 5e5653f0e0024f9a9da58aa7573997be
  3. Перейдите в каталог с собранным tf-файлом.

  4. Выполните инициализацию окружения terraform с помощью команды terraform init.

  5. Убедитесь в корректности составления конфигурации виртуальной инфраструктуры, выполнив команду terraform plan.

  6. Если после выполнения команды не обнаружено ошибок, запустите развёртывание указанной виртуальной инфраструктуры c помощью команды terraform apply.