Создание ВМ через Terraform
Terraform — open-source программное обеспечение Infrastructure as code (IaC) или «инфраструктура как код», созданное HashiCorp. Оно позволяет пользователям определять и предоставлять инфраструктуру центра обработки данных, используя декларативный язык конфигурации, известный как язык конфигурации HashiCorp, или, опционально, JSON.
Предполагается, что Terraform уже подготовлен и настроен в соответствии с инструкцией Установка Terraform c помощью конфигурационного файла.
Опишите конфигурацию создаваемой виртуальной инфраструктуры, создав файл main.tf в директории с конфигурационными файлами Terraform. Пример файла 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 = 22port_range_max = 22remote_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-адресов подсети в нотации CIDRcidr = "192.168.199.0/24"no_gateway = falseenable_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 = 20boot_index = 0destination_type = "volume"delete_on_termination = truevolume_type = "ceph"}}
После создания ВМ начинается подготовка её к использованию. В данном примере показано удалённое подключение и выполнение CLI-команд.
provisioner "remote-exec" {# Реквизиты соединенияconnection {# Указанный адрес можно получить на вычислительном узле при создании ВМhost = vkcs_compute_instance.instance1.access_ip_v4# Пользователь, от имени которого запускается SSH-соединениеuser = "ubuntu"# Закрытый ключ, который будет использован# В этом примере он лежит в одной директории с main.tfprivate_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}"}
-
Выполните загрузку параметров подключения из конфигурационного файла.
$ source ~/users_projects-openrc.shЗдесь
~/users_projects-openrc.sh— путь к конфигурационному файлу для подключения. -
При необходимости введите токен API.
Пример запроса токена APIPlease enter your API token for project 5e5653f0e0024f9a9da58aa7573997be -
Перейдите в каталог с собранным tf-файлом.
-
Выполните инициализацию окружения terraform с помощью команды
terraform init. -
Убедитесь в корректности составления конфигурации виртуальной инфраструктуры, выполнив команду
terraform plan. -
Если после выполнения команды не обнаружено ошибок, запустите развёртывание указанной виртуальной инфраструктуры c помощью команды
terraform apply.