Описание инфраструктуры сервиса в манифестеBeta

Манифест Terraform описывает конфигурацию инфраструктуры для развертывания инстанса image-based приложения в Marketplace и включает в себя следующие компоненты:

Создание ВМ инстанса

Создание ВМ из загрузочного образа сервиса включает в себя следующие компоненты:

  1. Получение данных виртуальной сети ВМ из источника данных vkcs_networking_subnet.

  2. (Опционально) Создание группы безопасности с помощью ресурсов:

    • vkcs_networking_secgroup — группа безопасности.
    • vkcs_networking_secgroup_rule — правила доступа для группы безопасности.
  3. Создание root-диска с помощью ресурса vkcs_blockstorage_volume.

    В ресурсе указываются следующие параметры вашего сервиса:

  4. Создание отдельного тома для хранения данных сервиса с помощью ресурса vkcs_blockstorage_volume. В ресурсе метаданные диска указываются так же, как для root-диска.

  5. Создание ключевой пары ВМ с помощью ресурса ivkcs_ssh_keypair.

  6. Создание ВМ из загрузочного образа сервиса и установка агента с помощью ресурсов:

    • vkcs_compute_instance. В ресурсе метаданные ВМ указываются так же, как для root-диска. Это нужно, чтобы ВМ инстанса сервиса отображалась на странице Виртуальные машины личного кабинета в отдельном блоке для виртуальных машин Marketplace.
    • ivkcs_user_data.

    Перед публикацией сервиса ID образа сервиса в ресурсе vkcs_compute_instance должен быть заменен на публичный ID. Подробнее — в разделе о публикации образа сервиса.

  7. Присоединение отдельного тома данных к ВМ с помощью ресурса vkcs_compute_volume_attach.

  8. Передача данных ВМ (например, закрытого SSH-ключа) в выходных параметрах.

Получение типа SDN и его использование в ресурсах Terraform

Тип SDN задается в параметре sdn ресурса vkcs_networking_subnet. Параметр может принимать одно из значений:

  • neutron — SDN на базе OpenStack Neutron.
  • sprut — SDN на базе Sprut.

Значение по умолчанию для параметра sdn соответствует типу SDN, установленному по умолчанию в проекте пользователя VK Cloud. Если в проекте по умолчанию задан тип SDN на базе Sprut, значение по умолчанию для параметра sdn равно sprut.

Ресурсы манифеста Terraform получают тип SDN и другие данные подсети из источника данных vkcs_networking_subnet.

Пример получения данных подсети:

data "vkcs_networking_subnet" "subnet" {  # Идентификатор подсети, заданный в переменной ds-subnet  subnet_id = var.ds-subnet}

Пример использования типа SDN в ресурсе vkcs_networking_secgroup:

resource "vkcs_networking_secgroup" "secgroup" {  name = "security_group"  description = "terraform security group"  sdn = data.vkcs_networking_subnet.subnet.sdn}

Использование типа SDN при получении пула внешних IP-адресов

Для получения пула внешних IP-адресов используется ресурс vkcs_networking_floatingip. В параметре pool ресурса имя внешней сети указывается так, чтобы оно определялось автоматически в зависимости от типа SDN:

  • Если SDN на базе OpenStack Neutron — ext-net.
  • Если SDN на базе Sprut — internet.

Пример использования типа SDN в ресурсе vkcs_networking_floatingip:

resource "vkcs_networking_floatingip" "base_fip" {  pool  = data.vkcs_networking_subnet.subnet.sdn == "neutron" ? "ext-net" : "internet"}

Назначение фиксированного IP-адреса

Зафиксировать IP-адрес ВМ инстанса необходимо, чтобы он не менялся при переустановке сервиса. Назначение фиксированного IP-адреса включает в себя следующие компоненты:

  1. Привязка IP-адреса к порту подсети ВМ с помощью ресурса vkcs_networking_port.

    Пример привязки IP-адреса к порту:

    resource "vkcs_networking_port" "port" {  name               = "port name"  admin_state_up     = "true"  # Идентификатор виртуальной сети  network_id         = data.vkcs_networking_subnet.subnet.network_id  # Идентификатор групп безопасности, применяемых для порта  security_group_ids = [vkcs_networking_secgroup.secgroup.id]  # Тип SDN  sdn                = data.vkcs_networking_subnet.subnet.sdn  fixed_ip {    # Идентификатор подсети, из которой будет назначен IP-адрес порта    subnet_id = var.ds-subnet  }}

    Подробнее об SDN.

  2. Указание идентификатора порта в ресурсе vkcs_compute_instance:

    resource "vkcs_compute_instance" "compute" {...  network {    port = vkcs_networking_port.port.id  }}

Генерирование паролей доступа к инстансу сервиса

Пароли доступа к инстансу сервиса генерируются с помощью ресурса random_password.

Пример использования ресурса random_password:

resource "random_password" "user" {# Использовать или нет специальные символы в паролеspecial = false# Длина пароляlength  = 50}

Сгенерированный пароль передается пользователю в выходных параметрах.