Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Compute Cloud
    • Все инструкции
      • Создать группу ВМ фиксированного размера
      • Создать группу ВМ фиксированного размера с сетевым балансировщиком
      • Создать группу ВМ фиксированного размера с L7-балансировщиком
      • Создать автоматически масштабируемую группу ВМ
      • Создать группу ВМ с Container Optimized Image
      • Создать группу ВМ по YAML-спецификации
      • Создать группу ВМ в группе размещения
      • Создать группу ВМ с фиксированными IP-адресами
      • Создать группу ВМ с подключением к файловому хранилищу
      • Создать группу ВМ с подключением к Object Storage
    • Посмотреть операции с ресурсами сервиса
  • Yandex Container Solution
  • Управление доступом
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы
  1. Пошаговые инструкции
  2. Создание группы виртуальных машин
  3. Создать группу ВМ с фиксированными IP-адресами

Создать группу виртуальных машин с фиксированными IP-адресами

Статья создана
Yandex Cloud
Улучшена
mmerihsesh
Обновлена 21 апреля 2025 г.

Вы можете использовать теги и переменные, чтобы создать группу ВМ с заранее заданными внутренними и публичными IP-адресами.

По умолчанию все операции в Instance Groups выполняются от имени сервисного аккаунта. Если сервисного аккаунта нет, создайте его.

Чтобы иметь возможность создавать, обновлять и удалять ВМ в группе назначьте сервисному аккаунту роль compute.editor.

Чтобы создать группу ВМ с фиксированными IP-адресами:

