Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Object Storage
    • Все руководства
    • Получение статистики запросов к объекту с использованием S3 Select
    • Получение статистики посещения сайта с использованием S3 Select
    • Получение статистики запросов к объектам с использованием Yandex Query
    • Анализ поресурсной детализации расходов
    • Шифрование на стороне сервера
    • Интеграция L7-балансировщика с CDN и Object Storage
    • Сине-зеленое и канареечное развертывание версий сервиса
    • Анализ логов с использованием DataLens
    • Монтирование бакетов к файловой системе хостов Yandex Data Processing
    • Использование Object Storage в Yandex Data Processing
    • Импорт данных из Object Storage, обработка и экспорт в Managed Service for ClickHouse®
    • Подключение бакета как диска в Windows
    • Миграция данных из Yandex Data Streams с помощью Yandex Data Transfer
    • Использование гибридного хранилища в Yandex Managed Service for ClickHouse®
    • Загрузка данных из Yandex Managed Service for OpenSearch в Yandex Object Storage с помощью Yandex Data Transfer
    • Автоматическое копирование объектов из бакета в бакет
    • Регулярное асинхронное распознавание аудиофайлов в бакете
    • Обучение модели в Yandex DataSphere на данных из Object Storage
    • Подключение к Object Storage из VPC
    • Перенос данных в Yandex Managed Service for PostgreSQL с использованием Yandex Data Transfer
    • Загрузка данных в Yandex Managed Service for Greenplum® с помощью Yandex Data Transfer
    • Загрузка данных в Yandex Managed Service for ClickHouse® с помощью Yandex Data Transfer
    • Загрузка данных в Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Обмен данными между Yandex Managed Service for ClickHouse® и Yandex Data Processing
    • Загрузка данных из Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Хостинг статического сайта на фреймворке Gatsby в Object Storage
    • Миграция базы данных из Managed Service for PostgreSQL в Object Storage
    • Обмен данными между Yandex Managed Service for ClickHouse® и Yandex Data Processing
    • Импорт данных из Yandex Managed Service for PostgreSQL в Yandex Data Processing с помощью Sqoop
    • Импорт данных из Yandex Managed Service for MySQL® в Yandex Data Processing с помощью Sqoop
    • Миграция данных из Yandex Object Storage в Yandex Managed Service for MySQL® с помощью Yandex Data Transfer
    • Миграция базы данных из Yandex Managed Service for MySQL® в Yandex Object Storage
    • Выгрузка данных Greenplum® в холодное хранилище Yandex Object Storage
    • Загрузка данных из Яндекс Директ в витрину Yandex Managed Service for ClickHouse® с использованием Yandex Cloud Functions, Yandex Object Storage и Yandex Data Transfer
    • Миграция данных из Elasticsearch в Yandex Managed Service for OpenSearch
    • Загрузка состояний Terraform в Object Storage
    • Блокировка состояний Terraform с помощью Managed Service for YDB
    • Визуализация данных Yandex Query
    • Публикация обновлений для игр
    • Резервное копирование ВМ с помощью Хайстекс Акура
    • Резервное копирование в Object Storage с помощью CloudBerry Desktop Backup
    • Резервное копирование в Object Storage через Duplicati
    • Резервное копирование в Object Storage с помощью Bacula
    • Резервное копирование в Object Storage с помощью Veeam Backup
    • Резервное копирование в Object Storage с помощью Veritas Backup Exec
    • Резервное копирование кластера Managed Service for Kubernetes в Object Storage
    • Разработка пользовательской интеграции в API Gateway
    • Сокращатель ссылок
    • Хранение журналов работы приложения
    • Разработка навыка Алисы и сайта с авторизацией
    • Создание интерактивного serverless-приложения с использованием WebSocket
    • Развертывание веб-приложения с использованием Java Servlet API
    • Разработка Telegram-бота
    • Репликация логов в Object Storage с помощью Fluent Bit
    • Репликация логов в Object Storage с помощью Data Streams
    • Загрузка аудитных логов в SIEM ArcSight
    • Загрузка аудитных логов в SIEM Splunk
    • Создание сервера MLFlow для логирования экспериментов и артефактов
    • Работа с данными с помощью Yandex Query
    • Федеративные запросы к данным с помощью Query
    • Распознавание архива изображений в Vision OCR
    • Конвертация видео в GIF на Python
    • Автоматизация задач с помощью Managed Service for Apache Airflow™
    • Обработка файлов детализации в сервисе Yandex Cloud Billing
    • Развертывание веб-приложения с JWT-авторизацией в API Gateway и аутентификацией в Firebase
    • Поиск событий Yandex Cloud в Yandex Query
    • Поиск событий Yandex Cloud в Object Storage
    • Создание внешней таблицы на базе таблицы из бакета с помощью конфигурационного файла
    • Миграция базы данных из Google BigQuery в Managed Service for ClickHouse®
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Логи бакета
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы

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

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте сервисный аккаунт и статический ключ доступа
  • Создайте бакет
  • Установите и настройте Terraform
  • Установите Terraform
  • Получите данные для аутентификации
  • Создайте файл конфигурации Terraform
  • Настройте провайдер
  • Настройте бэкенд
  • Разверните конфигурацию
  • Проверьте сохраненное состояние
  • Получите состояние из бэкенда
  • Удалите созданные ресурсы
  • См. также
  1. Практические руководства
  2. Загрузка состояний Terraform в Object Storage

