Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Compute Cloud
  • Yandex Container Solution
    • Все руководства
    • Настройка синхронизации часов с помощью NTP
    • Автомасштабирование группы ВМ для обработки сообщений из очереди
    • Обновление группы ВМ под нагрузкой
    • Развертывание Remote Desktop Gateway
    • Начало работы с Packer
    • Передача логов с ВМ в Yandex Cloud Logging
    • Сборка образа ВМ с набором инфраструктурных инструментов с помощью Packer
    • Миграция в Yandex Cloud с помощью Хайстекс Акура
    • Защита от сбоев с помощью Хайстекс Акура
    • Резервное копирование ВМ с помощью Хайстекс Акура
    • Развертывание отказоустойчивой архитектуры с прерываемыми ВМ
    • Настройка отказоустойчивой архитектуры в Yandex Cloud
    • Создание триггера для бюджетов, который вызывает функцию для остановки ВМ
    • Создание триггеров, которые вызывают функции для остановки ВМ и отправки уведомлений в Telegram
    • Создание веб-приложения на Python с использованием фреймворка Flask
    • Создание SAP-программы в Yandex Cloud
    • Развертывание сервера Minecraft в Yandex Cloud
    • Автоматизация сборки образов с помощью Jenkins и Packer
    • Создание тестовых виртуальных машин через GitLab CI
    • Высокопроизводительные вычисления (HPC) на прерываемых ВМ
    • Настройка SFTP-сервера на Centos 7
    • Развертывание параллельной файловой системы GlusterFS в высокодоступном режиме
    • Развертывание параллельной файловой системы GlusterFS в высокопроизводительном режиме
    • Резервное копирование в Object Storage с помощью Bacula
    • Построение пайплайна CI/CD в GitLab с использованием serverless-продуктов
    • Реализация защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Check Point NGFW
    • Сегментация облачной инфраструктуры с помощью решения Check Point Next-Generation Firewall
    • Настройка защищенного туннеля GRE поверх IPsec
    • Создание бастионного хоста
    • Реализация отказоустойчивых сценариев для сетевых виртуальных машин
    • Создание туннеля между двумя подсетями при помощи OpenVPN Access Server
    • Создание внешней таблицы на базе таблицы из бакета Object Storage с помощью конфигурационного файла
    • Настройка сетевой связности между подсетями BareMetal и Virtual Private Cloud
    • Работа со снапшотами в Managed Service for Kubernetes
      • Создать ВМ с Container Optimized Image
      • Создать ВМ с Container Optimized Image и дополнительным томом для Docker-контейнера
      • Создать ВМ с Container Optimized Image и несколькими Docker-контейнерами
      • Создать группу ВМ с Container Optimized Image
      • Создать группу ВМ с Container Optimized Image и несколькими Docker-контейнерами
      • Изменить ВМ с Container Optimized Image
      • Создать ВМ и группу ВМ с Container Optimized Image с помощью Terraform
    • Запуск языковой модели DeepSeek-R1 в кластере GPU
    • Запуск библиотеки vLLM с языковой моделью Gemma 3 на ВМ с GPU
    • Доставка USB-устройств на виртуальную машину или сервер BareMetal
  • Управление доступом
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

В этой статье:

  • Перед началом работы
  • Создание и запуск ВМ с образом Container Optimized Image
  • Создайте файлы конфигурации ВМ
  • Создайте ВМ с Container Optimized Image
  • Создание и запуск группы ВМ с образом Container Optimized Image
  • Создайте файлы конфигурации группы ВМ
  • Создайте группу ВМ с Container Optimized Image
  1. Практические руководства
  2. Container Optimized Image
  3. Создать ВМ и группу ВМ с Container Optimized Image с помощью Terraform

Создание ВМ и группы ВМ с Container Optimized Image с помощью Terraform

