[Документация Yandex Cloud](../../../index.md) > [Yandex Compute Cloud](../../index.md) > [Концепции](../index.md) > [Группы виртуальных машин](index.md) > Шаблон виртуальной машины

# Шаблон виртуальной машины

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

В CLI описание шаблона передается вместе с описанием [политик](policies/index.md) в виде YAML-файла при создании или изменении группы ВМ с помощью параметра `--file`. Таким образом, удобно передать значение из нескольких строк. Подробнее читайте в разделе [Создать группу виртуальных машин фиксированного размера](../../operations/instance-groups/create-fixed-group.md).

Вы можете задать переменные значения для шаблона ВМ. Подробнее читайте в разделе [Переменные в шаблоне виртуальной машины](variables-in-the-template.md).

## Вычислительные ресурсы {#types}

При описании шаблона, вы указываете, сколько вычислительных ресурсов будет выделено каждой виртуальной машине: количество и гарантированный уровень производительности ядер процессора (vCPU), количество памяти (RAM). Вы можете выбрать подходящее количество вычислительных ресурсов из расчета планируемой нагрузки. Подробнее читайте в разделе [Уровни производительности vCPU](../performance-levels.md).

Вы также можете указать в шаблоне, чтобы создавались [прерываемые](../preemptible-vm.md) виртуальные машины — они дешевле обычных. Автоматическое восстановление прерываемых ВМ будет происходить только, если в зоне доступности для этого достаточно вычислительных ресурсов. Если ресурсов недостаточно, Instance Groups продолжит автоматическое восстановление, когда появятся свободные ресурсы, но этот процесс может занять продолжительное время.

Для виртуальных машин в группе можно включить [программно ускоренную сеть](../software-accelerated-network.md). Тогда обработка сетевого трафика ВМ будет перенесена на дополнительные вычислительные ядра.

## Диски и файловые хранилища {#disks}

К каждой виртуальной машине в группе должен быть подключен как минимум один диск — загрузочный. Каждый загрузочный диск создается автоматически и подключается только к одной виртуальной машине при создании группы ВМ. Подробнее читайте в разделе [Диски](../disk.md).

Помимо этого, к каждой виртуальной машине можно подключить дополнительные диски. Вы можете создать дополнительный диск вместе с группой виртуальных машин. Новый диск можно создать пустым, восстановить из снимка или из образа. Подключать и отключать дополнительные диски можно только при создании или изменении группы. [Изменять дополнительные диски](deploy/secondary-disk.md) можно с помощью обновления [YAML-спецификации](specification.md).

{% note alert %}

При удалении виртуальной машины в группе будут удалены и ее диски. Виртуальная машина может быть удалена при [масштабировании](scale.md) или [автоматическом восстановлении](autohealing.md).

{% endnote %}

Кроме дисков, к виртуальным машинам в группе можно подключать [файловые хранилища](../filesystem.md). Файловые хранилища позволяют настроить работу ВМ со [Stateful-нагрузкой](stateful-workload.md) за счет сохранения состояний запущенных на ВМ приложений в независимом от группы ВМ хранилище.

После подключения файлового хранилища к ВМ группы [смонтируйте](../../operations/filesystem/attach-to-vm.md) его в операционной системе виртуальной машины. Подключать файловые хранилища можно с помощью [CLI](../../../cli/quickstart.md), [Terraform](../../../tutorials/infrastructure-management/terraform-quickstart.md) или [API](../../api-ref/index.md). Подробнее в разделе [Создать группу виртуальных машин с подключением к файловому хранилищу](../../operations/instance-groups/create-with-filesystem.md).

## Сеть {#network}

При создании группы вы можете:

* задать сеть для самой группы;
* задать подсети для каждой виртуальной машины группы.

У [сервисного аккаунта](../../../iam/concepts/users/service-accounts.md), от имени которого выполняются операции в Instance Groups, должна быть [роль](../../../vpc/security/index.md) для доступа к сети и подсетям, в которых размещается группа ВМ. Подробнее на странице [Доступ](access.md).

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

{% note info %}

