Yandex Cloud
Поиск
Связаться с экспертомПопробовать бесплатно
  • Кейсы
  • Документация
  • Блог
  • Все сервисы
    • Cloud Interconnect
    • Cloud Backup
    • Compute Cloud
    • Object Storage
    • Managed Service for Kubernetes®
    • Managed Service for PostgreSQL
    • Managed Service for ClickHouse®
    • Monium
    • Cloud CDN
    • Network Load Balancer
    • Virtual Private Cloud
    • Cloud DNS
    • Application Load Balancer
    • Yandex Cloud Router
    • Managed Service for MySQL®
    • Managed Service for Valkey™
    • Managed Service for Apache Spark™
    • Managed Service for OpenSearch
    • Managed Service for Apache Kafka®
    • Data Transfer
    • Yandex MPP Analytics Engine for PostgreSQL
    • Managed Service for YDB
    • SpeechKit
    • Yandex Identity Hub
    • Key Management Service
    • Certificate Manager
    • Yandex Lockbox
    • Audit Trails
    • Container Registry
    • Managed Service for Prometheus®
    • Message Queue
    • Identity and Access Management
    • Yandex Cloud Console
    • Resource Manager
    • Yandex Cloud Billing
    • Cloud Apps
    • Yandex AI Studio
    • Yandex BareMetal
    • Smart Web Security
    • Security Deck
    • Yandex Cloud Video
    • Stackland
    • Yandex Managed Service for Apache Airflow®
    • Data Processing
    • Yandex MetaData Hub
    • Yandex WebSQL
    • DataLens
    • Yandex Search API
    • SpeechSense
    • DataSphere
    • Vision OCR
    • Translate
    • Cloud Registry
    • SmartCaptcha
    • Yandex SIEM
    • SourceCraft Code Assistant
    • Managed Service for GitLab
    • Cloud Functions
    • API Gateway
    • Yandex Cloud Postbox
    • IoT Core
    • Serverless Containers
    • Cloud Notification Service
  • Статус работы сервисов
  • Marketplace
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Искусственный интеллект
    • Безопасность
    • Инструменты DevOps
    • Бессерверные вычисления
    • Управление ресурсами
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
  • Кейсы
  • Документация
  • Блог
Проект Яндекса
© 2026 ТОО «Облачные Сервисы Казахстан»
Практические руководства
    • Все руководства
    • Архитектура и защита базового интернет-сервиса
    • Анализ поресурсной детализации расходов с помощью Object Storage
    • Получение сведений для запроса на включение ресурса в белый список Минцифры
      • Начало работы с Terraform
      • Источники данных Terraform
      • Загрузка состояний Terraform в Object Storage
      • Начало работы с Packer
      • Сборка образа ВМ с набором инфраструктурных инструментов с помощью Packer
      • Блокировка состояний Terraform с помощью Managed Service for YDB
      • Использование модулей Yandex Cloud в Terraform
      • Управление ресурсами Kubernetes с помощью провайдера Terraform
      • Создать ВМ и группу ВМ с Container Optimized Image с помощью Terraform
      • Передача логов через HTTP-вход Unified Agent в Cloud Logging
      • Запуск языковой модели DeepSeek-R1 в кластере GPU Compute Cloud
      • SLO-мониторинг веб-сервиса

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

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

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

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

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

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

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

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

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

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