CLI
Terraform
API
  1. По умолчанию все операции в Instance Groups выполняются от имени сервисного аккаунта. Если сервисного аккаунта нет, создайте его.

  2. Создайте облачную сеть и подсети, например в двух зонах доступности, если у вас их нет.

  3. Если вы хотите, чтобы ВМ из группы были доступны из интернета, зарезервируйте необходимое количество статических публичных IP-адресов. Для примера, приведенного ниже, вам будет достаточно четырех IP-адресов.

  4. Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

    По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

  5. Посмотрите описание команды CLI для создания группы ВМ:

    yc compute instance-group create --help
    
  6. Выберите один из публичных образов Yandex Cloud Marketplace, например Ubuntu 22.04 LTS.

    Чтобы получить список доступных образов с помощью CLI, выполните команду:

    yc compute image list --folder-id standard-images
    

    Результат:

    +----------------------+-------------------------------------+--------------------------+----------------------+--------+
    |          ID          |                NAME                 |          FAMILY          |     PRODUCT IDS      | STATUS |
    +----------------------+-------------------------------------+--------------------------+----------------------+--------+
    ...
    | fdvk34al8k5n******** | centos-7-1549279494                 | centos-7                 | dqni65lfhvv2******** | READY  |
    | fdv7ooobjfl3******** | windows-2016-gvlk-1548913814        | windows-2016-gvlk        | dqnnc72gj2is******** | READY  |
    | fdv4f5kv5cvf******** | ubuntu-1604-lts-1549457823          | ubuntu-1604-lts          | dqnnb6dc7640******** | READY  |
    ...
    +----------------------+-------------------------------------+--------------------------+----------------------+--------+
    

    Где:

    • ID — идентификатор образа.

    • NAME — имя образа.

    • FAMILY — идентификатор семейства образов, к которому относится образ.

    • PRODUCT IDS — идентификаторы продуктов Yandex Cloud Marketplace, связанных с образом.

    • STATUS — текущий статус образа. Может принимать одно из значений:

      • STATUS_UNSPECIFIED — статус образа не определен.
      • CREATING — образ в процессе создания.
      • READY — образ готов к использованию.
      • ERROR — образ нельзя использовать из-за возникшей с ним проблемы.
      • DELETING — образ в процессе удаления.
  7. Подготовьте файл с YAML-спецификацией группы ВМ с произвольным именем, например specification.yaml.

    Чтобы назначить ВМ группы фиксированные IP-адреса, добавьте в спецификацию:

    • В поле allocation_policy — вложенное поле zones с парными параметрами zone_id и instance_tags_pool для каждой из зон доступности, в которых будут создаваться ВМ. Например, если ВМ группы будут расположены в зонах доступности ru-central1-a и ru-central1-b, поле allocation_policy будет выглядеть так:

      allocation_policy:
        zones:
          - zone_id: ru-central1-a
            instance_tags_pool:
            - <тег1_зоны_ru-central1-a>
            - <тег2_зоны_ru-central1-a>
          - zone_id: ru-central1-b
            instance_tags_pool:
            - <тег1_зоны_ru-central1-b>
            - <тег2_зоны_ru-central1-b>
      

      Где:

      • zone_id — идентификатор зоны доступности.
      • instance_tags_pool — список уникальных тегов для привязки IP-адресов к ВМ группы. Значение тега участвует в формировании имен ВМ, а также в формировании переменных, содержащих IP-адреса ВМ. Количество тегов для каждой зоны доступности должно соответствовать количеству ВМ, создаваемых в этой зоне. Примеры возможных значений тегов: ru1-a1, ru1-b2 и т.п.
    • Поле variables, содержащее набор переменных, через которые с помощью шаблонов в группу ВМ передаются IP-адреса создаваемых ВМ:

      variables:
        - key: ip_<тег1_зоны_ru-central1-a>
          value: <внутренний_IP-адрес1>
        - key: external_ip_<тег1_зоны_ru-central1-a>
          value: <публичный_IP-адрес1>
        ...
        - key: ip_<тег2_зоны_ru-central1-b>
          value: <внутренний_IP-адрес_4>
        - key: external_ip_<тег2_зоны_ru-central1-b>
          value: <публичный_IP-адрес_4>
      

      Где:

      • key — имя переменной, в формате <префикс>_<тег>:

        • <префикс> определяет тип IP-адреса. Например, для внутренних адресов можно использовать префикс ip, а для публичных IP-адресов — external_ip.

        • <тег> должен быть идентичен значению соответствующего тега, заданного для данной ВМ в поле allocation_policy, например ru1-a1.

      • value — значение переменной: внутренний или публичный IP-адрес создаваемой ВМ.

        Внутренние IP-адреса должны принадлежать диапазону IP-адресов, выделенному для указанной подсети в соответствующей зоне доступности.

        Если виртуальные машины группы будут создаваться без привязанных публичных IP-адресов, не задавайте переменные с префиксом external_ip.

      Подробнее об использовании переменных в шаблоне ВМ см. в разделе Переменные в шаблоне виртуальной машины.

    • В поле instance_template.name — имя виртуальной машины, содержащее шаблон тега. Например: sample-vm-{instance.tag}. После подстановки значений тегов в этот шаблон имена ВМ будут выглядеть как sample-vm-ru1-a1, sample-vm-ru1-b2 и т.д.

    • В поле instance_template.network_interface_specs — идентификаторы подсетей и шаблоны IP-адресов:

      instance_template:
        ...
        network_interface_specs:
          - subnet_ids:
              - <идентификатор_подсети_в_ru-central1-a>
              - <идентификатор_подсети_в_ru-central1-b>
            primary_v4_address_spec:
              address: "{ip_{instance.tag}}"
              one_to_one_nat_spec:
                ip_version: IPV4
                address: "{<external_ip_{instance.tag}}"
      

      Где:

      • subnet_ids — список идентификаторов подсетей, в которых должны располагаться ВМ. Требуется указать одну подсеть в каждой из зон доступности, в которых будут созданы ВМ группы.
      • primary_v4_address_spec.address — шаблон внутренних IP-адресов. В шаблон будет подставлено значение из переменной, заданной для данной ВМ в поле variables.
      • primary_v4_address_spec.one_to_one_nat_spec.address — шаблон для публичных IP-адресов. В шаблон будет подставлено значение из переменной, заданной для данной ВМ в поле variables.

      Если виртуальные машины группы будут создаваться без привязанных публичных IP-адресов, не добавляйте в спецификацию поле primary_v4_address_spec.one_to_one_nat_spec.

    Пример YAML-спецификации:

    service_account_id: <идентификатор_сервисного_аккаунта>
    name: my-vm-group-with-fixed-ips
    description: Example of using tags for managing ips. Created with CLI
    scale_policy:
      fixed_scale:
        size: 4
    deploy_policy:
      max_unavailable: 2
    allocation_policy:
      zones:
        - zone_id: ru-central1-a
          instance_tags_pool:
          - ru1-a1
          - ru1-a2
        - zone_id: ru-central1-b
          instance_tags_pool:
          - ru1-b1
          - ru1-b2
    variables:
      - key: ip_ru1-a1
        value: 192.168.2.5
      - key: external_ip_ru1-a1
        value: 84.201.***.**
      - key: ip_ru1-a2
        value: 192.168.2.15
      - key: external_ip_ru1-a2
        value: 130.193.**.**
      - key: ip_ru1-b1
        value: 192.168.1.5
      - key: external_ip_ru1-b1
        value: 84.201.***.**
      - key: ip_ru1-b2
        value: 192.168.1.15
      - key: external_ip_ru1-b2
        value: 84.201.***.*
    instance_template:
      name: sample-vm-{instance.tag}
      platform_id: standard-v2
      resources_spec:
        memory: 2G
        cores: 2
      boot_disk_spec:
        mode: READ_WRITE
        disk_spec:
          image_id: fd8dlvgiatiqd8tt2qke
          type_id: network-hdd
          size: 20g
      network_interface_specs:
        - subnet_ids:
            - e2l3qffk0h6t********
            - e9bijtoprmcu********
          primary_v4_address_spec:
            address: "{ip_{instance.tag}}"
            one_to_one_nat_spec:
              address: "{external_ip_{instance.tag}}"
    

    В данном примере приведена спецификация для создания группы ВМ фиксированного размера с фиксированными внутренними и публичными IP-адресами.

    Подробнее о параметрах спецификации группы ВМ см. в разделе Спецификация группы виртуальных машин в формате YAML.

  8. Создайте группу ВМ в каталоге по умолчанию:

    yc compute instance-group create --file specification.yaml
    

    Данная команда создаст группу ВМ со следующими характеристиками:

    • С именем my-vm-group-with-fixed-ips.
    • С OC Ubuntu 22.04 LTS.
    • С четырьмя ВМ — по две в зонах доступности ru-central1-a и ru-central1-b.
    • С двумя vCPU и двумя ГБ RAM.
    • С сетевым HDD-диском объемом 20 ГБ.
    • К каждой ВМ группы будут привязаны фиксированные внутренний и публичный IP-адреса.

Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

  1. Опишите в конфигурационном файле параметры ресурсов, которые вы хотите создать:

    resource "yandex_compute_instance_group" "ig-1" {
      name                = "fixed-ig"
      folder_id           = "<идентификатор_каталога>"
      service_account_id  = "${yandex_iam_service_account.ig-sa.id}"
      deletion_protection = false
      depends_on          = [yandex_resourcemanager_folder_iam_member.compute_editor]
      instance_template {
        name = "sample-vm-{instance.tag}"
        platform_id = "standard-v3"
        resources {
          memory = 2
          cores  = 2
        }
    
        boot_disk {
          mode = "READ_WRITE"
          initialize_params {
            image_id = "fd8dlvgiatiqd8tt2qke"
          }
        }
    
        network_interface {
          network_id         = "${yandex_vpc_network.ig-network.id}"
          subnet_ids         = ["${yandex_vpc_subnet.ig-subnet-a.id}", "${yandex_vpc_subnet.ig-subnet-b.id}"]
          nat                = true
          ip_address         = "{ip_{instance.tag}}"
          nat_ip_address     = "{external_ip_{instance.tag}}"
        }
    
        metadata = {
          user-data = "#cloud-config\n      datasource:\n       Ec2:\n        strict_id: false\n      ssh_pwauth: no\n      users:\n      - name: <имя_пользователя_ВМ>\n        sudo: ALL=(ALL) NOPASSWD:ALL\n        shell: /bin/bash\n        ssh_authorized_keys:\n        - <публичный_SSH-ключ>\n      runcmd: []"
        }
      }
    
      variables = {
        ip_ru1-a1 = "192.168.2.5"
        external_ip_ru1-a1 = "${yandex_vpc_address.external-address-a1.external_ipv4_address[0].address}"
        ip_ru1-a2 = "192.168.2.15"
        external_ip_ru1-a2 = "${yandex_vpc_address.external-address-a2.external_ipv4_address[0].address}"
        ip_ru1-b1 = "192.168.1.5"
        external_ip_ru1-b1 = "${yandex_vpc_address.external-address-b1.external_ipv4_address[0].address}"
        ip_ru1-b2 = "192.168.1.15"
        external_ip_ru1-b2 = "${yandex_vpc_address.external-address-b2.external_ipv4_address[0].address}"
      }
    
      scale_policy {
        fixed_scale {
          size = 4
        }
      }
    
      allocation_policy {
        zones = ["ru-central1-a","ru-central1-b"]
        instance_tags_pool {
          zone = "ru-central1-a"
          tags = ["ru1-a1","ru1-a2"]
        }
        instance_tags_pool {
          zone = "ru-central1-b"
          tags = ["ru1-b1","ru1-b2"]
        }
      }
    
      deploy_policy {
        max_unavailable = 1
        max_expansion   = 0
      }
    }
    
    resource "yandex_iam_service_account" "ig-sa" {
      name        = "instance-group-sa"
      description = "Сервисный аккаунт для управления группой ВМ."
    }
    
    resource "yandex_resourcemanager_folder_iam_member" "compute_editor" {
      folder_id  = "<идентификатор_каталога>"
      role       = "compute.editor"
      member     = "serviceAccount:${yandex_iam_service_account.ig-sa.id}"
      depends_on = [
        yandex_iam_service_account.ig-sa,
      ]
    }
    
    resource "yandex_vpc_network" "ig-network" {
      name = "ig-network"
    }
    
    resource "yandex_vpc_subnet" "ig-subnet-a" {
      name           = "ig-subnet-a"
      zone           = "ru-central1-a"
      network_id     = "${yandex_vpc_network.ig-network.id}"
      v4_cidr_blocks = ["192.168.2.0/24"]
    }
    
    resource "yandex_vpc_subnet" "ig-subnet-b" {
      name           = "ig-subnet-b"
      zone           = "ru-central1-b"
      network_id     = "${yandex_vpc_network.ig-network.id}"
      v4_cidr_blocks = ["192.168.1.0/24"]
    }
    
    resource "yandex_vpc_address" "external-address-a1" {
      name = "external-address-a1"
    
      external_ipv4_address {
        zone_id = "ru-central1-a"
      }
    }
    
    resource "yandex_vpc_address" "external-address-a2" {
      name = "external-address-a2"
    
      external_ipv4_address {
        zone_id = "ru-central1-a"
      }
    }
    
    resource "yandex_vpc_address" "external-address-b1" {
      name = "external-address-b1"
    
      external_ipv4_address {
        zone_id = "ru-central1-b"
      }
    }
    
    resource "yandex_vpc_address" "external-address-b2" {
      name = "external-address-b2"
    
      external_ipv4_address {
        zone_id = "ru-central1-b"
      }
    }
    

    Где:

    • yandex_compute_instance_group — описание группы ВМ:

      • Общая информация о группе ВМ:

        • name — имя группы ВМ.

        • folder_id — идентификатор каталога.

        • service_account_id — идентификатор сервисного аккаунта.

          Чтобы иметь возможность создавать, обновлять и удалять ВМ в группе назначьте сервисному аккаунту роль compute.editor.

        • deletion_protection — защита группы ВМ от удаления: true или false. Пока опция включена, группу ВМ удалить невозможно. Значение по умолчанию false.

      • instance_template — шаблон ВМ:

        • name — имя виртуальной машины, содержащее шаблон тега, например sample-vm-{instance.tag}. После подстановки значений тегов в этот шаблон имена ВМ будут выглядеть как sample-vm-ru1-a1, sample-vm-ru1-b2 и т.д.

        • platform_id — платформа.

        • resources — количество ядер vCPU и объем RAM, доступные ВМ. Значения должны соответствовать выбранной платформе.

        • boot_disk — настройки загрузочного диска:

          • mode — режим доступа к диску: READ_ONLY (чтение) или READ_WRITE (чтение и запись).
          • image_id — идентификатор выбранного образа. Вы можете получить идентификатор образа из списка публичных образов.
        • network_interface — настройка сети:

          • subnet_ids — список идентификаторов подсетей, в которых должны располагаться ВМ. Требуется указать одну подсеть в каждой из зон доступности, в которых будут созданы ВМ группы.
          • nat — параметр, задающий привязку публичного IP-адреса к ВМ. Возможные значения true и false.
          • ip_address — внутренний IP-адрес ВМ. В качестве значения используется шаблон, в который будет подставлено значение из переменной, заданной для данной ВМ в блоке variables.
          • nat_ip_address — публичный IP-адрес ВМ. В качестве значения используется шаблон, в который будет подставлено значение из переменной, заданной для данной ВМ в поле variables.
        • metadata — в метаданных передайте имя пользователя ВМ и открытый ключ для SSH-доступа этого пользователя на ВМ.

          Подробнее см. в разделе Метаданные виртуальной машины.

      • variables — переменные, назначаемые группе ВМ. Блок содержит список переменных в формате <имя> = <значение>. Через переменные с помощью шаблонов в группу ВМ передаются IP-адреса создаваемых ВМ:

        • имя переменной: должно быть в формате <префикс>_<тег>:

          • <префикс> определяет тип IP-адреса. Например, для внутренних IP-адресов можно использовать префикс ip, а для публичных IP-адресов — external_ip.

          • <тег> должен быть идентичен значению соответствующего тега, заданного для данной ВМ в поле allocation_policy, например ru1-a1.

        • значение переменной: внутренний или публичный IP-адрес создаваемой ВМ.

          Внутренние IP-адреса должны принадлежать диапазону IP-адресов, выделенному для указанной подсети в соответствующей зоне доступности.

          Если виртуальные машины группы будут создаваться без привязанных публичных IP-адресов, не задавайте переменные с префиксом external_ip.

        Подробнее об использовании переменных в шаблоне ВМ см. в разделе Переменные в шаблоне виртуальной машины.

      • Политики:

        • deploy_policy — политика развертывания ВМ в группе.
        • scale_policy — политика масштабирования ВМ в группе.
        • allocation_policy — политика распределения ВМ по зонам доступности и регионам:
          • zones — массив, содержащий идентификаторы зон доступности, в которых будут создаваться ВМ группы.

          • instance_tags_pool — список уникальных тегов, необходимых для привязки IP-адресов к ВМ группы. Задается отдельно для каждой зоны доступности, в которых будут создаваться ВМ группы.

            Значение тегов, заданных в массиве tags, участвует в формировании имен ВМ, а также в формировании переменных, содержащих IP-адреса ВМ. Количество тегов в массиве tags для каждой зоны доступности должно соответствовать количеству ВМ, создаваемых в этой зоне. Примеры возможных значений тегов: ru1-a1, ru1-b2 и т.п.

    • yandex_iam_service_account — описание сервисного аккаунта. Все операции в Instance Groups выполняются от имени сервисного аккаунта.

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

    • yandex_resourcemanager_folder_iam_member — описание прав доступа к каталогу, которому принадлежит сервисный аккаунт. Чтобы иметь возможность создавать, обновлять и удалять ВМ в группе, назначьте сервисному аккаунту роль compute.editor.

    • yandex_vpc_network — описание облачной сети.

    • yandex_vpc_subnet — описание подсетей, к которым будут подключены ВМ группы.

    • yandex_vpc_address — описание зарезервированного статического публичного IP-адреса.

      Примечание

      Если у вас уже есть подходящие ресурсы (сервисный аккаунт, облачная сеть и подсети, зарезервированные статические IP-адреса), описывать их повторно не нужно. Используйте их имена и идентификаторы в соответствующих параметрах.

    Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.

  2. Создайте ресурсы:

    1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

    2. Проверьте корректность конфигурационного файла с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

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

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

    После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.

Воспользуйтесь методом REST API create для ресурса InstanceGroup или вызовом gRPC API InstanceGroupService/Create.

Была ли статья полезна?

Предыдущая
Создать группу ВМ в группе размещения
Следующая
Создать группу ВМ с подключением к файловому хранилищу
Проект Яндекса
© 2025 ООО «Яндекс.Облако»