Загрузка состояний Terraform в Yandex Object Storage

Статья создана
Yandex Cloud
Улучшена
Обновлена 21 апреля 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Создайте сервисный аккаунт и статический ключ доступа
    • Создайте бакет
  • Установите и настройте Terraform
    • Установите Terraform
    • Получите данные для аутентификации
    • Создайте файл конфигурации Terraform
    • Настройте провайдер
  • Настройте бэкенд
  • Разверните конфигурацию
  • Проверьте сохраненное состояние
  • Получите состояние из бэкенда
  • Удалите созданные ресурсы
  • См. также

Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.

Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

Подробнее о Terraform читайте в документации.

В инструкции описываются шаги загрузки состояния Terraform в Object Storage.

Состояние Terraform описывает текущую развернутую инфраструктуру и хранится в файлах с расширением .tfstate. Файл состояния создается после развертывания инфраструктуры и может быть сразу загружен в Object Storage. Загруженный файл состояния будет обновляться после изменений созданной инфраструктуры.

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

Чтобы настроить хранение состояний Terraform в Object Storage и использовать его для создания новых ресурсов:

  1. Подготовьте облако к работе.
  2. Необходимые платные ресурсы.
  3. Установите и настройте Terraform.
  4. Настройте бэкенд.
  5. Разверните конфигурацию.
  6. Проверьте сохраненное состояние.
  7. Получите состояние из бэкенда.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работеПодготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

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

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки инфраструктуры для загрузки состояний Terraform в Yandex Object Storage входит плата за хранение данных (см. тарифы Object Storage).

В качестве примера инфраструктуры, разворачиваемой через Terraform, в руководстве будут созданы три ВМ с публичными IP-адресами, виртуальная сеть и две подсети. В стоимость поддержки этой инфраструктуры входят:

  • Плата за диски и постоянно запущенные ВМ (см. тарифы Yandex Compute Cloud).
  • Плата за использование динамических публичных IP-адресов (см. тарифы Yandex Virtual Private Cloud).

Создайте сервисный аккаунт и статический ключ доступаСоздайте сервисный аккаунт и статический ключ доступа

  1. Создайте сервисный аккаунт с ролью editor на каталог, указанный в настройках провайдера.
  2. Получите статический ключ доступа. Сохраните идентификатор ключа и секретный ключ — они понадобятся в следующих разделах инструкции.

Создайте бакетСоздайте бакет

Создайте бакет с ограниченным доступом. В нем будет храниться файл состояния Terraform.

Установите и настройте TerraformУстановите и настройте Terraform

Установите TerraformУстановите Terraform

Windows
Linux
macOS

Используйте один из способов:

  • Скачайте дистрибутив Terraform и установите его согласно инструкции.

  • Установите Terraform с помощью пакетного менеджера Chocolatey, используя команду:

    choco install terraform
    

Скачайте дистрибутив Terraform и установите его согласно инструкции.

Используйте один из способов:

  • Скачайте дистрибутив Terraform и установите его согласно инструкции.

  • Установите Terraform с помощью пакетного менеджера Homebrew, используя команду:

    brew install terraform
    

Получите данные для аутентификацииПолучите данные для аутентификации

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