В этом разделе вы создадите:

  • облачную сеть sample-network;
  • подсеть sample-network-subnet;
  • группу безопасности sample-sg;
  • виртуальную машину sample-coi-vm.

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

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

    terraform {
      required_providers {
        yandex = {
          source = "yandex-cloud/yandex"
        }
      }
      required_version = ">= 0.13"
    }
    
    provider "yandex" {
      cloud_id    = local.cloud_id
      folder_id   = local.folder_id
    }
    
    locals {
      cloud_id    = "<идентификатор_облака>"
      folder_id   = "<идентификатор_каталога>"
      zone        = "<зона_доступности>"
      cidr        = "<CIDR_подсети>"
    }
    
    # Создание сети
    
    resource "yandex_vpc_network" "coi-instance-network" {
      name = "sample-network"
    }
    
    # Создание подсети
    
    resource "yandex_vpc_subnet" "coi-instance-subnet-d" {
      name           = "sample-network-subnet"
      zone           = local.zone
      network_id     = yandex_vpc_network.coi-instance-network.id
      v4_cidr_blocks = [local.cidr]
    }
    
    # Создание группы безопасности
    
    resource "yandex_vpc_security_group" "coi-instance-sg" {
      name        = "sample-sg"
      network_id  = yandex_vpc_network.coi-instance-network.id
    
      ingress {
        protocol       = "TCP"
        description    = "http"
        v4_cidr_blocks = ["0.0.0.0/0"]
        port           = 80
      }
    
      ingress {
        protocol       = "TCP"
        description    = "https"
        v4_cidr_blocks = ["0.0.0.0/0"]
        port           = 443
      }
    
      ingress {
        protocol       = "TCP"
        description    = "ssh"
        v4_cidr_blocks = ["0.0.0.0/0"]
        port           = 22
      }
    
      egress {
        protocol       = "ANY"
        description    = "any"
        v4_cidr_blocks = ["0.0.0.0/0"]
        from_port      = 0
        to_port        = 65535
      }
    }
    

    Где locals — локальные переменные конфигурации, которые необходимо задать для создания инфраструктуры:

    • cloud_id — идентификатор облака, в котором вы будете создавать инфраструктуру.
    • folder_id — идентификатор каталога, в котором вы будете создавать инфраструктуру.
    • zone — зона доступности, в которой вы будете создавать инфраструктуру. Например: kz1-a.
    • cidr — CIDR подсети, в которой вы будете создавать виртуальную машину. Например: 192.168.1.0/24.
  2. Используйте образ Container Optimized Image из семейства образов Yandex Cloud. Для этого в конфигурационный файл example.tf добавьте строки:

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

    resource "yandex_compute_instance" "instance-based-on-coi" {
      name        = "sample-coi-vm"
      platform_id = "standard-v3"
      zone        = local.zone
    
      boot_disk {
        initialize_params {
          image_id = data.yandex_compute_image.container-optimized-image.id
        }
      }
      network_interface {
        subnet_id = yandex_vpc_subnet.coi-instance-subnet-d.id
        nat = true
        security_group_ids = [yandex_vpc_security_group.coi-instance-sg.id]
      }
      resources {
        cores = 2
        memory = 2
      }
      metadata = {
        docker-container-declaration = file("${path.module}/declaration.yaml")
        user-data = file("${path.module}/cloud_config.yaml")
      }
    }
    

    Если вы используете спецификацию 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")
    }
    
  4. В директории ~/cloud-terraform создайте файл спецификации облака cloud_config.yaml. В нем опишите спецификацию:

    #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-ключа.

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

    spec:
      containers:
      - image: cr.yandexcloud.kz/yc/demo/coi:v1
        securityContext:
          privileged: false
        stdin: false
        tty: false
    
  6. В директории ~/cloud-terraform создайте файл output.tf, чтобы отобразить публичный 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.

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

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

      cd /Users/<имя_пользователя>/cloud-terraform
      
    2. Выполните инициализацию Terraform:

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

      terraform plan
      

      Результат:

      data.yandex_compute_image.container-optimized-image: Reading...
      data.yandex_compute_image.container-optimized-image: Read complete after 0s [id=fd83vqe4111j********]
      
      Terraform used the selected providers to generate the following execution plan.
      Resource actions are indicated with the following symbols:
        + create
      
      Terraform will perform the following actions:
      ...
      Note: You didn't use the -out option to save this plan, so Terraform 
      can't guarantee to take exactly these actions 
      if you run "terraform apply" now.
      
  2. Разверните ресурсы в Yandex Cloud.

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

      terraform apply
      

      Результат:

      data.yandex_compute_image.container-optimized-image: Reading...
      data.yandex_compute_image.container-optimized-image: Read complete after 1s [id=fd83vqe4111j********]
      
      Terraform used the selected providers to generate the following execution plan. 
      Resource actions are indicated with the following symbols:
        + create
      
      Terraform will perform the following actions:
      ...
      Do you want to perform these actions?
        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 = 51.250.***.***
      

      В каталоге будут созданы требуемые ресурсы. При создании ВМ назначаются публичный 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 '178.154.***.**' (ED25519) to the list of known hosts.
      Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-194-generic x86_64)
      
      * Documentation: https://help.ubuntu.com
      ...
      Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
      applicable law.
      
    3. Отключитесь от ВМ:

      exit
      
  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>
    
  6. Удалите созданные ресурсы. Для этого выполните команду и подтвердите удаление:

    terraform destroy
    

    Результат:

    ...
    
    Destroy complete! Resources: 4 destroyed.
    

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