Статья создана
Yandex Cloud
Обновлена 13 февраля 2025 г.
  • Перед началом работы
  • Создание и запуск ВМ с образом Container Optimized Image
    • Создайте файлы конфигурации ВМ
    • Создайте ВМ с Container Optimized Image
  • Создание и запуск группы ВМ с образом Container Optimized Image
    • Создайте файлы конфигурации группы ВМ
    • Создайте группу ВМ с Container Optimized Image

Чтобы с помощью Terraform создать конфигурации и запустить виртуальную машину или группу виртуальных машин на базе образа Container Optimized Image, выполните следующие действия.

Перед началом работыПеред началом работы

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

В сценарии используется конфигурационный файл с названием example.tf, который находится в директории ~/cloud-terraform.

Создание и запуск ВМ с образом Container Optimized ImageСоздание и запуск ВМ с образом Container Optimized Image

Создайте файлы конфигурации ВМСоздайте файлы конфигурации ВМ

  1. Используйте образ Container Optimized Image из семейства образов Yandex Cloud. Для этого в конфигурационный файл example.tf добавьте строки:

    data "yandex_compute_image" "container-optimized-image" {
      family = "container-optimized-image"
    }
    
  2. Опишите ВМ, добавив в конфигурационный файл example.tf строки:

    resource "yandex_compute_instance" "instance-based-on-coi" {
      boot_disk {
        initialize_params {
          image_id = data.yandex_compute_image.container-optimized-image.id
        }
      }
      network_interface {
        subnet_id = "<идентификатор_подсети>"
        nat = true
      }
      resources {
        cores = 2
        memory = 2
      }
      metadata = {
        docker-container-declaration = file("${path.module}/declaration.yaml")
        user-data = file("${path.module}/cloud_config.yaml")
      }
    }
    

    Где subnet_id — идентификатор подсети.

    Если вы используете Docker Compose спецификацию, то ключ docker-container-declaration в metadata необходимо заменить на ключ docker-compose:

    metadata = {
      docker-compose = file("${path.module}/docker-compose.yaml")
      user-data = file("${path.module}/cloud_config.yaml")
    }
    
  3. Создайте файл спецификации облака cloud_config.yaml в директории ~/cloud-terraform. Опишите спецификацию:

    #cloud-config
    ssh_pwauth: no
    users:
      - name: yc-user
        sudo: ALL=(ALL) NOPASSWD:ALL
        shell: /bin/bash
        ssh_authorized_keys:
          - "<публичный_SSH-ключ>"
    

    Где ssh_authorized_keys — значение публичного SSH-ключа.

  4. Создайте файл спецификации Container Optimized Image с именем declaration.yaml в директории ~/cloud-terraform. Опишите спецификацию:

    spec:
      containers:
      - image: cr.yandex/yc/demo/coi:v1
        securityContext:
          privileged: false
        stdin: false
        tty: false
    
  5. Создайте файл output.tf в директории ~/cloud-terraform, чтобы отобразить публичный IP-адрес ВМ:

    output "external_ip" {
      value = yandex_compute_instance.instance-based-on-coi.network_interface.0.nat_ip_address
    }
    

Создайте ВМ с Container Optimized ImageСоздайте ВМ с Container Optimized Image

