Использование Object Storage для работы с файлами состояния
После создания ресурсов Terraform создает файл с расширением .tfstate, в котором текущее состояние ресурсов описано в формате JSON. Он называется файлом состояния (англ. state file).
Если вы измените описание ресурсов, а затем выполните команду terraform plan, Terraform перечитает этот файл, сравнит желаемое состояние ресурсов с фактическим и выведет список нужных изменений.
При выполнении команды terraform apply ресурсы, у которых желаемое состояние отличается от фактического, будут изменены. Ресурсы, которые фактически существуют в проекте, но отсутствуют в описании, будут удалены.
Чтобы организовать совместную работу, избежать конфликтов при изменении ресурсов и обеспечить интеграцию с CI/CD, файлы состояния рекомендуется помещать в удаленные хранилища. Файлы состояния можно получать из удаленного хранилища и выполнять на их основе операции с ресурсами.
Чтобы настроить хранение файлов состояний в Object Storage и выполнять с их помощью операции с ресурсами:
1. Подготовьте окружение
Заголовок раздела «1. Подготовьте окружение»В веб-консоли выберите нужный проект или создайте новый.
Создайте бакет для хранения файлов состояния Terraform в сервисе Object Storage.
Создайте сервисный аккаунт и назначьте ему роль
editorили выше на проект.Создайте директорию для хранения конфигурационных файлов Terraform. Например,
terraform-config:bash mkdir terraform-config
2. Получите аутентификационные данные
Заголовок раздела «2. Получите аутентификационные данные»- Создайте авторизованный ключ для сервисного аккаунта.
- Скачайте и сохраните файл с авторизованным ключом.
3. Настройте провайдер
Заголовок раздела «3. Настройте провайдер»Создайте файл
~/.terraformrcи укажите в нем параметры для установки провайдера:hcl provider_installation {network_mirror {url = "https://storage.mwsapis.ru/mws-terraform/",include = ["registry.terraform.io/mws-cloud/*"]}direct {exclude = ["registry.terraform.io/mws-cloud/*"]}}Создайте файл
provider.tfи добавьте в него блок с настройками провайдера:hcl terraform {required_providers {mws = {source = "mws-cloud/mws"}}required_version = ">= 1.11"}provider "mws" {service_account_authorized_key_path = "<путь к файлу с авторизованным ключом>"project = "my-project" # имя проектаzone = "ru-central1-a" # зона доступности}
4. Настройте бэкенд
Заголовок раздела «4. Настройте бэкенд»Создайте HMAC-ключ для сервисного аккаунта, который будет использоваться для работы с Terraform.
Создайте файл
backend.hclи добавьте в него обе части HMAC-ключа —Access keyиSecret key:hcl access_key = "<Access key из HMAC-ключа>"secret_key = "<Secret key из HMAC-ключа>"Создайте файл
backend.tfи добавьте в него блок с настройками бэкенда:hcl terraform {backend "s3" {bucket = "<имя бакета для хранения файлов состояния>"key = "<имя файла состояния>"region = "ru-central1"endpoints = {s3 = "https://storage.mwsapis.ru"}skip_region_validation = trueskip_credentials_validation = trueskip_metadata_api_check = trueskip_requesting_account_id = trueuse_path_style = trueuse_dualstack_endpoint = falseuse_fips_endpoint = false}}Инициализируйте Terraform:
bash terraform init -backend-config=backend.hclЭта команда загрузит провайдер и установит соединение с Object Storage, где будут храниться файлы состояния.
5. Подготовьте план инфраструктуры
Заголовок раздела «5. Подготовьте план инфраструктуры»После инициализации Terraform нужно описать характеристики ресурсов, которые будут созданы с его помощью. В примере показан конфигурационный файл Terraform, на основе которого будут созданы:
- сеть с именем
example-network; - подсеть с именем
example-subnetи CIDR192.168.0.0/16; - виртуальная машина с именем
example-vm, с двумя ядрами vCPU, 4ГБ RAM, диском размером в 10 ГБ и ОС Ubuntu 24.04. Она получит внутренний IP-адрес из подсетиexample-subnet.
Чтобы создать виртуальную машину:
Добавьте в файл
main.tfсодержимое из примера ниже.Проверьте файл
main.tfна наличие синтаксических ошибок:bash terraform validateЕсли ошибок нет, вы получите следующее сообщение:
bash Success! The configuration is valid.Выполните команду:
bash terraform planTerraform проверит конфигурационные файлы, сопоставит описание желаемого состояния облачной инфраструктуры с фактическим и укажет, какие операции с ресурсами будут выполнены.
6. Создайте ресурсы
Заголовок раздела «6. Создайте ресурсы»Выполните команду:
bash terraform applyПодтвердите выполнение операций: введите слово
yesи нажмите Enter.Во время создания ресурсов Terraform будет выводить краткие сообщения о выполняемых операциях. Проверить, что ресурсы созданы и настроены корректно, можно в веб-консоли.
7. Проверьте сохраненное состояние
Заголовок раздела «7. Проверьте сохраненное состояние»- В веб-консоли в списке сервисов выберите Object Storage.
- Нажмите на имя бакета, который вы создали ранее для хранения файлов состояния Terraform.
- Убедитесь, что в бакете появился файл с расширением
*.tfstate.
8. Получите состояние из бэкенда
Заголовок раздела «8. Получите состояние из бэкенда»Файлы состояния можно запрашивать из бэкенда и использовать при создании ресурсов. В примере ниже показано, как запросить состояние и создать еще одну виртуальную машину в подсети, созданной на предыдущем шаге.
Чтобы получить состояние и создать еще одну виртуальную машину:
Создайте новую директорию для конфигураций и перейдите в нее:
bash mkdir remote-statecd remote-stateСкопируйте в нее файл
provider.tfиз директорииterraform-config, созданной ранее:bash cp ../terraform-config/provider.tf $(pwd)Инициализируйте Terraform:
bash terraform initСоздайте файл
example.tfи добавьте конфигурацию из примера ниже. На базе этой конфигурации Terraform выполнит следующие действия:получит файл состояния из Object Storage;
получит из файла состояния информацию о сети и подсети, где нужно создать виртуальную машину;
создаст виртуальную машину с именем
example-vm2, с двумя ядрами vCPU, 4ГБ RAM, диском размером в 10 ГБ и ОС Ubuntu 24.04. Она получит внутренний IP-адрес из подсетиexample-subnet.
Проверьте файл
example.tfна наличие синтаксических ошибок:bash terraform validateЕсли ошибок нет, вы получите следующее сообщение:
bash Success! The configuration is valid.Выполните команду:
bash terraform planTerraform проверит конфигурационные файлы, сопоставит описание желаемого состояния облачной инфраструктуры с фактическим и укажет, какие операции с ресурсами будут выполнены.
Создайте вторую виртуальную машину:
bash terraform applyУбедитесь, что в созданной ранее подсети появилась виртуальная машина с именем
example-vm2.
Удалите созданные ресурсы
Заголовок раздела «Удалите созданные ресурсы»Ресурсы, созданные с помощью Terraform, могут тарифицироваться. Не забудьте удалить ресурсы, если вы создали их в тестовых целях, и они вам больше не нужны.
Чтобы удалить ресурсы:
Выполните команду:
bash terraform destroyПодтвердите удаление: введите слово
yesи нажмите Enter.