Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Архитектура и защита базового интернет-сервиса
    • Анализ поресурсной детализации расходов с помощью Object Storage
      • Начало работы с Terraform
      • Источники данных Terraform
      • Загрузка состояний Terraform в Object Storage
      • Начало работы с Packer
      • Сборка образа ВМ с набором инфраструктурных инструментов с помощью Packer
      • Блокировка состояний Terraform с помощью Managed Service for YDB
      • Использование модулей Yandex Cloud в Terraform
      • Создать ВМ и группу ВМ с Container Optimized Image с помощью Terraform
      • Передача логов через HTTP-вход Unified Agent в Cloud Logging
      • Запуск языковой модели DeepSeek-R1 в кластере GPU Compute Cloud

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

  • Подготовьте облако к работе
  • Установите и настройте Terraform
  • Установите Terraform
  • Получите данные для аутентификации
  • Создайте файл конфигурации Terraform
  • Настройте провайдер
  • Опишите источник данных
  • Проверьте результат
  • См. также
  1. Базовая инфраструктура
  2. Инструменты
  3. Источники данных Terraform

Источники данных Terraform

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

Источники данных (Data Sources) Terraform позволяют получать актуальную информацию о существующих облачных ресурсах и использовать эти данные в конфигурации вашей инфраструктуры.

С помощью Terraform-провайдера Yandex Cloud вы можете получить информацию о различных облачных ресурсах: виртуальных машинах, дисках, облачных сетях и других облачных ресурсах.

Источники данных доступны только для чтения — это гарантирует, что вы не измените внешние ресурсы.

Получим с помощью источников данных Terraform идентификатора образа Ubuntu 22.04 LTS из Cloud Marketplace.

Чтобы получить идентификатор образа Ubuntu 22.04 LTS с помощью Terraform:

  1. Подготовьте облако к работе.
  2. Установите и настройте Terraform.
  3. Опишите источник данных.
  4. Проверьте результат.

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

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

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

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

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

Установите и настройте 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 с использованием блока data.

  1. В файле конфигурации после настроек провайдера добавьте:

    data "yandex_compute_image" "my_image" {
      family = "ubuntu-2204-lts"
    }
    
    output "my_image_id" {
      value = data.yandex_compute_image.my_image.id
    }
    

    Где:

    • data "yandex_compute_image" — описание образа диска в качестве источника данных:
      • family — семейство образов.
    • output "resource_active" — выходная переменная, которая содержит информацию о текущем идентификаторе образа для указанного семейства:
      • value — возвращаемое значение.

    Более подробно о параметрах источника данных yandex_compute_image см. в документации провайдера.

  2. Создайте ресурсы:

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

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

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

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

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

    Terraform создаст все требуемые ресурсы и отобразит значения выходных переменных в терминале.

Проверьте результатПроверьте результат

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

terraform output

Результат:

my_image_id = "fd8li2lvvfc6bdj4c787"

Далее вы можете использовать полученный идентификатор для создания ВМ, например:

resource "yandex_compute_disk" "boot-disk" {
  name     = "<имя_диска>"
  type     = "<тип_диска>"
  zone     = "<зона_доступности>"
  size     = "<размер_диска>"
  image_id = data.yandex_compute_image.my_image.id
}

...

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

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

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

Предыдущая
Начало работы с Terraform
Следующая
Загрузка состояний Terraform в Object Storage
Проект Яндекса
© 2025 ООО «Яндекс.Облако»