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

Создать виртуальную машину с метаданными из переменных окружения

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

С помощью Yandex Cloud CLI вы можете создать виртуальную машину, метаданные которой содержат значения, заданные в переменных окружения. Переданная в ключе user-data конфигурация метаданных обрабатывается запущенным на ВМ агентом cloud-init.

В приведенном примере будет создана виртуальная машина под управлением ОС Ubuntu 22.04 LTS с предустановленным веб-сервером Nginx. Значения имени локального пользователя и SSH-ключа при выполнении команды CLI будут переданы в метаданные виртуальной машины подстановкой из переменных USER_NAME и SSH_KEY, заданных в окружении, в котором выполняется эта команда.

Дополнительно в метаданные виртуальной машины будут переданы две переменные, заданные в секции data конфигурации: var1 со значением value1 и var2 со значением value2. Эти переменные и их значения будут доступны в каталоге user-data сервиса метаданных изнутри ВМ после ее создания.

Примечание

Чтобы создавать, изменять и редактировать ВМ, необходима минимальная роль compute.editor на каталоге. Для создания ВМ с лицензируемым образом дополнительно потребуется роль license-manager.viewer.

Чтобы создать виртуальную машину с метаданными из переменных окружения:

  1. Задайте переменные окружения, содержащие имя локального пользователя ВМ и его SSH-ключ, которые будут подставлены в метаданные ВМ при последующем выполнении команды Yandex Cloud CLI:

    export USER_NAME="<имя_пользователя>"
    export SSH_KEY="<SSH-ключ>"
    
  2. Создайте файл metadata.yaml и поместите в него следующую конфигурацию метаданных создаваемой ВМ:

    metadata.yaml

    #cloud-config
    datasource:
      Ec2:
        strict_id: false
      data:
        var1: value1
        var2: value2
    ssh_pwauth: no
    users:
    - name: $USER_NAME
      sudo: 'ALL=(ALL) NOPASSWD:ALL'
      shell: /bin/bash
      ssh_authorized_keys:
      - $SSH_KEY
    write_files:
      - path: "/usr/local/etc/startup.sh"
        permissions: "755"
        content: |
          #!/bin/bash
    
          apt-get update
          apt-get install -y nginx
          service nginx start
          sed -i -- "s/ nginx/ Yandex Cloud - $$HOSTNAME/" /var/www/html/index.nginx-debian.html
        defer: true
    runcmd:
      - ["/usr/local/etc/startup.sh"]
    packages:
      - yq
    
  3. Создайте виртуальную машину:

    CLI

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

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

    yc compute instance create \
      --name my-vm \
      --hostname <имя_хоста> \
      --zone <зона_доступности> \
      --network-interface subnet-name=<имя_подсети>,nat-ip-version=ipv4,security-group-ids=<идентификатор_группы_безопасности> \
      --create-boot-disk image-folder-id=standard-images,image-family=ubuntu-2204-lts \
      --metadata-from-file user-data="<путь_к_файлу_конфигурации>"
    

    Где:

    • --name — имя создаваемой ВМ. Например: my-vm.

    • --hostname — имя хоста создаваемой ВМ. Необязательный параметр. Если параметр не задан, в качестве имени хоста будет использовано значение идентификатора ВМ.

    • --zone — зона доступности, в которой будет находиться создаваемая ВМ.

    • --network-interface — настройки сетевого интерфейса создаваемой ВМ:

      • subnet-name — имя подсети, расположенной в зоне доступности, указанной в параметре --zone.
      • security-group-ids — идентификатор группы безопасности.
    • --metadata-from-file — ключ user-data, значением которого является путь к созданному ранее файлу с конфигурацией cloud-config в формате YAML. Например: --metadata-from-file user-data="/home/user/metadata.yaml".

      Примечание

      Обратите внимание, что при выполнении команды CLI для переменной HOSTNAME значение не будет подставлено в метаданные. Вместо этого при выполнении команды CLI в конфигурацию cloud-init будет передано имя переменной $HOSTNAME, а значение имени хоста создаваемой ВМ будет подставлено вместо этой переменной позднее при создании ВМ.

      Для этого в ключе user-data переменная HOSTNAME задана с двумя символами доллара: $$HOSTNAME. Подробнее см. в разделе Особенности передачи переменных окружения в метаданных через CLI.

    Результат
    done (36s)
    id: epd8m0fqvkuu********
    folder_id: b1gt6g8ht345********
    created_at: "2025-01-01T14:24:37Z"
    name: my-vm
    zone_id: ru-central1-b
    platform_id: standard-v2
    resources:
      memory: "2147483648"
      cores: "2"
      core_fraction: "100"
    status: RUNNING
    metadata_options:
      gce_http_endpoint: ENABLED
      aws_v1_http_endpoint: ENABLED
      gce_http_token: ENABLED
      aws_v1_http_token: DISABLED
    boot_disk:
      mode: READ_WRITE
      device_name: epd60hoo48qj********
      auto_delete: true
      disk_id: epd60hoo48qj********
    network_interfaces:
      - index: "0"
        mac_address: d0:0d:8b:01:fa:fd
        subnet_id: e2lqsms4cdl3********
        primary_v4_address:
          address: 192.168.15.14
          one_to_one_nat:
            address: 51.250.**.**
            ip_version: IPV4
        security_group_ids:
          - enpbtvidu0g0********
    serial_port_settings:
      ssh_authorization: OS_LOGIN
    gpu_settings: {}
    fqdn: my-web-server.ru-central1.internal
    scheduling_policy: {}
    network_settings:
      type: STANDARD
    placement_policy: {}
    hardware_generation:
      legacy_features:
        pci_topology: PCI_TOPOLOGY_V1
    

    Подробнее о команде yc compute instance create см. в справочнике CLI.

  4. Сохраните публичный IP-адрес созданной виртуальной машины в переменную EXT_IP:

    EXT_IP=$(yc compute instance get my-vm --jq '.network_interfaces[0].primary_v4_address.one_to_one_nat.address')
    
  5. Подключитесь к ВМ по SSH:

    ssh $USER_NAME@$EXT_IP
    
  6. Получите значения переданных ранее в метаданные переменных изнутри ВМ. Для этого в терминале ВМ выполните запросы:

    export var1=$(curl -sf -H Metadata-Flavor:Google 169.254.169.254/latest/user-data | yq .datasource.data.var1)
    export var2=$(curl -sf -H Metadata-Flavor:Google 169.254.169.254/latest/user-data | yq .datasource.data.var2)
    echo $var1 $var2
    

    Результат:

    value1 value2
    

Другие примеры конфигурации для user-data см. в разделе Примеры.

См. такжеСм. также

  • Метаданные виртуальной машины
  • Создать ВМ с доступом к секрету Yandex Lockbox
  • Создать виртуальную машину с пользовательским скриптом конфигурации

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

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