В этом разделе вы создадите:

  • облачную сеть sample-network;
  • подсети sample-network-subnet1 и sample-network-subnet2;
  • группу безопасности sample-sg;
  • сервисный аккаунт instance-group-sa с назначенными ролями compute.admin и vpc.publicAdmin;
  • группу виртуальных машин ig-with-coi.

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

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

    terraform {
      required_providers {
        yandex = {
          source = "yandex-cloud/yandex"
        }
      }
      required_version = ">= 0.13"
    }
    
    provider "yandex" {
      cloud_id    = local.cloud_id
      folder_id   = local.folder_id
    }
    
    locals {
      cloud_id    = "<идентификатор_облака>"
      folder_id   = "<идентификатор_каталога>"
      zone1       = "<зона_доступности_1>"
      zone2       = "<зона_доступности_2>"
      cidr1       = "<CIDR_подсети_1>"
      cidr2       = "<CIDR_подсети_2>"
    }
    
    # Создание сети
    
    resource "yandex_vpc_network" "coi-instance-network" {
      name = "sample-network"
    }
    
    # Создание подсетей
    
    resource "yandex_vpc_subnet" "coi-instance-subnet1" {
      name           = "sample-network-subnet1"
      zone           = local.zone1
      network_id     = yandex_vpc_network.coi-instance-network.id
      v4_cidr_blocks = [local.cidr1]
    }
    
    resource "yandex_vpc_subnet" "coi-instance-subnet2" {
      name           = "sample-network-subnet2"
      zone           = local.zone2
      network_id     = yandex_vpc_network.coi-instance-network.id
      v4_cidr_blocks = [local.cidr2]
    }
    
    # Создание группы безопасности
    
    resource "yandex_vpc_security_group" "coi-instance-sg" {
      name        = "sample-sg"
      network_id  = yandex_vpc_network.coi-instance-network.id
    
      ingress {
        protocol       = "TCP"
        description    = "http"
        v4_cidr_blocks = ["0.0.0.0/0"]
        port           = 80
      }
    
      ingress {
        protocol       = "TCP"
        description    = "https"
        v4_cidr_blocks = ["0.0.0.0/0"]
        port           = 443
      }
    
      ingress {
        protocol       = "TCP"
        description    = "ssh"
        v4_cidr_blocks = ["0.0.0.0/0"]
        port           = 22
      }
    
      egress {
        protocol       = "ANY"
        description    = "any"
        v4_cidr_blocks = ["0.0.0.0/0"]
        from_port      = 0
        to_port        = 65535
      }
    }
    
    # Создание сервисного аккаунта
    
    resource "yandex_iam_service_account" "ig-sa" {
      name = "instance-group-sa"
    }
    
    # Назначение сервисному аккаунту ролей compute.admin и vpc.publicAdmin
    
    resource "yandex_resourcemanager_folder_iam_member" "compute-admin" {
      folder_id = local.folder_id
      role      = "compute.admin"
      member    = "serviceAccount:${yandex_iam_service_account.ig-sa.id}"
    }
    
    resource "yandex_resourcemanager_folder_iam_member" "vpc-public-admin" {
      folder_id = local.folder_id
      role      = "vpc.publicAdmin"
      member    = "serviceAccount:${yandex_iam_service_account.ig-sa.id}"
    }
    
    # Получение информации об образе Container Optimized Image
    
    data "yandex_compute_image" "container-optimized-image" {
      family = "container-optimized-image"
    }
    
    # Создание группы виртуальных машин
    
    resource "yandex_compute_instance_group" "ig-with-coi" {
    
      depends_on = [
        yandex_resourcemanager_folder_iam_member.compute-admin
      ]
    
      name = "ig-with-coi"
      folder_id = local.folder_id
      service_account_id = yandex_iam_service_account.ig-sa.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 = yandex_vpc_network.coi-instance-network.id
          subnet_ids = [yandex_vpc_subnet.coi-instance-subnet1.id,yandex_vpc_subnet.coi-instance-subnet2.id]
          security_group_ids = [yandex_vpc_security_group.coi-instance-sg.id]
          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 = [local.zone1,local.zone2]
      }
      deploy_policy {
        max_unavailable = 2
        max_creating = 2
        max_expansion = 2
        max_deleting = 2
      }
    }
    

    Где locals — локальные переменные конфигурации, которые необходимо задать для создания инфраструктуры:

    • cloud_id — идентификатор облака, в котором вы будете создавать инфраструктуру.
    • folder_id — идентификатор каталога, в котором вы будете создавать инфраструктуру.
    • zone1, zone2 — зоны доступности, в которых вы будете создавать подсети и в которых будут распределяться виртуальные машины группы. Например: kz1-a и kz1-b.
    • cidr1, cidr2 — CIDR подсетей, в которых будут располагаться виртуальные машины группы. Например: 192.168.1.0/24 и 172.16.1.0/24.
  2. Используйте файлы cloud_config.yaml и declaration.yaml из раздела Создайте файлы конфигурации ВМ.

  3. В директории ~/cloud-terraform создайте файл output.tf, чтобы отобразить публичные 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.

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

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

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

      terraform plan
      

      Результат:

      data.yandex_compute_image.container-optimized-image: Reading...
      data.yandex_compute_image.container-optimized-image: Read complete after 0s [id=fd83vqe4111j********]
      
      Terraform used the selected providers to generate the following 
      execution plan. Resource actions are indicated with the
      following symbols:
        + create
      
      Terraform will perform the following actions:
      ...
      Note: You didn't use the -out option to save this plan, so Terraform can't 
      guarantee to take exactly these actions if you run "terraform apply" now.
      
  2. Разверните ресурсы в Yandex Cloud.

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

      terraform apply
      

      Результат:

      data.yandex_compute_image.container-optimized-image: Reading...
      data.yandex_compute_image.container-optimized-image: Read complete after 1s [id=fd83vqe4111j********]
      
      Terraform used the selected providers to generate the following 
      execution plan. Resource actions are indicated with the
      following symbols:
        + create
      
      Terraform will perform the following actions:
      ...
      Do you want to perform these actions?
        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: Creation complete after 1m4s [id=cl1cb44qg33q********]
      
      Apply complete! Resources: 8 added, 0 changed, 0 destroyed.
      
      Outputs:
      
      external_ip = [
        tolist([
          "51.250.***.***",
          "158.160.***.***",
        ]),
      ]
      

      В каталоге будут созданы требуемые ресурсы. При создании каждой ВМ назначаются публичный 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.
      
    3. Отключитесь от ВМ:

      exit
      
  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>
    
  6. Удалите созданные ресурсы. Для этого выполните команду и подтвердите удаление:

    terraform destroy
    

    Результат:

    ...
    
    Destroy complete! Resources: 8 destroyed.
    

Зона доступности — это инфраструктура внутри дата-центра, в котором размещается платформа Yandex Cloud. Подробнее читайте в разделе Зоны доступности.

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

Предыдущая
Управление ресурсами Kubernetes с помощью провайдера Terraform
Следующая
Обзор
Проект Яндекса
© 2026 ТОО «Облачные Сервисы Казахстан»