Перейти к содержимому

Быстрый старт

Руководство для быстрого старта поможет вам начать работу с Terraform:

  1. Научиться удалять ресурсы.
  1. Зарегистрируйтесь в MWS Cloud Platform.
  2. Убедитесь, что вы приглашены в организацию.
  3. Создайте новый проект или выберите существующий.
  4. Создайте сервисный аккаунт и назначьте ему роль editor или выше на проект.
  1. Создайте авторизованный ключ для сервисного аккаунта.
  2. Скачайте и сохраните файл с авторизованным ключом.
  1. Создайте файл ~/.terraformrc:

    • Linux, MacOS
    • Windows
    bash
    touch ~/.terraformrc
  2. Добавьте в файл ~/.terraformrc следующий блок:

    hcl
    provider_installation {
    network_mirror {
    url = "https://storage.mwsapis.ru/mws-terraform/",
    include = ["registry.terraform.io/mws-cloud/*"]
    }
    direct {
    exclude = ["registry.terraform.io/mws-cloud/*"]
    }
    }
  3. Создайте директорию для хранения конфигурационных файлов Terraform — например, terraform-config.

  4. Внутри этой директории создайте файл main.tf и добавьте в него следующий блок:

    hcl
    terraform {
    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" # зона доступности
    }
  5. Инициализируйте Terraform:

    bash
    terraform init

4. Подготовьте план инфраструктуры и создайте ресурсы

Заголовок раздела «4. Подготовьте план инфраструктуры и создайте ресурсы»

В примере описано создание конфигурационного файла Terraform, с помощью которого будут созданы:

  • сеть с именем mynetwork;
  • подсеть с именем mysubnet и CIDR 192.168.0.0/16;
  • виртуальная машина с именем myvm, с двумя ядрами vCPU, 4ГБ RAM, диском размером в 10 ГБ и ОС Ubuntu 22.04. Она получит внутренний IP-адрес из подсети mysubnet;
  • правило файрвола c именем myrule, которое разрешит к доступ к виртуальной машине по SSH.
  1. Создайте сеть и подсеть внутри этой подсети. Для этого добавьте в файл main.tf следующий код:

    hcl
    resource "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
    }
  2. Создайте виртуальную машину. Для этого добавьте в файл main.tf блок кода:

    hcl
    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 = {
    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
    }
    }
    }
    }
    ]
    }
    ]
    }
    }
  3. Создайте правило файрвола, которое разрешит доступ к созданной ВМ по SSH:

    hcl
    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
    }

    Файл main.tf с полным описанием конфигурации будет выглядеть так:

    hcl
    terraform {
    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
    }
    }
    }
    }
    ]
    }
    ]
    }
    }

Ресурсы, созданные с помощью Terraform, могут тарифицироваться. Не забудьте удалить ресурсы, если вы создали их в тестовых целях, и они вам больше не нужны.

Чтобы удалить ресурсы:

  1. Выполните команду:

    bash
    terraform destroy
  2. Подтвердите удаление: введите слово yes и нажмите Enter.