Запустите ВМ с Container Optimized Image, используя конфигурацию Terraform.

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

    1. В командной строке перейдите в директорию ~/cloud-terraform с конфигурационными файлами:

      cd /Users/<имя_пользователя>/cloud-terraform
      
    2. Выполните проверку с помощью команды:

      terraform plan
      

      Результат:

      Refreshing Terraform state in-memory prior to plan...
      The refreshed state will be used to calculate this plan, but will not be
      persisted to local or remote state storage.
      ...
      Note: You didn't specify an "-out" parameter to save this plan, so Terraform
      can't guarantee that exactly these actions will be performed if
      "terraform apply" is subsequently run.
      
  2. Разверните ресурсы в Yandex Cloud.

    1. Выполните команду:

      terraform apply
      

      Результат:

      data.yandex_compute_image.container-optimized-image: Refreshing state...
      
      An execution plan has been generated and is shown below.
      Resource actions are indicated with the following symbols:
      ...
        Terraform will perform the actions described above.
        Only 'yes' will be accepted to approve.
      
        Enter a value:
      
    2. Подтвердите создание ресурсов. Для этого введите значение yes:

      Enter a value: yes
      

      Результат:

      yandex_compute_instance.instance-based-on-coi: Creating...
      yandex_compute_instance.instance-based-on-coi: Still creating... [10s elapsed]
      yandex_compute_instance.instance-based-on-coi: Still creating... [20s elapsed]
      ...
      Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
      
      Outputs:
      
      external_ip = <публичный_IP-адрес>
      

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

  3. Проверьте ресурсы и их настройки в консоли управления.

  4. Подключитесь к ВМ с образом Container Optimized Image.

    1. Выполните команду:

      ssh yc-user@<публичный_IP-адрес>
      

      Результат:

      The authenticity of host '<публичный_IP-адрес> (<публичный_IP-адрес>)' can't be established.
      ECDSA key fingerprint is SHA256:JPq....
      Are you sure you want to continue connecting (yes/no/[fingerprint])?
      
    2. Подтвердите подключение к ВМ. Для этого введите значение yes:

      Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
      

      Результат:

      Warning: Permanently added '<публичный_IP-адрес>' (ECDSA) to the list of known hosts.
      Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-52-generic x86_64)
      
       * Documentation: https://help.ubuntu.com
      ...
      Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
      applicable law.
      
  5. Выполните HTTP-запрос к ВМ:

    curl <публичный_IP-адрес>
    

    Результат:

    <!DOCTYPE html>
    <html lang="en">
    <head>
     <meta http-equiv="refresh" content="3">
      <title>Yandex.Scale</title>
    </head>
    <body>
    <h1>Hello v1</h1>
    </body>
    </html>
    

Создание и запуск группы ВМ с образом Container Optimized ImageСоздание и запуск группы ВМ с образом Container Optimized Image

Создайте файлы конфигурации группы ВМСоздайте файлы конфигурации группы ВМ

  1. Сохраните конфигурационный файл с именем example.tf в директории ~/cloud-terraform:

    provider "yandex" {
      token     = "<OAuth-токен>"
      cloud_id  = "<идентификатор_облака>"
      folder_id = "<идентификатор_каталога>"
      zone      = "ru-central1-a"
    }
    data "yandex_compute_image" "container-optimized-image" {
      family = "container-optimized-image"
    }
    resource "yandex_compute_instance_group" "ig-with-coi" {
      name = "ig-with-coi"
      folder_id = "<идентификатор_каталога>"
      service_account_id = "<идентификатор_сервисного_аккаунта>"
      instance_template {
        platform_id = "standard-v3"
        resources {
          memory = 2
          cores  = 2
        }
        boot_disk {
          mode = "READ_WRITE"
          initialize_params {
            image_id = data.yandex_compute_image.container-optimized-image.id
          }
        }
        network_interface {
          network_id = "<идентификатор_сети>"
          subnet_ids = ["<идентификаторы_подсетей>"]
          nat = true
        }
        metadata = {
          docker-container-declaration = file("${path.module}/declaration.yaml")
          user-data = file("${path.module}/cloud_config.yaml")
        }
      }
      scale_policy {
        fixed_scale {
          size = 2
        }
      }
      allocation_policy {
        zones = ["<зоны_доступности>"]
      }
      deploy_policy {
        max_unavailable = 2
        max_creating = 2
        max_expansion = 2
        max_deleting = 2
      }
    }
    

    Где:

    • token — OAuth-токен для доступа к Yandex Cloud.
    • name — имя группы ВМ.
    • folder_id — идентификатор каталога.
    • instance_template.network_interface.network_id — идентификатор сети.
    • instance_template.network_interface.subnet_ids — список идентификаторов подсетей.
    • instance_template.service_account_id — идентификатор сервисного аккаунта, авторизованного для данной группы ВМ.
    • allocation_policy.zones — список зон доступности.
  2. Используйте файлы cloud_config.yaml и declaration.yaml из раздела Создайте файлы конфигурации ВМ.

  3. Создайте файл output.tf в директории ~/cloud-terraform, чтобы отобразить публичные IP-адреса каждой ВМ из группы:

    output "external_ip" {
     value = [yandex_compute_instance_group.ig-with-coi.instances[*].network_interface[0].nat_ip_address]
    }
    

