Описание инфраструктуры сервиса в манифестеBeta
Манифест Terraform описывает конфигурацию инфраструктуры для развертывания инстанса image-based приложения в Marketplace и включает в себя следующие компоненты:
- Создание ВМ инстанса;
- Получение типа SDN;
- Назначение фиксированного IP-адреса;
- Генерирование паролей доступа к инстансу сервиса.
Создание ВМ из загрузочного образа сервиса включает в себя следующие компоненты:
-
Получение данных виртуальной сети ВМ из источника данных
vkcs_networking_subnet. -
(Опционально) Создание группы безопасности с помощью ресурсов:
vkcs_networking_secgroup— группа безопасности.vkcs_networking_secgroup_rule— правила доступа для группы безопасности.
-
Создание root-диска с помощью ресурса
vkcs_blockstorage_volume.В ресурсе указываются следующие параметры вашего сервиса:
-
идентификатор ранее созданного образа сервиса;
-
имя сервиса
<ИМЯ_СЕРВИСА>в метаданных root-диска:metadata = { "sid" : "xaas", "product" : "<ИМЯ_СЕРВИСА>" }
-
-
Создание отдельного тома для хранения данных сервиса с помощью ресурса
vkcs_blockstorage_volume. В ресурсе метаданные диска указываются так же, как для root-диска. -
Создание ключевой пары ВМ с помощью ресурса
ivkcs_ssh_keypair. -
Создание ВМ из загрузочного образа сервиса и установка агента с помощью ресурсов:
vkcs_compute_instance. В ресурсе метаданные ВМ указываются так же, как для root-диска. Это нужно, чтобы ВМ инстанса сервиса отображалась на странице Виртуальные машины личного кабинета в отдельном блоке для виртуальных машин Marketplace.ivkcs_user_data.
Перед публикацией сервиса ID образа сервиса в ресурсе
vkcs_compute_instanceдолжен быть заменен на публичный ID. Подробнее — в разделе о публикации образа сервиса. -
Присоединение отдельного тома данных к ВМ с помощью ресурса
vkcs_compute_volume_attach. -
Передача данных ВМ (например, закрытого SSH-ключа) в выходных параметрах.
Тип 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-subnetsubnet_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}
Для получения пула внешних 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-адреса к порту подсети ВМ с помощью ресурса
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]# Тип SDNsdn = data.vkcs_networking_subnet.subnet.sdnfixed_ip {# Идентификатор подсети, из которой будет назначен IP-адрес портаsubnet_id = var.ds-subnet}} -
Указание идентификатора порта в ресурсе
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}
Сгенерированный пароль передается пользователю в выходных параметрах.