Также вы можете использовать Terraform от имени аккаунта на Яндексе или федеративного аккаунта, однако этот способ является менее безопасным. Подробности см. в конце раздела.

  1. Если у вас еще нет интерфейса командной строки Yandex Cloud, установите его.

  2. Настройте профиль CLI для выполнения операций от имени сервисного аккаунта:

    CLI
    1. Создайте авторизованный ключ для сервисного аккаунта и запишите его файл:

      yc iam key create \
        --service-account-id <идентификатор_сервисного_аккаунта> \
        --folder-name <имя_каталога_с_сервисным_аккаунтом> \
        --output key.json
      

      Где:

      • service-account-id — идентификатор сервисного аккаунта.
      • folder-name — имя каталога, в котором создан сервисный аккаунт.
      • output — имя файла с авторизованным ключом.

      Результат:

      id: aje8nn871qo4********
      service_account_id: ajehr0to1g8b********
      created_at: "2022-09-14T09:11:43.479156798Z"
      key_algorithm: RSA_2048
      
    2. Создайте профиль CLI для выполнения операций от имени сервисного аккаунта. Укажите имя профиля:

      yc config profile create <имя_профиля>
      

      Результат:

      Profile 'sa-terraform' created and activated
      
    3. Задайте конфигурацию профиля:

      yc config set service-account-key key.json
      yc config set cloud-id <идентификатор_облака>
      yc config set folder-id <идентификатор_каталога>
      

      Где:

      • service-account-key — файл с авторизованным ключом сервисного аккаунта.
      • cloud-id — идентификатор облака.
      • folder-id — идентификатор каталога.
  3. Добавьте аутентификационные данные в переменные окружения:

    Bash
    PowerShell
    export YC_TOKEN=$(yc iam create-token)
    export YC_CLOUD_ID=$(yc config get cloud-id)
    export YC_FOLDER_ID=$(yc config get folder-id)
    

    Где:

    • YC_TOKEN — IAM-токен.
    • YC_CLOUD_ID — идентификатор облака.
    • YC_FOLDER_ID — идентификатор каталога.
    $Env:YC_TOKEN=$(yc iam create-token)
    $Env:YC_CLOUD_ID=$(yc config get cloud-id)
    $Env:YC_FOLDER_ID=$(yc config get folder-id)
    

    Где:

    • YC_TOKEN — IAM-токен.
    • YC_CLOUD_ID — идентификатор облака.
    • YC_FOLDER_ID — идентификатор каталога.

    Примечание

    Время жизни IAM-токена — не больше 12 часов, но рекомендуется запрашивать его чаще, например каждый час.

Управление ресурсами от имени аккаунта на Яндексе или федеративного аккаунта

Важно

Управление ресурсами от имени аккаунта на Яндексе или федеративного аккаунта пользователя является менее безопасным, чем использование сервисного аккаунта.

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

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

Если вы используете федеративный аккаунт, аутентифицируйтесь в CLI от имени федеративного пользователя.

Добавьте аутентификационные данные в переменные окружения:

Bash
PowerShell
export YC_TOKEN=$(yc iam create-token)
export YC_CLOUD_ID=$(yc config get cloud-id)
export YC_FOLDER_ID=$(yc config get folder-id)

Где:

  • YC_TOKEN — IAM-токен.
  • YC_CLOUD_ID — идентификатор облака.
  • YC_FOLDER_ID — идентификатор каталога.
$Env:YC_TOKEN=$(yc iam create-token)
$Env:YC_CLOUD_ID=$(yc config get cloud-id)
$Env:YC_FOLDER_ID=$(yc config get folder-id)

Где:

  • YC_TOKEN — IAM-токен.
  • YC_CLOUD_ID — идентификатор облака.
  • YC_FOLDER_ID — идентификатор каталога.

Примечание

Время жизни IAM-токена — не больше 12 часов, но рекомендуется запрашивать его чаще, например каждый час.

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

  1. Создайте директорию с произвольным названием, например cloud-terraform. В ней будут храниться конфигурационные файлы Terraform.
  2. Создайте в этой директории конфигурационный файл с расширением .tf, например example.tf.

Настройте провайдерНастройте провайдер

Примечание

