Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Практические руководства
  • Веб-сервис
    • Все руководства
    • Cтатический сайт в Object Storage
    • Cайт на LAMP- или LEMP-стеке
    • Отказоустойчивый сайт с балансировкой нагрузки через Network Load Balancer
    • Отказоустойчивый сайт с балансировкой нагрузки через Application Load Balancer
    • Сайт на базе Joomla с БД PostgreSQL
    • Сайт на WordPress
    • Сайт на WordPress с БД MySQL
    • Перенос WordPress сайта с хостинга в Yandex Cloud
    • Веб-сайт на базе 1С-Битрикс
    • Интеграция L7-балансировщика с Cloud CDN и Object Storage
    • Сине-зеленое и канареечное развертывание версий сервиса
  • Интернет-магазины
    • Все руководства
    • Интернет-магазин на 1С-Битрикс
    • Интернет-магазин на Opencart
  • Архив данных
    • Все руководства
    • Однонодовый файловый сервер
    • Настройка SFTP-сервера на Centos 7
    • Резервное копирование в Object Storage через Acronis
    • Резервное копирование в Object Storage через CloudBerry Desktop Backup
    • Резервное копирование в Object Storage через Duplicati
    • Резервное копирование в Object Storage через Bacula
    • Резервное копирование в Object Storage через Veritas Backup Exec
    • Оцифровка архива в Yandex Vision
  • Тестовая среда
    • Все руководства
    • Тестирование приложений с помощью GitLab
    • Создание тестовых ВМ через GitLab CI
    • Высокопроизводительные вычисления на прерываемых виртуальных машинах
    • Эмуляция множества IoT-устройств
    • Нагрузочное тестирование gRPC-сервиса
    • HTTPS-тест с постоянной нагрузкой с помощью Phantom
    • HTTPS-тест со ступенчатой нагрузкой с помощью Pandora
  • Управление инфраструктурой
    • Все руководства
    • Начало работы с Terraform
    • Загрузка состояний Terraform в Object Storage
    • Начало работы с Packer
    • Сборка образа ВМ с набором инфраструктурных инструментов с помощью Packer
    • Автоматизация сборки образов ВМ с помощью Jenkins
    • Непрерывное развертывание контейнеризованных приложений с помощью GitLab
    • Создание кластера Linux-серверов «1С:Предприятия» с кластером Managed Service for PostgreSQL
    • Создание кластера Windows-серверов «1С:Предприятия» с базой данных SQL Server
    • Миграция в Yandex Cloud с помощью Hystax Acura
    • Защита от сбоев с помощью Hystax Acura
    • Настройка отказоустойчивой архитектуры в Yandex Cloud
    • Создание SAP-программы в Yandex Cloud
  • Построение Data Platform
    • Все руководства
    • Синхронизация данных из MySQL с помощью Yandex Data Transfer
    • Миграция базы данных из Yandex Managed Service for MySQL в MySQL
    • Настройка управляемой базы данных в кластере ClickHouse для Graphite
    • Обмен данными между Yandex Managed Service for ClickHouse и Yandex Data Proc
    • Импорт базы данных в Yandex Data Proc с использованием Sqoop
    • Использование Confluent Schema Registry с Yandex Managed Service for Apache Kafka®
    • Поставка данных из Yandex Managed Service for PostgreSQL в Yandex Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Yandex Managed Service for PostgreSQL в Yandex Managed Service for Apache Kafka® с помощью Yandex Data Transfer
    • Миграция данных в Yandex Managed Service for Apache Kafka®
    • Перенос коллекций из MongoDB в Yandex Managed Service for MongoDB
    • Миграция базы данных в Yandex Managed Service for SQL Server
    • Перенос данных из PostgreSQL в ClickHouse с помощью Yandex Data Transfer
    • Настройка Kafka Connect для работы с кластером Yandex Managed Service for Apache Kafka®
    • Настройка Yandex Cloud DNS для доступа к кластерам управляемых баз данных из других облачных сетей
    • Миграция в Yandex Managed Service for Elasticsearch с помощью Reindex API
    • Использование скриптов инициализации для настройки GeeseFS в Yandex Data Proc
  • Windows в Yandex Cloud
    • Все руководства
    • Развертывание Active Directory
    • Развертывание Microsoft Exchange
    • Развертывание Remote Desktop Services
    • Развертывание группы доступности Always On
    • Развертывание группы доступности Always On с внутренним сетевым балансировщиком
    • Развертывание Remote Desktop Gateway
  • Сетевая маршрутизация
    • Все руководства
    • Маршрутизация с помощью NAT-инстанса
    • Создание VPN-туннеля
    • Установка виртуального роутера Cisco CSR1000v
    • Установка виртуального роутера Mikrotik CHR
    • Соединение с облачной сетью при помощи OpenVPN
    • Настройка сети для Yandex Data Proc
  • Визуализация и анализ данных
    • Все руководства
    • Визуализация данных из CSV-файла
    • Создание и публикация диаграммы с картой Москвы из CSV-файла
    • Анализ продаж сети магазинов из БД ClickHouse
    • Анализ открытых данных ДТП на дорогах России
    • Анализ продаж и локаций пиццерий на данных из БД ClickHouse и Marketplace
    • Веб-аналитика с подключением к Яндекс Метрике
    • Веб-аналитика с расчетом воронок и когорт на данных Яндекс Метрики
    • Аналитика мобильного приложения на данных AppMetrica
    • Анализ статистики подкастов Яндекс Музыки (для авторов подкастов)
    • Визуализация данных с помощью SQL-чарта
    • Анализ customer journey мобильного приложения на данных AppMetrica
    • Анализ логов Object Storage при помощи DataLens
  • Интернет вещей
    • Руководства по работе с интернетом вещей
    • Мониторинг состояния географически распределенных устройств
    • Мониторинг показаний датчиков и уведомления о событиях
  • Бессерверные технологии
    • Сокращатель ссылок
    • Ввод данных в системы хранения
    • Хранение журналов работы приложения
  1. Управление инфраструктурой
  2. Загрузка состояний Terraform в Object Storage

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

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

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

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

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

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

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

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

