---
title: "Управлять ресурсами Terraform"
sidebar_label: "Управлять ресурсами"
sidebar_position: 4
description: "Как создать, изменить или удалить ресурсы Terraform"
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import {TabItemLabel} from 'docs-kit/components'
import {CustomTable} from 'docs-kit/components'

# Управлять ресурсами Terraform

Все ресурсы, созданные с помощью Terraform, оплачиваются согласно [модели оплаты услуги](/balance-and-payments/payment-models/). Тарификация за ресурс начинается после [создания ресурса](#create-or-edit-resources).

Стоимость ресурсов, созданных с помощью Terraform, не отличается от стоимости ресурсов, созданных с помощью [панели управления](https://my.selectel.ru/).

## Подходы к управлению ресурсами \{#approaches-to-resources-management}

Для управления ресурсами можно использовать [ресурсный подход](#resource-approach) и [модульный подход](#module-approach).

Для знакомства с Terraform мы рекомендуем использовать ресурсный подход. Такой подход считается более простым для освоения благодаря понятному синтаксису, отсутствию зависимостей и простоте отладки ресурсов.

### Ресурсный подход \{#resource-approach}

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

Примеры использования можно посмотреть в разделе [Примеры создания инфраструктуры](/terraform/examples/).

### Модульный подход \{#module-approach}

При модульном подходе логически связанные ресурсы объединены в модули — независимые, повторно используемые компоненты инфраструктуры. Модули инкапсулируют логику — например, создание облачного сервера или кластера облачных баз данных. Это упрощает поддержку, тестирование и совместную работу, а также позволяет стандартизировать инфраструктуру. Подходит для средних и крупных проектов.

Примеры модулей можно посмотреть в [репозитории Selectel](https://github.com/selectel/selectel-infra-examples) на GitHub.

## Создать или изменить ресурсы \{#create-or-edit-resources}

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

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

Мы рекомендуем создавать ресурсы по порядку. Если вы единовременно создаете все ресурсы, которые описаны в конфигурационном файле, может возникнуть ошибка — Terraform создает ресурсы независимо от порядка, в котором они перечислены в файле. Подробнее о создании ресурсов в инструкции [Create resource dependencies](https://developer.hashicorp.com/terraform/tutorials/configuration-language/dependencies) документации Terraform.

1. Откройте CLI.

2. Убедитесь, что вы находитесь в директории с конфигурационным файлом.

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

4. Проверьте, что конфигурационный файл составлен без ошибок:

   ```sh
   terraform validate
   ```

5. Отформатируйте конфигурационный файл:

   ```sh
   terraform fmt
   ```

6. Проверьте, какие ресурсы будут созданы:

   ```sh
   terraform plan
   ```

7. Примените изменения и создайте ресурсы:

   ```sh
   terraform apply
   ```

8. Подтвердите создание — введите **yes** и нажмите **Enter**. Изменения отобразятся в панели управления.

9. Если для создания ресурсов оказалось недостаточно квот, [увеличьте квоты](/access-control/projects/quotas/#change-quotas).

### Ограничения ресурса openstack\_compute\_flavor\_v2 \{#openstack-compute-flavor-v2-limitations}

Если вы измените параметры `vcpus`, `ram` или `disk` в описании ресурса openstack\_compute\_flavor\_v2 на недопустимое, то возникнет ошибка — Terraform удалит ресурс и не сможет создать новый.

Чтобы сначала создавался новый флейвор, а затем удалялся старый, добавьте блок в описание ресурса openstack\_compute\_flavor\_v2:

```hcl
lifecycle {
    create_before_destroy = true
  }
```

Посмотрите подробное описание ресурса [openstack\_compute\_flavor\_v2](/terraform/openstack-provider-reference/compute-nova/resources/openstack_compute_flavor_v2/).

## Удалить ресурсы \{#delete-resources}

Можно удалить определенные ресурсы или всю инфраструктуру, которая была создана с помощью Terraform. Ресурсы, созданные дргуими способами (например, в панели управления), не удалятся.

<Tabs>
  <TabItem value="deleteresource" default>
    <TabItemLabel>
      Удалить ресурс
    </TabItemLabel>

    1. Убедитесь, что вы находитесь в директории с конфигурационным файлом.

    2. Удалите из конфигурационного файла ресурсы.

    3. Проверьте, какие ресурсы будут удалены:

       ```sh
       terraform plan
       ```

    4. Примените изменения и удалите ресурсы:

       ```sh
       terraform apply
       ```

    5. Подтвердите удаление — введите **yes** и нажмите **Enter**. Удаленные ресурсы перестанут отображаться в панели управления.
  </TabItem>

  <TabItem value="deleteall">
    <TabItemLabel>
      Удалить всю инфраструктуру
    </TabItemLabel>

    :::danger

    При удалении этим способом будут удалены все ресурсы, описанные во всех файлах внутри директории.

    :::

    1. Убедитесь, что вы находитесь в директории с конфигурационным файлом.

    2. Удалите все ресурсы:

       ```sh
       terraform destroy
       ```

    3. Подтвердите удаление — введите **yes** и нажмите **Enter**. Удаленные ресурсы перестанут отображаться в панели управления.
  </TabItem>
</Tabs>

<Formbricks />