Настройки применимы для Terraform 0.13 и более поздних версий. Рекомендуется использовать последнюю стабильную версию Terraform.

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

    Linux/macOS
    Windows
    mv ~/.terraformrc ~/.terraformrc.old
    
    mv $env:APPDATA/terraform.rc $env:APPDATA/terraform.rc.old
    
  2. Укажите источник, из которого будет устанавливаться провайдер.

    Linux/macOS
    Windows

    Откройте файл конфигурации Terraform CLI:

    nano ~/.terraformrc
    

    Примечание

    Файл .terraformrc должен располагаться в корне домашней папки пользователя, например, /home/user/ или /User/user/.

    Откройте файл конфигурации Terraform CLI terraform.rc в папке %APPDATA% вашего пользователя.

    Чтобы узнать абсолютный путь к папке %APPDATA%, выполните команду echo %APPDATA% для cmd или $env:APPDATA для PowerShell.

    Добавьте в него следующий блок:

    provider_installation {
      network_mirror {
        url = "https://terraform-mirror.yandexcloud.net/"
        include = ["registry.terraform.io/*/*"]
      }
      direct {
        exclude = ["registry.terraform.io/*/*"]
      }
    }
    

    Подробнее о настройках зеркал см. в документации.

  3. В начале конфигурационного файла .tf добавьте следующие блоки:

    terraform {
      required_providers {
        yandex = {
          source = "yandex-cloud/yandex"
        }
      }
      required_version = ">= 0.13"
    }
    
    provider "yandex" {
      zone = "<зона_доступности_по_умолчанию>"
    }
    

    Где:

    • source — глобальный адрес источника провайдера.
    • required_version — минимальная версия Terraform, с которой совместим провайдер.
    • provider — название провайдера.
    • zone — зона доступности, в которой по умолчанию будут создаваться все облачные ресурсы.
  4. Выполните команду terraform init в папке с конфигурационным файлом .tf. Эта команда инициализирует провайдеров, указанных в конфигурационных файлах, и позволяет работать с ресурсами и источниками данных провайдера.

Если провайдер не установился, создайте обращение в поддержку с именем и версией провайдера.

Если вы использовали файл .terraform.lock.hcl, перед инициализацией выполните команду terraform providers lock, указав адрес зеркала, откуда будет загружаться провайдер, и платформы, на которых будет использоваться конфигурация:

terraform providers lock -net-mirror=https://terraform-mirror.yandexcloud.net -platform=<название_платформы_1> -platform=<название_платформы_2> yandex-cloud/yandex

Где:

  • -net-mirror — адрес зеркала, откуда будет загружаться провайдер.
  • -platform — платформы, на которых будет использоваться конфигурация. Возможные значения:
    • windows_amd64 — 64-bit Windows.
    • linux_amd64 — 64-bit Linux.
    • darwin_arm64 — 64-bit macOS.

Если вы использовали модули Terraform, сначала выполните terraform init, затем удалите lock-файл, а затем выполните команду terraform providers lock.

Более подробную информацию о команде terraform providers lock см. в документации Terraform.

Настройте бэкендНастройте бэкенд

Примечание

Настройки бэкенда применимы для Terraform 1.6.3 и более поздних версий.

  1. Добавьте в переменные окружения идентификатор ключа и секретный ключ, полученные ранее:

    Bash
    PowerShell
    export ACCESS_KEY="<идентификатор_ключа>"
    export SECRET_KEY="<секретный_ключ>"
    
    $ACCESS_KEY="<идентификатор_ключа>"
    $SECRET_KEY="<секретный_ключ>"
    
  2. Добавьте в конфигурационный файл настройки провайдера и бэкенда:

    terraform {
      required_providers {
        yandex = {
          source = "yandex-cloud/yandex"
        }
      }
    
      backend "s3" {
        endpoints = {
          s3 = "https://storage.yandexcloud.net"
        }
        bucket = "<имя_бакета>"
        region = "ru-central1"
        key    = "<путь_к_файлу_состояния_в_бакете>/<имя_файла_состояния>.tfstate"
    
        skip_region_validation      = true
        skip_credentials_validation = true
        skip_requesting_account_id  = true # Необходимая опция Terraform для версии 1.6.1 и старше.
        skip_s3_checksum            = true # Необходимая опция при описании бэкенда для Terraform версии 1.6.3 и старше.
    
      }
    }
    
    provider "yandex" {
      zone      = "<зона_доступности_по_умолчанию>"
    }
    

    Подробнее о бэкенде для хранения состояний читайте на сайте Terraform.

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

    terraform init -backend-config="access_key=$ACCESS_KEY" -backend-config="secret_key=$SECRET_KEY"
    

Разверните конфигурациюРазверните конфигурацию

В этом примере будут созданы две виртуальные машины: terraform1 и terraform2. Они будут подключены к подсети subnet-1 в зоне доступности ru-central1-d. Подсеть будет принадлежать облачной сети network-1.

У ВМ будут разные количества ядер и объемы памяти: 1 ядро и 2 ГБ оперативной памяти у terraform1 и 2 ядра и 4 ГБ оперативной памяти у terraform2. ВМ автоматически получат публичные IP-адреса и внутренние IP-адреса из диапазона 192.168.10.0/24 в подсети subnet-1. На ВМ будет установлена операционная система Ubuntu и размещена публичная часть ключа для доступа к ВМ по SSH.

  1. Сохраните следующую конфигурацию в файл example.tf:

    terraform {
      required_providers {
        yandex = {
          source = "yandex-cloud/yandex"
        }
      }
    
      backend "s3" {
        endpoints = {
          s3 = "storage.yandexcloud.net"
        }
        bucket = "<имя_бакета>"
        region = "ru-central1"
        key    = "<путь_к_файлу_состояния_в_бакете>/<имя_файла_состояния>.tfstate"
    
        skip_region_validation      = true
        skip_credentials_validation = true
        skip_requesting_account_id  = true # необходимая опция при описании бэкенда для Terraform версии 1.6.1 и старше.
        skip_s3_checksum            = true # необходимая опция при описании бэкенда для Terraform версии 1.6.3 и старше.
    
      }
    }
    
    provider "yandex" {
      zone      = "ru-central1-d"
    }
    
    resource "yandex_compute_image" "ubuntu_2004" {
      source_family = "ubuntu-2004-lts"
    }
    
    resource "yandex_compute_disk" "boot-disk-vm1" {
      name     = "boot-disk-1"
      type     = "network-hdd"
      zone     = "ru-central1-d"
      size     = "20"
      image_id = yandex_compute_image.ubuntu_2004.id
    }
    
    resource "yandex_compute_disk" "boot-disk-vm2" {
      name     = "boot-disk-2"
      type     = "network-hdd"
      zone     = "ru-central1-d"
      size     = "20"
      image_id = yandex_compute_image.ubuntu_2004.id
    }
    
    resource "yandex_compute_instance" "vm-1" {
      name = "terraform1"
    
      resources {
        cores  = 2
        memory = 2
      }
    
      boot_disk {
        disk_id = yandex_compute_disk.boot-disk-vm1.id
      }
    
      network_interface {
        subnet_id = yandex_vpc_subnet.subnet-1.id
        nat       = true
      }
    
      metadata = {
        ssh-keys = "ubuntu:${file("<путь_к_публичному_SSH-ключу>")}"
      }
    }
    
    resource "yandex_compute_instance" "vm-2" {
      name = "terraform2"
    
      resources {
        cores  = 2
        memory = 4
      }
    
      boot_disk {
        disk_id = yandex_compute_disk.boot-disk-vm2.id
      }
    
      network_interface {
        subnet_id = yandex_vpc_subnet.subnet-1.id
        nat       = true
      }
    
      metadata = {
        ssh-keys = "ubuntu:${file("<путь_к_публичному_SSH-ключу>")}"
      }
    }
    
    resource "yandex_vpc_network" "network-1" {
      name = "network1"
    }
    
    resource "yandex_vpc_subnet" "subnet-1" {
      name           = "subnet1"
      zone           = "ru-central1-d"
      network_id     = yandex_vpc_network.network-1.id
      v4_cidr_blocks = ["192.168.10.0/24"]
    }
    
    output "internal_ip_address_vm_1" {
      value = yandex_compute_instance.vm-1.network_interface.0.ip_address
    }
    
    output "internal_ip_address_vm_2" {
      value = yandex_compute_instance.vm-2.network_interface.0.ip_address
    }
    
    output "external_ip_address_vm_1" {
      value = yandex_compute_instance.vm-1.network_interface.0.nat_ip_address
    }
    
    output "external_ip_address_vm_2" {
      value = yandex_compute_instance.vm-2.network_interface.0.nat_ip_address
    }
    
    output "subnet-1" {
      value = yandex_vpc_subnet.subnet-1.id
    }
    

    Где:

    • bucket — имя бакета.
    • key — ключ объекта в бакете: путь и имя к файлу состояния Terraform в бакете.
    • ssh-keys — путь к файлу с открытым SSH-ключом для аутентификации пользователя на ВМ. Подробнее см. Создание пары ключей SSH.
  2. Проверьте конфигурацию с помощью команды terraform plan.

  3. Разверните конфигурацию с помощью команды terraform apply.