Terraform и его провайдеры распространяются под лицензией Mozilla Public License.

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

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

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

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

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

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

Внимание

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

В этом сценарии будут созданы три виртуальных машины с публичными IP-адресами, виртуальная сеть и две подсети.

В стоимость поддержки этой инфраструктуры входят:

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

Установите Terraform

Из зеркала

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

export PATH=$PATH:/path/to/terraform

С сайта Hashicorp

Windows
Linux
macOS

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

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

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

    choco install terraform
    

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

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

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

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

    brew install terraform
    

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

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

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

Примечание

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

  1. Укажите источник, из которого будет устанавливаться провайдер.

    Linux и MacOS
    Windows

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

    nano ~/.terraformrc
    

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

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

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

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

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

    terraform {
      required_providers {
        yandex = {
          source = "yandex-cloud/yandex"
        }
      }
      required_version = ">= 0.13"
    }
    
    provider "yandex" {
      token     = "<OAuth>"
      cloud_id  = "<идентификатор облака>"
      folder_id = "<идентификатор каталога>"
      zone      = "<зона доступности по умолчанию>"
    }
    
    • source — глобальный адрес источника провайдера.
    • version — минимальная версия провайдера, с которой совместим модуль. Номер версии можно посмотреть на странице провайдера (кнопка USE PROVIDER в верхнем правом углу).
    • provider — название провайдера.
    • token — OAuth-токен для доступа к Yandex Cloud.
    • cloud_id — идентификатор облака, в котором Terraform создаст ресурсы.
    • folder_id — идентификатор каталога, в котором по умолчанию будут создаваться ресурсы.
    • zone — зона доступности, в которой по умолчанию будут создаваться все облачные ресурсы.
  3. Если раньше у вас был настроен провайдер из реестра Hashicorp, удалите его настройки:

    rm -rf .terraform*
    
  4. Выполните команду terraform init в папке с конфигурационным файлом .tf. Эта команда инициализирует провайдеров, указанных в конфигурационных файлах, и позволяет работать с ресурсами и источниками данных провайдера.

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

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

terraform providers lock -net-mirror=https://terraform-mirror.yandexcloud.net -platform=linux_amd64 -platform=darwin_arm64 yandex-cloud/yandex

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

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

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

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

Создайте бакет с любым именем, например terraform-object-storage-tutorial. В нем будет храниться файл состояния Terraform.

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

Чтобы сохранить состояние Terraform в Object Storage, укажите настройки провайдера и бэкенда:

