Создать виртуальную машину из публичного образа Linux

    В этом разделе приведена инструкция для создания виртуальной машины с операционной системой Linux. Для создания виртуальной машины на базе Windows воспользуйтесь инструкцией Создать виртуальную машину из публичного образа Windows.

    Чтобы создать виртуальную машину:

    Чтобы создать виртуальную машину:

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

    2. В списке сервисов выберите Compute Cloud.

    3. Нажмите кнопку Создать ВМ.

    4. В блоке Базовые параметры:

      • Введите имя и описание ВМ. Требования к имени:

        • Длина — от 3 до 63 символов.
        • Может содержать строчные буквы латинского алфавита, цифры и дефисы.
        • Первый символ — буква. Последний символ — не дефис.

        Примечание

        Имя виртуальной машины используется для генерации имени FQDN единожды — при создании ВМ. Если для вас важно имя FQDN, учитывайте это и задавайте нужное имя виртуальной машины при создании. Подробнее про генерацию имени FQDN читайте в разделе Имя хоста и FQDN.

      • (опционально) Выберите или создайте сервисный аккаунт. Использование сервисного аккаунта позволяет гибко настраивать права доступа к ресурсам.

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

    5. В блоке Публичные образы выберите один из образов и версию операционной системы на базе Linux.

    6. (опционально) В блоке Диски настройте загрузочный диск:

      • Укажите нужный размер диска.
      • Выберите тип диска.

      Если вы хотите создать виртуальную машину из существующего диска, в блоке Диски добавьте диск.

    7. В блоке Вычислительные ресурсы:

    8. В блоке Сетевые настройки:

      • Укажите идентификатор подсети или выберите облачную сеть из списка. Если сети нет, нажмите кнопку Создать новую сеть и создайте ее:
        • В открывшемся окне укажите имя новой сети и выберите, к какой подсети необходимо подключить виртуальную машину. У каждой сети должна быть как минимум одна подсеть (если подсети нет, создайте ее). Затем нажмите кнопку Создать.
      • В поле Публичный адрес выберите способ назначения адреса:
        • Автоматически — чтобы назначить случайный IP-адрес из пула адресов Яндекс.Облака.
        • Список — чтобы выбрать публичный IP-адрес из списка зарезервированных заранее статических адресов. Подробнее читайте в разделе Сделать динамический публичный IP-адрес статическим.
        • Без адреса — чтобы не назначать публичный IP-адрес.
      • (опционально) Выберите опцию защиты от DDoS-атак.
    9. В блоке Доступ укажите данные для доступа на виртуальную машину:

      • В поле Логин введите имя пользователя.

        Внимание

        Не используйте логин root или другие имена, зарезервированные операционной системой. Для выполнения операций, требующих прав суперпользователя, используйте команду sudo.

      • В поле SSH-ключ вставьте содержимое файла открытого ключа.

    10. Нажмите кнопку Создать ВМ.

    Виртуальная машина появится в списке. При создании виртуальной машине назначаются IP-адрес и имя хоста (FQDN).

    Если у вас еще нет интерфейса командной строки Яндекс.Облака, установите и инициализируйте его.

    По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name или --folder-id.

    1. Посмотрите описание команды CLI для создания виртуальной машины:

      $ yc compute instance create --help
      
    2. Подготовьте пару ключей (открытый и закрытый) для SSH-доступа на виртуальную машину.

    3. Выберите один из публичных образов на базе операционной системы Linux (например, CentOS 7).

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

      $ yc compute image list --folder-id standard-images
      +----------------------+-------------------------------------+--------------------------+----------------------+--------+
      |          ID          |                NAME                 |          FAMILY          |     PRODUCT IDS      | STATUS |
      +----------------------+-------------------------------------+--------------------------+----------------------+--------+
      ...
      | fdvk34al8k5nltb58shr | centos-7-1549279494                 | centos-7                 | dqni65lfhvv2den5gtv9 | READY  |
      | fdv7ooobjfl3ts9gqp0q | windows-2016-gvlk-1548913814        | windows-2016-gvlk        | dqnnc72gj2ist3ktjj1p | READY  |
      | fdv4f5kv5cvf3ohu4flt | ubuntu-1604-lts-1549457823          | ubuntu-1604-lts          | dqnnb6dc7640c5i968ro | READY  |
      ...
      +----------------------+-------------------------------------+--------------------------+----------------------+--------+
      
    4. Выберите подсеть:

      $ yc vpc subnet list
      +----------------------+-----------------------+----------------------+----------------+---------------+-----------------+
      |          ID          |         NAME          |      NETWORK ID      | ROUTE TABLE ID |     ZONE      |      RANGE      |
      +----------------------+-----------------------+----------------------+----------------+---------------+-----------------+
      | b0c6n43f9lgh3695v2k2 | default-ru-central1-c | enpe3m3fa00udao8g5lg |                | ru-central1-c | [10.130.0.0/24] |
      | e2l2da8a20b33g7o73bv | default-ru-central1-b | enpe3m3fa00udao8g5lg |                | ru-central1-b | [10.129.0.0/24] |
      | e9bnlm18l70ao30pvfaa | default-ru-central1-a | enpe3m3fa00udao8g5lg |                | ru-central1-a | [10.128.0.0/24] |
      +----------------------+-----------------------+----------------------+----------------+---------------+-----------------+
      
    5. Создайте виртуальную машину в каталоге по умолчанию. Укажите следующие параметры:

      • name — Имя виртуальной машины.

        Примечание

        Имя виртуальной машины используется для генерации имени FQDN единожды — при создании ВМ. Если для вас важно имя FQDN, учитывайте это и задавайте нужное имя виртуальной машины при создании. Подробнее про генерацию имени FQDN читайте в разделе Имя хоста и FQDN.

      • zone — зона доступности, которая соответствует выбранной подсети.

      • subnet-name — имя выбранной подсети.

      • image-familyсемейство образов, например centos-7. Эта опция позволит установить последнюю версию операционной системы из указанного семейства.

      • Публичный IP. Чтобы создать виртуальную машину без публичного IP, исключите опцию nat-ip-version=ipv4.

      $ yc compute instance create \
          --name first-instance \
          --zone ru-central1-a \
          --network-interface subnet-name=default-ru-central1-a,nat-ip-version=ipv4 \
          --create-boot-disk image-folder-id=standard-images,image-family=centos-7 \
          --ssh-key ~/.ssh/id_rsa.pub
      

      Будет создана виртуальная машина first-instance.

    Создайте виртуальную машину с помощью метода Create для ресурса Instance:

    1. Подготовьте пару ключей (открытый и закрытый) для SSH-доступа на виртуальную машину.

    2. Получите IAM-токен, используемый для аутентификации в примерах:

    3. Получите идентификатор каталога.

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

      • Если вы знаете семейство образа, получите информации о последнем образе в этом семействе:
        $ export IAM_TOKEN=CggaATEVAgA...
        $ export FAMILY=ubuntu-1804
        $ curl -H "Authorization: Bearer ${IAM_TOKEN}" \
          "https://compute.api.cloud.yandex.net/compute/v1/images:latestByFamily?folderId=standard-images&family=${FAMILY}"
        
      • Вы можете получить информацию об образе из списка публичных образов.
    5. Получите идентификатор подсети и идентификатор зоны доступности. В запросе укажите идентификатор каталога, в котором создана подсеть:

      $ export IAM_TOKEN=CggaATEVAgA...
      $ export FOLDER_ID=b1gvmob95yysaplct532
      $ curl -H "Authorization: Bearer ${IAM_TOKEN}" \
        "https://vpc.api.cloud.yandex.net/vpc/v1/subnets?folderId=${FOLDER_ID}"
      {
       "subnets": [
        {
         "v4CidrBlocks": [
          "10.130.0.0/24"
         ],
         "id": "b0c6n43ftldh30l0vfg2",
         "folderId": "b1gvmob95yysaplct532",
         "createdAt": "2018-09-23T12:15:00Z",
         "name": "default-ru-central1-c",
         "description": "Auto-created default subnet for zone ru-central1-c",
         "networkId": "enpe3m3fagludao8aslg",
         "zoneId": "ru-central1-c"
        },
        ...
       ]
      }
      
    6. Создайте файл с телом запроса на создание виртуальной машины, например body.json. Укажите следующие параметры:

      • folderId — идентификатор каталога.
      • name — имя, которое будет присвоено виртуальной машине при создании.
      • zoneId — зона доступности, которая соответствует выбранной подсети.
      • platformIdплатформа.
      • resourceSpec — ресурсы, доступные виртуальной машине. Значения должны соответствовать выбранной платформе.
      • metadata — в метаданных необходимо передать открытый ключ для SSH-доступа на виртуальную машину. Подробнее в разделе Метаданные виртуальной машины.
      • bootDiskSpec — настройки загрузочного диска. Укажите идентификатор выбранного образа и размер диска. Размер диска должен быть не меньше минимального размера диска, указанного в информации об образе.
      • networkInterfaceSpecs — настройки сети.
        • subnetId — идентификатор выбранной подсети.
        • primaryV4AddressSpec — IP-адрес, который будет присвоен виртуальной машине. Чтобы добавить публичный IP-адрес виртуальной машине, укажите:
          "primaryV4AddressSpec": {
              "oneToOneNatSpec": {
                "ipVersion": "IPV4"
              }
            }
          

      Подробнее про формат тела запроса в справочнике API.

      Пример файла body.json:

      {
        "folderId": "b1gvmob95yysaplct532",
        "name": "instance-demo-no-pwauth",
        "zoneId": "ru-central1-c",
        "platformId": "standard-v1",
        "resourcesSpec": {
          "memory": "2147483648",
          "cores": "2",
        },
        "metadata": {
          "user-data": "#cloud-config\nusers:\n  - name: user\n    groups: sudo\n    shell: /bin/bash\n    sudo: ['ALL=(ALL) NOPASSWD:ALL']\n    ssh-authorized-keys:\n      - ssh-rsa AAAAB3N... user@example.com"
        },
        "bootDiskSpec": {
          "diskSpec": {
            "size": "2621440000",
            "imageId": "fd8rc75pn12fe3u2dnmb"
          }
        },
        "networkInterfaceSpecs": [
          {
            "subnetId": "b0c6n43ftldh30l0vfg2",
            "primaryV4AddressSpec": {
              "oneToOneNatSpec": {
                "ipVersion": "IPV4"
              }
            }
          }
        ]
      }
      
    7. Создайте виртуальную машину:

      $ export IAM_TOKEN=CggaATEVAgA...
      $ curl -X POST \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer ${IAM_TOKEN}" \
        -d '@body.json' \
        https://compute.api.cloud.yandex.net/compute/v1/instances
      

    Если у вас ещё нет Terraform, установите его и настройте провайдер Яндекс.Облака.

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

      Примечание

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

      • yandex_compute_instance — описание виртуальной машины:
        • name — имя виртуальной машины.
        • platform_idплатформа.
        • resources — количество ядер vCPU и объем RAM, доступные виртуальной машине. Значения должны соответствовать выбранной платформе.
        • boot_disk — настройки загрузочного диска. Укажите идентификатор выбранного образа. Вы можете получить идентификатор образа из списка публичных образов.
        • network_interface — настройка сети. Укажите идентификатор выбранной подсети. Чтобы автоматически назначить виртуальной машине публичный IP-адрес, укажите nat = true.
        • metadata — в метаданных необходимо передать открытый ключ для SSH-доступа на виртуальную машину. Подробнее в разделе Метаданные виртуальной машины.
      • yandex_vpc_network — описание облачной сети.
      • yandex_vpc_subnet — описание подсети, к которой будет подключена виртуальная машина.

      Пример структуры конфигурационного файла:

      resource "yandex_compute_instance" "vm-1" {
      
        name        = "linux-vm"
        platform_id = "standard-v2"
      
        resources {
          cores  = <количество ядер vCPU>
          memory = <объем RAM в ГБ>
        }
      
        boot_disk {
          initialize_params {
            image_id = "<идентификатор образа>"
          }
        }
      
        network_interface {
          subnet_id = "${yandex_vpc_subnet.subnet-1.id}"
          nat       = true
        }
      
        metadata = {
          ssh-keys = "<имя пользователя>:<содержимое SSH-ключа>"
        }
      }
      
      resource "yandex_vpc_network" "network-1" {
        name = "network1"
      }
      
      resource "yandex_vpc_subnet" "subnet-1" {
        name       = "subnet1"
        zone       = "<зона доступности>"
        network_id = "${yandex_vpc_network.network-1.id}"
      }
      

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

    2. Проверьте корректность конфигурационных файлов.

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

      2. Выполните проверку с помощью команды:

        $ terraform plan
        

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

    3. Разверните облачные ресурсы.

      1. Если в конфигурации нет ошибок, выполните команду:

        $ terraform apply
        
      2. Подтвердите создание ресурсов.

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

    При создании виртуальной машине назначаются IP-адрес и доменное имя (FQDN).

    См. также