Спецификация группы виртуальных машин в формате YAML
Группу ВМ можно создать или изменить по спецификации в формате YAML
- базовые атрибуты и настройки группы — имя, описание, метки, сервисный аккаунт и защита от удаления;
- шаблон ВМ и использующиеся в нем переменные;
- политики распределения, развертывания, масштабирования и восстановления;
- настройки балансировки трафика между ВМ с помощью Yandex Network Load Balancer или Yandex Application Load Balancer.
Примечание
Также группу ВМ можно создать с помощью Terraformyandex_compute_instance_group
Пример
По следующей спецификации можно создать автоматически масштабируемую группу ВМ, как в сценарии обработки сообщений из очереди Yandex Message Queue:
folder_id: b1gken0eihqn********
name: queue-autoscale-ig
instance_template:
platform_id: standard-v3
resources_spec:
memory: 2g
cores: 2
core_fraction: 100
boot_disk_spec:
mode: READ_WRITE
disk_spec:
type_id: network-hdd
size: 5g
image_id: fd8m5bal0bi9********
network_interface_specs:
- network_id: enpocgefm44f********
subnet_ids:
- e2ljvdp4j276********
primary_v4_address_spec: {
one_to_one_nat_spec: {
ip_version: IPV4
}
}
security_group_ids:
- enps0ar5s3ti********
filesystem_specs:
- mode: READ_WRITE
device_name: sample-fs
filesystem_id: epdccsrlalon********
service_account_id: aje1ki4ae68u********
network_settings:
type: STANDARD
scheduling_policy: {}
placement_policy:
placement_group_id: rmppvhrgm77g********
scale_policy:
auto_scale:
min_zone_size: 0
max_size: 5
measurement_duration: 60s
warmup_duration: 0s
stabilization_duration: 300s
initial_size: 1
auto_scale_type: REGIONAL
custom_rules:
- rule_type: WORKLOAD
metric_type: GAUGE
metric_name: queue.messages.stored_count
labels:
queue: queue-autoscale-queue
target: 5
service: message-queue
deploy_policy:
max_unavailable: 1
startup_duration: 0s
strategy: OPPORTUNISTIC
minimal_action: RESTART
auto_healing_policy:
auto_healing_action: RESTART
allocation_policy:
zones:
- zone_id: ru-central1-a
service_account_id: ajefnb8427bh********
Поля
Список, структура и англоязычные описания полей спецификации представлены:
- в спецификации структуры CreateInstanceGroupRequest
и используемых в ней структур в репозитории API на GitHub (формат Protobuf ); - в описании метода create ресурса
InstanceGroup
REST API (формат JSON ); - в описании вызова InstanceGroupService/Create gRPC API.
Справочники API генерируются из спецификаций, размещенных на GitHub.
Некоторые поля первого уровня и вложенные в них поля также описаны на русском языке в разделах документации:
- Шаблон виртуальной машины (поле
instance_template
). - Переменные в шаблоне виртуальной машины (поля
instance_template
иvariables
). - Политика распределения (поле
allocation_policy
). - Политика развертывания (поле
deploy_policy
). - Политика масштабирования (поле
scale_policy
). - Политика восстановления (поле
auto_healing_policy
). - Проверки и автоматическое восстановление виртуальных машин в группе (поле
health_checks_spec
). - Интеграция группы ВМ с Network Load Balancer или Application Load Balancer (поля
load_balancer_spec
иapplication_load_balancer_spec
).
Эти разделы обновляются вручную. Они могут быть менее актуальными, чем справочники API и спецификация на GitHub.
Преобразование JSON и Protobuf в YAML
Создать YAML-спецификацию по описанию в формате JSON или Protobuf можно по следующим правилам:
-
Объекты (JSON), структуры
message
и поля типаmap
(Protobuf) преобразуются в словарные объекты YAML (пары «ключ — значение»). Ключи объектов и названия полей преобразуются изlowerCamelCase
иCamelCase
вsnake_case
.JSONProtobufYAML"targetGroupSpec": { "name": "spec-example-tg", "description": "ALB target group for example instance group", "labels": { "foo": "bar", "environment": "production" } }
message TargetGroupSpec { string name = 1; string description = 2; map<string, string> labels = 3; }
target_group_spec: name: spec-example-tg description: ALB target group for example instance group labels: foo: bar environment: production
-
Массивы (JSON) и поля типа
repeated
(Protobuf) преобразуются в списки YAML.JSONProtobufYAML"variables": [ { "key": "foo", "value": "bar" }, { "key": "baz", "value": "foobar" } ]
message Variable { string key = 1; string value = 2; } repeated Variable variables = 1;
variables: - key: foo value: bar - key: baz value: foobar
-
Структуры типа
enum
(Protobuf) преобразуются в скалярные значения YAML — строки, соответствующие названиям полей в Protobuf.ProtobufYAMLmessage AttachedDiskSpec { enum Mode { MODE_UNSPECIFIED = 0; READ_ONLY = 1; READ_WRITE = 2; } Mode mode = 1; }
attached_disk_spec: mode: READ_WRITE
Формат значений
В формате YAML все значения в словарных объектах неявно являются строками, использовать для их обозначения кавычки необязательно. Содержимое строк должно соответствовать типам, указанным в справочнике API или в спецификации в формате Protobuf: string
, int64
, bool
и т. п.
int64
Суффиксы для типа В значениях типа int64
поддерживаются следующие суффиксы:
Суффикс | Приставка и множитель | Пример |
---|---|---|
k |
кило- (210) | 640k = 640 × 210 = 655360 |
m |
мега- (220) | 48m = 48 × 220 = 50331648 |
g |
гига- (230) | 10g = 10 × 230 = 10737418240 |
t |
тера- (240) | 4t = 4 × 240 = 4398046511104 |
p |
пета- (250) | 2p = 2 × 250 = 2251799813685248 |
Если в значении используется суффикс, перед ним должно стоять целое число.
boolean
Тип В полях типа bool
или boolean
поддерживаются все значения, перечисленные в спецификации формата YAML
- Истина:
y
,Y
,yes
,Yes
,YES
,true
,True
,TRUE
,on
,On
,ON
. - Ложь:
n
,N
,no
,No
,NO
,false
,False
,FALSE
,off
,Off
,OFF
.
Как создать или изменить группу ВМ по спецификации
Создать группу виртуальных машин по YAML-спецификации можно через интерфейс командной строки (CLI) или API. Подробнее см. в инструкциях: