---
title: "Настроить хранение Terraform State"
sidebar_label: "Настроить хранение Terraform State"
sidebar_position: 3
description: "Что такое Terraform State, варианты хранения Terraform State, как настроить хранение Terraform State в S3 Selectel"
---

import Formbricks from '@theme/MDXComponents/Formbricks'

# Настроить хранение Terraform State

Terraform State (состояние Terraform) — это файл с расширением `.tfstate`, в котором хранится актуальная информация о состоянии инфраструктуры и используемых конфигурациях.
Terraform State создается после первого применения команды `terraform apply` и обновляется при каждом внесении изменений в конфигурационные файлы. Terraform сравнивает реальную инфраструктуру с ее описанием в файле Terraform State. Если Terraform обнаруживает несоответствия, то изменяет реальную инфраструктуру так, чтобы она снова соответствовала описанию в Terraform State. Подробнее о Terraform State в статье [Terraform State in HCP Terraform](https://developer.hashicorp.com/terraform/cloud-docs/workspaces/state) и разделе [State](https://developer.hashicorp.com/terraform/language/state) документации HashiCorp.

Файл Terraform State по умолчанию хранится локально. Чтобы пользователи могли получать ID созданных ресурсов и обмениваться состоянием инфраструктуры, мы рекомендуем хранить Terraform State удаленно. Например, вы можете [настроить хранение Terraform State в S3 Selectel](#configure-state-storage-in-selectel-s3).

## Настроить хранение Terraform State в S3 Selectel \{#configure-state-storage-in-selectel-s3}

:::info

Это инструкция для версии Terraform 1.6.0 и выше.

:::

1. [Создайте бакет в S3](/s3/buckets/create-bucket/).

2. В конфигурационный файл добавьте блок `backend`:

   ```hcl
   terraform {
     required_providers {
       selectel = {
         source  = "selectel/selectel"
         version = "~> 6.0"
       }
       openstack = {
         source  = "terraform-provider-openstack/openstack"
         version = "2.1.0"
       }
     }

     backend "s3" {
       endpoints                   = { s3 = "https://s3.ru-1.storage.selcloud.ru" }
       key                         = "<file_name>.tfstate"
       region                      = "ru-1"
       skip_region_validation      = true
       skip_credentials_validation = true
       skip_requesting_account_id  = true
       skip_s3_checksum            = true
       skip_metadata_api_check     = true
     }
   }
   ```

   Укажите `<file_name>` — имя файла с состоянием Terraform в бакете S3.

3. Создайте файл `secret.backend.tfvars` и добавьте в него чувствительную информацию, которая необходима для авторизации в S3:

   ```hcl
   bucket     = "<bucket_name>"
   access_key = "<access_key>"
   secret_key = "<secret_key>"
   ```

   Укажите:

   * `<bucket_name>` — имя бакета в S3, в котором будет храниться файл с состоянием Terraform. Можно посмотреть в [панели управления](https://my.selectel.ru/storage/containers) в разделе **S3** → **Контейнеры**;
   * `<access_key>` — идентификатор S3-ключа Access Key ID, который [выдан пользователю](/access-control/manage/edit-user-data-or-role/#manage-s3-keys);
   * `<secret_key>` — секретный S3-ключ Secret Access Key.

4. Инициализируйте изменения конфигурации Terraform:

   ```sh
   terraform init -backend-config=secret.backend.tfvars
   ```

<Formbricks />