Создайте группу ВМ с Container Optimized ImageСоздайте группу ВМ с Container Optimized Image

Запустите группу ВМ с Container Optimized Image, используя конфигурацию Terraform.

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

    1. В командной строке перейдите в директорию ~/cloud-terraform с конфигурационными файлами:

      cd /Users/<имя_пользователя>/cloud-terraform
      
    2. Выполните проверку с помощью команды:

      terraform plan
      

      Результат:

      Refreshing Terraform state in-memory prior to plan...
      The refreshed state will be used to calculate this plan, but will not be
      persisted to local or remote state storage.
      ...
      Note: You didn't specify an "-out" parameter to save this plan, so Terraform
      can't guarantee that exactly these actions will be performed if
      "terraform apply" is subsequently run.
      
  2. Разверните ресурсы в Yandex Cloud.

    1. Выполните команду:

      terraform apply
      

      Результат:

      data.yandex_compute_image.container-optimized-image: Refreshing state...
      
      An execution plan has been generated and is shown below.
      Resource actions are indicated with the following symbols:
      ...
        Terraform will perform the actions described above.
        Only 'yes' will be accepted to approve.
      
        Enter a value:
      
    2. Подтвердите создание ресурсов. Для этого введите значение yes:

      Enter a value: yes
      

      Результат:

      yandex_compute_instance_group.ig-with-coi: Creating...
      yandex_compute_instance_group.ig-with-coi: Still creating... [10s elapsed]
      yandex_compute_instance_group.ig-with-coi: Still creating... [20s elapsed]
      ...
      external_ip = [
        [
          "<публичный_IP-адрес_ВМ_1>",
          "<публичный_IP-адрес_ВМ_2>",
        ],
      ]
      

      В каталоге будут созданы требуемые ресурсы. При создании каждой ВМ назначаются публичный IP-адрес и имя хоста (FQDN).

  3. Проверьте ресурсы и их настройки в консоли управления.

  4. Подключитесь к одной из ВМ с образом Container Optimized Image.

    1. Выполните команду:

      ssh yc-user@<публичный_IP-адрес_ВМ_1>
      

      Результат:

      The authenticity of host '<публичный_IP-адрес_ВМ_1> (<публичный_IP-адрес_ВМ_1>)' can't be established.
      ECDSA key fingerprint is SHA256:JPq....
      Are you sure you want to continue connecting (yes/no/[fingerprint])?
      
    2. Подтвердите подключение к ВМ. Для этого введите значение yes:

      Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
      

      Результат:

      Warning: Permanently added '<публичный_IP-адрес_ВМ_1>' (ECDSA) to the list of known hosts.
      Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-52-generic x86_64)
      
       * Documentation: https://help.ubuntu.com
      ...
      Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
      applicable law.
      
  5. Выполните HTTP-запрос к одной из ВМ группы:

    curl <публичный_IP-адрес_ВМ_1>
    

    Результат:

    <!DOCTYPE html>
    <html lang="en">
    <head>
     <meta http-equiv="refresh" content="3">
      <title>Yandex.Scale</title>
    </head>
    <body>
    <h1>Hello v1</h1>
    </body>
    </html>
    

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

Предыдущая
Изменить ВМ с Container Optimized Image
Следующая
Безопасная передача пароля в скрипт инициализации
Проект Яндекса
© 2025 ООО «Яндекс.Облако»