В облачной сети помимо подсетей, созданных вами, могут размещаться подсети, созданные автоматически. Например служебные подсети [Cloud Functions](../../../functions/concepts/networking.md#user-network), [Serverless Containers](../../../serverless-containers/concepts/networking.md) и [API Gateway](../../../api-gateway/concepts/networking.md#user-network) или [зарезервированные адреса](../../../managed-kubernetes/concepts/network.md#network-resources) для подов и сервисов кластера Managed Service for Kubernetes.

{% endnote %}

Также для каждой виртуальной машины можно настроить публичный IP-адрес. Это позволит виртуальной машине взаимодействовать с другими сервисами в интернете. Подробнее читайте в разделе [Сетевые интерфейсы виртуальных машин](../network.md).

Вы можете задать [подходящие группы безопасности](../../../vpc/concepts/security-groups.md) в шаблоне или настроить их индивидуально для каждой виртуальной машины из группы.

## Метаданные {#metadata}

В шаблоне можно описать параметры сервиса метаданных и метаданные ВМ для машин в группе. Например, в ключе `user-data` можно описать пользователей системы, которых нужно добавить, или [скрипты для установки программного обеспечения](../../operations/vm-create/create-with-cloud-init-scripts.md#examples), которые нужно выполнить при создании новой машины. Подробнее о том, какие метаданные поддерживает Compute Cloud, читайте в разделе [Метаданные виртуальной машины](../vm-metadata.md).

## Описание шаблона в YAML-файле {#instance-template}

Шаблон представляет собой описание конфигурации базовой виртуальной машины и определяется в YAML-файле, в ключе `instance_template`.

Пример записи в YAML-файле:

```yaml
...
instance_template:
  platform_id: standard-v3
  resources_spec:
    memory: 2G
    cores: 2
    core_fraction: 20
  boot_disk_spec:
    mode: READ_WRITE
    disk_spec:
      image_id: jk9ib7ecsbrj********
      type_id: network-hdd
      size: 50G
      preserve_after_instance_delete: false
  secondary_disk_specs:
    - name: disk-2
      mode: READ_WRITE
      disk_spec:
        preserve_after_instance_delete: false
        type_id: network-hdd
        size: 21474836480
  filesystem_specs:
    - mode: READ_WRITE
      device_name: sample-fs
      filesystem_id: epdccsrlalon********
  network_interface_specs:
    - network_id: adv1rq7pmi05********
      subnet_ids:
        - u8zxv2v5f3rr********
      primary_v4_address_spec: {
        one_to_one_nat_spec: {
          ip_version: IPV4
        }
      }
      security_group_ids:
        - enps0ar5s3ti********
  network_settings:
    type: SOFTWARE_ACCELERATED
  placement_policy:
    placement_group_id: rmppvhrgm77g********
  service_account_id: ajegtlf2q28a********
  metadata_options:
    gce_http_endpoint: ENABLED
    aws_v1_http_endpoint: DISABLED
    gce_http_token: DISABLED
    aws_v1_http_token: DISABLED
  metadata:
    user-data: |-
      #cloud-config
      write_files:
        - path: /var/lib/cloud/scripts/per-boot/01-run-load-generator.sh
          permissions: '0555'
          content: |
            #!/bin/bash
            docker run -d --net=host -p 80:80 openresty/openresty:alpine
      users:
        - name: my-user
          groups: sudo
          shell: /bin/bash
          sudo: 'ALL=(ALL) NOPASSWD:ALL'
          ssh_authorized_keys:
            - ssh-ed25519 AAAAB3...
...
```

По умолчанию размер диска указывается в байтах. Вы можете указать другую единицу измерения с помощью соответствующего суффикса.

Суффикс | Приставка и множитель | Пример
----- | ----- | -----
`k` | кило- (2^10^) | `640k` = 640 × 2^10^ = `655360`
`m` | мега- (2^20^) | `48m` = 48 × 2^20^ = `50331648`
`g` | гига- (2^30^) | `10g` = 10 × 2^30^ = `10737418240`
`t` | тера- (2^40^) | `4t` = 4 × 2^40^ = `4398046511104`
`p` | пета- (2^50^) | `2p` = 2 × 2^50^ = `2251799813685248`

Ключи (в таблице приведены ключи, которые непосредственно определяют конфигурацию базовой виртуальной машины):

Ключ | Значение
----- | -----
`platform_id` | Идентификатор аппаратной платформы виртуальной машины.
`resources_spec.memory` | Объем памяти в байтах, доступный виртуальной машине. Максимальное значение — 274877906944 (275 ГБ).
`resources_spec.cores` | Количество ядер, доступных виртуальной машине. Значение зависит от типа [платформы](../vm-platforms.md).
`resources_spec.core_fraction` | Базовый [уровень производительности vCPU](../performance-levels.md).
`boot_disk_spec` | Параметры загрузочного диска.
`boot_disk_spec.disk_spec.mode` | Режим доступа к диску.</br>– `READ_ONLY` — доступ на чтение.</br>– `READ_WRITE` — доступ на чтение и запись.
`boot_disk_spec.disk_spec.image_id` | Идентификатор образа, из которого будет создан диск.
`boot_disk_spec.disk_spec.type_id` | Идентификатор типа диска. Чтобы получить список доступных типов дисков, используйте запрос [diskTypes](../../api-ref/DiskType/list.md).
`boot_disk_spec.disk_spec.size` | Размер диска в байтах. Допустимые значения — от 4194304 (4 МБ) до 4398046511104 (4 ТБ) включительно.
`boot_disk_spec.preserve_after_instance_delete` | Опция для сохранения диска после удаления виртуальной машины.</br>– `true` — сохранять диск после удаления виртуальной машины.</br>– `false` — удалять диск вместе с виртуальной машиной.
`secondary_disk_specs` | (опционально) Параметры дополнительных дисков.
`secondary_disk_specs.name` | (опционально) Имя дополнительного диска. В одной спецификации имена должны быть либо присвоены всем дополнительным дискам, либо не присвоены ни одному. Подробнее в разделе [Изменение дополнительных дисков в шаблоне виртуальной машины](deploy/secondary-disk.md).
`secondary_disk_specs.mode` | Режим доступа к диску.</br>– `READ_ONLY` — доступ на чтение.</br>– `READ_WRITE` — доступ на чтение и запись.
`secondary_disk_specs.disk_spec.preserve_after_instance_delete` | Опция для сохранения диска после удаления виртуальной машины.</br>– `true` — сохранять диск после удаления виртуальной машины.</br>– `false` — удалять диск вместе с виртуальной машиной.
`secondary_disk_specs.disk_spec.type_id` | Идентификатор типа диска. Чтобы получить список доступных типов дисков, используйте запрос [diskTypes](../../api-ref/DiskType/list.md).
`secondary_disk_specs.disk_spec.size` | Размер диска в байтах. Допустимые значения — от 4194304 (4 МБ) до 4398046511104 (4 ТБ) включительно.
`filesystem_specs` | (опционально) Параметры файлового хранилища.
`filesystem_specs.mode` | Режим доступа к файловому хранилищу: </br>– `READ_ONLY` — доступ на чтение.</br>– `READ_WRITE` — доступ на чтение и запись (по умолчанию).
`filesystem_specs.device_name` | Имя устройства, под которым файловое хранилище будет подключено к ВМ. Например: `sample-fs`. После подключения файлового хранилища к ВМ группы, [смонтируйте](../../operations/filesystem/attach-to-vm.md) его в операционной системе виртуальной машины. Подробнее в разделе [Создать группу виртуальных машин с подключением к файловому хранилищу](../../operations/instance-groups/create-with-filesystem.md).
`filesystem_specs.filesystem_id` | Идентификатор файлового хранилища.
`network_interface_specs.network_id` | Идентификатор облачной сети.
`network_interface_specs.subnet_ids` | Идентификаторы облачных подсетей.
`network_interface_specs.ip_version` | Версия IP для публичного IP-адреса.
`network_interface_specs.security_group_ids` | Идентификаторы групп безопасности.
`network_settings.type` | (опционально) Тип сети.</br>– `SOFTWARE_ACCELERATED` — программно ускоренная сеть.</br>– `STANDARD` — обычная сеть, параметр по умолчанию.
`metadata_options` | (опционально) [Параметры сервиса метаданных](../vm-metadata.md#metadata-formats).
`metadata_options.gce_http_endpoint` | (опционально) Доступ к метаданным с использованием формата Google Compute Engine.</br>– `enabled` — включен.</br>– `disabled` — выключен.
`metadata_options.gce_http_token` | (опционально) Доступ к учетным данным Identity and Access Management с использованием формата Google Compute Engine.</br>– `enabled` — включен.</br>– `disabled` — выключен.
`metadata` | (опционально) Метаданные для шаблонной ВМ. Подробнее в разделе [Метаданные виртуальной машины](../vm-metadata.md).
`metadata.user-data` | Дополнительные настройки для инициализации виртуальной машины. В приведенном примере настройки описаны для программы `cloud-init`.
`placement_policy ` | (опционально) Параметры [группы размещения ВМ](../placement-groups.md).
`placement_policy.placement_group_id` | Идентификатор группы размещения. ВМ будут размещаться на серверных стойках дата-центра согласно выбранной стратегии размещения:</br>– распределенное размещение (`spread`) — каждая ВМ будет гарантированно расположена на отдельной серверной стойке в одной из зон доступности.</br>– размещение разделами (`partition`) — ВМ будут равномерно распределены по разделам группы; ВМ из разных разделов будут гарантированно расположены в разных серверных стойках в одной из зон доступности.
`service_account_id` | (опционально) [Сервисный аккаунт](../../../iam/concepts/users/service-accounts.md), привязанный к виртуальным машинам группы и позволяющий им работать с ресурсами облака. Использование сервисного аккаунта позволяет гибко настраивать права доступа к ресурсам.</br>Чтобы добиться более гранулярного управления правами доступа, привязывайте к группе ВМ и к виртуальным машинам группы разные сервисные аккаунты с разными наборами разрешений.

О технических ограничениях компонента Instance Groups читайте в разделе [Квоты и лимиты в Compute Cloud](../limits.md).

## Примеры использования {#examples}

* [Работа с группой виртуальных машин с автоматическим масштабированием](../../tutorials/vm-autoscale/index.md)
* [Масштабирование группы виртуальных машин по расписанию](../../tutorials/vm-scale-scheduled/index.md)
* [Автоматическое масштабирование группы виртуальных машин для обработки сообщений из очереди Yandex Message Queue](../../tutorials/autoscale-monitoring.md)

#### Полезные ссылки {#see-also}

* [Метаданные виртуальной машины](../vm-metadata.md).
* [Создание виртуальной машины с пользовательским скриптом конфигурации](../../operations/vm-create/create-with-cloud-init-scripts.md).