terraform {
  required_providers {
    yandex = {
      source = "yandex-cloud/yandex"
    }
  }

  backend "s3" {
    endpoint   = "storage.yandexcloud.net"
    bucket     = "<имя бакета>"
    region     = "ru-central1"
    key        = "<путь к файлу состояния в бакете>/<имя файла состояния>.tfstate"
    access_key = "<идентификатор статического ключа>"
    secret_key = "<секретный ключ>"

    skip_region_validation      = true
    skip_credentials_validation = true
  }
}

provider "yandex" {
  token     = "<OAuth или статический ключ сервисного аккаунта>"
  cloud_id  = "<идентификатор облака>"
  folder_id = "<идентификатор каталога>"
  zone      = "<зона доступности по умолчанию>"
}

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

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

В этом примере будут созданы две виртуальные машины: terraform1 и terraform2. Они будут подключены к подсети subnet-1 в зоне доступности ru-central1-a. Подсеть будет принадлежать облачной сети 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" {
        endpoint   = "storage.yandexcloud.net"
        bucket     = "<имя бакета>"
        region     = "ru-central1"
        key        = "<путь к файлу состояния в бакете>/<имя файла состояния>.tfstate"
        access_key = "<идентификатор статического ключа>"
        secret_key = "<секретный ключ>"
    
        skip_region_validation      = true
        skip_credentials_validation = true
      }
    }
    
    provider "yandex" {
      token     = "<OAuth или статический ключ сервисного аккаунта>"
      cloud_id  = "<идентификатор облака>"
      folder_id = "<идентификатор каталога>"
      zone      = "ru-central1-a"
    }
    
    resource "yandex_compute_instance" "vm-1" {
      name = "terraform1"
    
      resources {
        cores  = 2
        memory = 2
      }
    
      boot_disk {
        initialize_params {
          image_id = "fd87va5cc00gaq2f5qfb"
        }
      }
    
      network_interface {
        subnet_id = yandex_vpc_subnet.subnet-1.id
        nat       = true
      }
    
      metadata = {
        ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}"
      }
    }
    
    resource "yandex_compute_instance" "vm-2" {
      name = "terraform2"
    
      resources {
        cores  = 2
        memory = 4
      }
    
      boot_disk {
        initialize_params {
          image_id = "fd87va5cc00gaq2f5qfb"
        }
      }
    
      network_interface {
        subnet_id = yandex_vpc_subnet.subnet-1.id
        nat       = true
      }
    
      metadata = {
        ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}"
      }
    }
    
    resource "yandex_vpc_network" "network-1" {
      name = "network1"
    }
    
    resource "yandex_vpc_subnet" "subnet-1" {
      name           = "subnet1"
      zone           = "ru-central1-a"
      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
    }
    
  2. Проверьте конфигурацию c помощью команды terraform plan.

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

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

Убедитесь, что файл состояния загружен в 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" {
      token     = "<OAuth или статический ключ сервисного аккаунта>"
      cloud_id  = "cloud-id"
      folder_id = "folder-id"
      zone      = "ru-central1-a"
    }
    
    data "terraform_remote_state" "vpc" {
      backend = "s3"
      config = {
        endpoint   = "storage.yandexcloud.net"
        bucket     = "<имя бакета>"
        region     = "ru-central1"
        key        = "<путь к файлу состояния в бакете>/<имя файла состояния>.tfstate"
        access_key = "<идентификатор статического ключа>"
        secret_key = "<секретный ключ>"
    
        skip_region_validation      = true
        skip_credentials_validation = true
      }
    }
    
    resource "yandex_compute_instance" "vm-3" {
      name = "terraform3"
    
      resources {
        cores  = 2
        memory = 2
      }
    
      boot_disk {
        initialize_params {
          image_id = "fd87va5cc00gaq2f5qfb"
        }
      }
    
      network_interface {
        subnet_id = data.terraform_remote_state.vpc.outputs.subnet-1
        nat       = true
      }
    
      metadata = {
        ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}"
      }
    }
    
  3. Выполните команду terraform init.

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

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

  6. Перейдите в консоль управления и убедитесь, что в разделе Compute Cloud появилась виртуальная машина vm-3.

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

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

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

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Установите Terraform
  • Из зеркала
  • С сайта Hashicorp
  • Создайте файл конфигурации Terraform
  • Настройте провайдер
  • Создайте сервисный аккаунт и статический ключ доступа
  • Создайте бакет
  • Настройте бэкенд
  • Разверните конфигурацию
  • Проверьте сохраненное состояние
  • Получите состояние из бэкенда
  • Удалите созданные ресурсы