Быстрый старт
Руководство для быстрого старта поможет вам начать работу с Terraform:
- Научиться удалять ресурсы.
1. Подготовьте окружение
- Зарегистрируйтесь в MWS Cloud Platform.
- Убедитесь, что вы приглашены в организацию.
- Создайте новый проект или выберите существующий.
- Создайте сервисный аккаунт и назначьте ему роль
editorили выше на проект.
2. Получите аутентификационные данные
- Создайте авторизованный ключ для сервисного аккаунта.
- Скачайте и сохраните файл с авторизованным ключом.
3. Настройте провайдер
Создайте файл
~/.terraformrc:Добавьте в файл
~/.terraformrcследующий блок:hclprovider_installation { network_mirror { url = "https://storage.mwsapis.ru/mws-terraform/", include = ["registry.terraform.io/mws-cloud/*"] } direct { exclude = ["registry.terraform.io/mws-cloud/*"] } }Создайте директорию для хранения конфигурационных файлов Terraform — например,
terraform-config.Внутри этой директории создайте файл
main.tfи добавьте в него следующий блок:hclterraform { required_providers { mws = { source = "mws-cloud/mws" } } required_version = ">= 1.11" } provider "mws" { service_account_authorized_key_path = "<путь к файлу с авторизованным ключом>" project = "my-project" # имя проекта zone = "ru-central1-a" # зона доступности }Инициализируйте Terraform:
bashterraform init
4. Подготовьте план инфраструктуры и создайте ресурсы
В примере описано создание конфигурационного файла Terraform, с помощью которого будут созданы:
- сеть с именем
mynetwork; - подсеть с именем
mysubnetи CIDR192.168.0.0/16; - виртуальная машина с именем
myvm, с двумя ядрами vCPU, 4ГБ RAM, диском размером в 10 ГБ и ОС Ubuntu 22.04. Она получит внутренний IP-адрес из подсетиmysubnet; - правило файрвола c именем
myrule, которое разрешит к доступ к виртуальной машине по SSH.
Создайте сеть и подсеть внутри этой подсети. Для этого добавьте в файл
main.tfследующий код:hclresource "mws_vpc_network" "network" { network = "mynetwork" # имя сети } resource "mws_vpc_subnet" "subnet" { subnet = "mysubnet" # имя подсети network = mws_vpc_network.network.network # ссылка на сеть cidr = "192.168.0.0/16" # СIDR }Создайте виртуальную машину. Для этого добавьте в файл
main.tfблок кода:hcldata "mws_compute_image" "image" { image = "mws-ubuntu-2204-lts-v20250529" project = "mws-ubuntu" } resource "mws_vpc_address" "vm_primary_network_interface_address" { network = mws_vpc_network.network.network subnet = mws_vpc_subnet.subnet.metadata.id address = "my-test-vm-primary-network-interface-address" } resource "mws_vpc_external_address" "vm_external_address" { external_address = "myvm-external-address" } resource "mws_compute_disk" "disk" { disk = "mydisk" disk_type = "diskTypes/nbs-pl2" iops = 1000 size = "10GB" source = { image = data.mws_compute_image.image.metadata.id } } resource "mws_compute_virtual_machine" "vm" { virtual_machine = "myvm" vm_type = "vmTypes/gen-2-8" hardware = { power = "ON" graceful_shutdown_timeout = "1m 30s" } os = { hostname = "my" local_domain = "vm" metadata = { attributes = { user-data = <<-EOF #cloud-config users: - name: myuser groups: sudo shell: /bin/bash sudo: 'ALL=(ALL) NOPASSWD:ALL' ssh_authorized_keys: - ssh-ed25519 AAAAC4YzaC2lDDI1NFE5FFFFIJXzfUIPxeQW+snH3LYn1t++5bdEzdfd+Mdj0h99Ii20 myuser@mycomputer EOF } } } storage = { disks = [ { name = "boot" boot = true disk = { ref = mws_compute_disk.disk.metadata.id } } ] } network = { network_interfaces = [ { name = "my-test-vm-network-interface-primary" primary = true addresses = [ { address = { ref = mws_vpc_address.vm_primary_network_interface_address.metadata.id } one_to_one_nat = { external = { address = { ref = mws_vpc_external_address.vm_external_address.metadata.id } } } } ] } ] } }Создайте правило файрвола, которое разрешит доступ к созданной ВМ по SSH:
hclresource "mws_vpc_firewall_rule" "firewall_rule" { metadata = { display_name = "Allow SSH" } firewall_rule = "myrule" network = mws_vpc_network.network.network priority = 1000 direction = "INGRESS" action = "ALLOW" source = { spec = { cidrs = ["0.0.0.0/0"] } } destination = { spec = { cidrs = ["${mws_vpc_address.vm_primary_network_interface_address.status.ip_address}/32"] } } proto_ports = ["TCP:22"] active = true }Файл
main.tfс полным описанием конфигурации будет выглядеть так:main.tf
hclterraform { required_providers { mws = { source = "mws-cloud/mws" } } required_version = ">= 1.11" } provider "mws" { service_account_authorized_key_path = "<путь к файлу с авторизованным ключом>" zone = "ru-central1-a" project = "<имя проекта>" } resource "mws_vpc_network" "network" { network = "mynetwork" } resource "mws_vpc_subnet" "subnet" { depends_on = [mws_vpc_network.network] subnet = "mysubnet" network = mws_vpc_network.network.network cidr = "192.168.0.0/16" } resource "mws_vpc_firewall_rule" "firewall_rule" { metadata = { display_name = "Allow SSH" } firewall_rule = "myrule" network = mws_vpc_network.network.network priority = 1000 direction = "INGRESS" action = "ALLOW" source = { spec = { cidrs = ["0.0.0.0/0"] } } destination = { spec = { cidrs = ["${mws_vpc_address.vm_primary_network_interface_address.status.ip_address}/32"] } } proto_ports = ["TCP:22"] active = true } data "mws_compute_image" "image" { image = "mws-ubuntu-2204-lts-v20250529" project = "mws-ubuntu" } resource "mws_vpc_address" "vm_primary_network_interface_address" { network = mws_vpc_network.network.network subnet = mws_vpc_subnet.subnet.metadata.id address = "my-test-vm-primary-network-interface-address" } resource "mws_vpc_external_address" "vm_external_address" { external_address = "myvm-external-address" } resource "mws_compute_disk" "disk" { disk = "mydisk" disk_type = "diskTypes/nbs-pl2" iops = 1000 size = "10GB" source = { image = data.mws_compute_image.image.metadata.id } } resource "mws_compute_virtual_machine" "vm" { virtual_machine = "myvm" vm_type = "vmTypes/gen-2-8" hardware = { power = "ON" graceful_shutdown_timeout = "1m 30s" } os = { hostname = "my" local_domain = "vm" metadata = { user-data = <<-EOF #cloud-config users: - name: myuser groups: sudo shell: /bin/bash sudo: 'ALL=(ALL) NOPASSWD:ALL' ssh_authorized_keys: - ssh-ed25519 AAAAC4YzaC2lDDI1NFE5FFFFIJXzfUIPxeQW+snH3LYn1t++5bdEzdfd+Mdj0h99Ii20 myuser@mycomputer EOF } } storage = { disks = [ { name = "boot" boot = true disk = { ref = mws_compute_disk.disk.metadata.id } } ] } network = { network_interfaces = [ { name = "myvm-network-interface-primary" primary = true addresses = [ { address = { ref = mws_vpc_address.vm_primary_network_interface_address.metadata.id } one_to_one_nat = { external = { address = { ref = mws_vpc_external_address.vm_external_address.metadata.id } } } } ] } ] } }Проверьте конфигурационный файл на наличие синтаксических ошибок:
bashterraform validateЕсли ошибок нет, вы получите следующее сообщение:
bashSuccess! The configuration is valid.Выполните команду:
bashterraform planTerraform проверит конфигурационные файлы, сопоставит описание желаемого состояния облачной инфраструктуры с фактическим и укажет, какие операции с ресурсами будут выполнены.
Примените конфигурацию:
bashterraform applyПодтвердите выполнение операций: введите слово
yesи нажмите Enter.Во время создания ресурсов Terraform будет выводить краткие сообщения о выполняемых операциях. Проверить, что ресурсы созданы и настроены корректно, можно в веб-консоли.
5. Удалите ресурсы
Ресурсы, созданные с помощью Terraform, могут тарифицироваться. Не забудьте удалить ресурсы, если вы создали их в тестовых целях, и они вам больше не нужны.
Чтобы удалить ресурсы:
Выполните команду:
bashterraform destroyПодтвердите удаление: введите слово
yesи нажмите Enter.