Проверьте сохраненное состояниеПроверьте сохраненное состояние

Убедитесь, что файл состояния загружен в Yandex Object Storage:

Консоль управления
  1. Откройте консоль управления и выберите каталог, в котором находится созданный бакет.
  2. Выберите сервис Object Storage.
  3. В списке бакетов выберите тот, в котором должно было сохраниться состояние Terraform.
  4. Убедитесь, что в бакете появился файл состояния.

Получите состояние из бэкендаПолучите состояние из бэкенда

Сохраненное в Object Storage состояние Terraform можно запросить из другой конфигурации и дополнить уже созданную инфраструктуру.

Создайте еще одну конфигурацию и используйте сохраненное состояние, чтобы создать еще одну ВМ в одной из заранее созданных подсетей:

  1. Создайте директорию remote-state.

  2. Перейдите в созданную директорию и создайте конфигурацию remote-state.tf:

    terraform {
      required_providers {
        yandex = {
          source = "yandex-cloud/yandex"
        }
      }
    }
    
    provider "yandex" {
      zone      = "ru-central1-d"
    }
    
    data "terraform_remote_state" "vpc" {
      backend = "s3"
      config  = {
        endpoints = {
          s3 = "https://storage.yandexcloud.net"
        }
        bucket = "<имя_бакета>"
        region = "ru-central1"
        key    = "<путь_к_файлу_состояния_в_бакете>/<имя_файла_состояния>.tfstate"
    
        skip_region_validation      = true
        skip_credentials_validation = true
        skip_requesting_account_id  = true # Необходимая опция при описании бэкенда для Terraform версии старше 1.6.1.
    
        access_key = "<идентификатор_ключа>"
        secret_key = "<секретный_ключ>"
    
       }
     }
    
    resource "yandex_compute_image" "ubuntu_2004" {
      source_family = "ubuntu-2004-lts"
    }
    
    resource "yandex_compute_disk" "boot-disk-vm3" {
      name     = "boot-disk-3"
      type     = "network-hdd"
      zone     = "ru-central1-d"
      size     = "20"
      image_id = yandex_compute_image.ubuntu_2004.id
    }
    
    resource "yandex_compute_instance" "vm-3" {
      name = "terraform3"
    
      resources {
        cores  = 2
        memory = 2
      }
    
      boot_disk {
        disk_id = yandex_compute_disk.boot-disk-vm3.id
      }
    
      network_interface {
        subnet_id = data.terraform_remote_state.vpc.outputs.subnet-1
        nat       = true
      }
    
      metadata = {
        ssh-keys = "ubuntu:${file("<путь_к_публичному_SSH-ключу>")}"
      }
    }
    

    Где:

    • bucket — имя бакета.
    • key — ключ объекта в бакете: путь и имя к файлу состояния Terraform в бакете.
    • access_key — идентификатор секретного ключа сервисного аккаунта, для доступа к бакету.
    • secret_key — значение секретного ключа сервисного аккаунта.
  3. Выполните команду terraform init.

  4. Выполните команду terraform plan. В терминале должен отобразиться план создания одной ВМ.

  5. Выполните команду terraform apply.

  6. Перейдите в консоль управления и убедитесь, что в разделе Compute Cloud появилась ВМ terraform3.

Удалите созданные ресурсыУдалите созданные ресурсы

Чтобы удалить созданные ресурсы, выполните команду terraform destroy сначала во второй конфигурации, а затем в первой.

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

  • Начало работы с Terraform.
  • Блокировка состояний Terraform с помощью Managed Service for YDB.
  • Использование модулей Yandex Cloud в Terraform.
  • Источники данных Terraform.

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

Предыдущая
Миграция данных из Elasticsearch в Yandex Managed Service for OpenSearch
Следующая
Блокировка состояний Terraform с помощью Managed Service for YDB
Проект Яндекса
© 2025 ООО «Яндекс.Облако»