---
title: "Начало работы с Terraform — База знаний Timeweb Cloud"
description: "Начало работы с Terraform. Документация и инструкции по управлению IT-инфраструктурой. Timeweb Cloud — облачные решения для вашего бизнеса."
---

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

Terraform — очень удобный инструмент для быстрого создания облачной инфраструктуры и управления ей при помощи конфигурационных файлов. Когда конфигурационные файлы изменяются, Terraform автоматически реагирует на это и отдает соответствующие команды на добавление или удаление нужных администратору ресурсов. В статье мы расскажем, как при помощи Terraform (также будем использовать сокращение TF) создать виртуальную инфраструктуру в Timeweb Cloud.

> [!NOTE]
> Подробная документация по работе с Terraform доступна в [нашем профиле GitHub](https://github.com/timeweb-cloud/terraform-provider-timeweb-cloud).

## **Шаг 1. Устанавливаем Terraform**

Terraform можно установить на Linux, macOS и Windows. Установка возможна двумя способами:

-   через пакетный менеджер;
-   вручную — загрузкой и распаковкой готового бинарного файла.

Рассмотрим второй способ — установку вручную, с использованием предварительно собранного бинарного файла.

HashiCorp, разработчик Terraform, ограничил доступ к своим репозиториям с IP-адресов из России. Для вашего удобства мы развернули зеркало: [http://terraform-mirror.timeweb.cloud/index.html](http://terraform-mirror.timeweb.cloud/index.html). Далее для установки клиента Terraform мы будем использовать именно это зеркало.

Актуальную версию Terraform можно посмотреть на странице [http://terraform-mirror.timeweb.cloud/current/index.html](http://terraform-mirror.timeweb.cloud/current/index.html).

Для примера рассмотрим установку версии `1.14.0`.

Linux

Скачайте архив с бинарным файлом:

```bash
wget http://terraform-mirror.timeweb.cloud/1.14.0/terraform_1.14.0_linux_amd64.zip
```

Распакуйте архив:

```bash
unzip ./terraform_1.14.0_linux_amd64.zip
```

Переместите файл в директорию `/usr/local/bin`:

```bash
sudo mv ./terraform /usr/local/bin
```

Убедитесь, что Terraform установлен:

```bash
terraform -v
```

macOS

Скачайте архив с бинарным файлом:

```bash
wget http://terraform-mirror.timeweb.cloud/1.14.0/terraform_1.14.0_darwin_arm64.zip
```

Распакуйте архив:

```bash
unzip ./terraform_1.14.0_darwin_arm64.zip
```

Переместите файл в директорию `/usr/local/bin`:

```bash
sudo mv ./terraform /usr/local/bin
```

Убедитесь, что Terraform установлен:

```bash
terraform -v
```

Windows

Перейдите на страницу релиза: [http://terraform-mirror.timeweb.cloud/current/index.html](http://terraform-mirror.timeweb.cloud/current/index.html).

Скачайте версию `terraform_1.14.0_windows_amd64.zip`.

Распакуйте архив. Внутри будет файл `terraform.exe`.

Чтобы запускать Terraform из командной строки, добавьте путь к папке с `terraform.exe` в переменную окружения `PATH`. Для этого:

1.  В строке поиска Windows введите «Переменные среды» и откройте соответствующий пункт.
2.  В разделе «Системные переменные» найдите переменную `Path` и нажмите «Изменить».
3.  Нажмите «Создать» и укажите путь к директории, куда вы распаковали Terraform.
4.  Нажмите «ОК» во всех окнах, чтоб применить настройки.

Теперь проверьте установку в командной строке:

```bash
terraform -v
```

## **Шаг 2. Создаем конфигурационный файл .tf**

Файлы конфигураций в Terraform имеют расширение `.tf`. При этом их название может быть произвольным — программа всё равно сможет извлечь из них нужную информацию. Теперь давайте создадим новый каталог (назовем его `timeweb_project`), а затем добавим туда файл конфигураций, к примеру, `twcproject.tf`. Чтобы получить файл с таким расширением, можно сначала создать обычный текстовый файл, а затем изменить его расширение на `.tf`.

Отметим, что в одном каталоге может быть несколько конфигурационных файлов, связанных с одним проектом. Например, можно создать файл `vars.tf` для описания переменных, `nginx.tf` для настройки веб-сервера Nginx и так далее. В дальнейшем при выполнении команды `terraform plan` все `.tf`\-файлы будут «склеены» в один. 

Однако в рамках данной статьи мы будем использовать один общий конфигурационный файл `twcproject.tf`.

## **Шаг 3. Настраиваем провайдера**

Настройка провайдера через конфигурационный файл выполняется следующим образом. В начало нашего файла `twcproject.tf` добавляем следующие строки:

```shell
terraform {
  required_providers {
    twc = {
      source = "tf.timeweb.cloud/timeweb-cloud/timeweb-cloud"
    }
  }
  required_version = ">= 1.4.4"
}
```

В `source` указывается адрес провайдера (в примере указан адрес Timeweb Cloud), а номер версии Terraform вы можете узнать при скачивании (мы указали самую свежую на момент написания инструкции). Также учитывайте, что провайдер поддерживает только версии Terraform 0.13 и выше.

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

```shell
terraform init
```

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

## **Шаг 4. Создаем и указываем токен**

Чтобы появилась возможность работать с установленным провайдером, нам понадобится API-токен, который можно получить в [разделе «API и Terraform»](https://timeweb.cloud/my/api-keys) панели Timeweb Cloud (вы должны быть залогинены, чтобы попасть в этот раздел).

Допустим мы получили токен `fb246030216d5g30b1g6228e3071037g` (это значение здесь только в качестве примера, вам необходимо будет вводить свой токен, который будет сгенерирован для вас). Добавляем его в файл `twcproject.tf` следующим образом:

```shell
provider "twc" {
  token = "fb246030216d5g30b1g6228e3071037g"
}
```

Если нужна возможность удаления сервисов, необходимо [отключить Telegram-подтверждения](https://timeweb.cloud/docs/account-management/notifications#otkluchenie-uvedomlenij-pri-udalenii-servisov-cherez-api) их удаления, отметив соответсвующий чекбокс в настройках токена:

![8a2b7af7 A5c2 4b7f B41b 657b869f4e74](https://content.timeweb.com/assets/1bca3811-2b63-4fc5-b65d-fa80221b55e4?width=1458&height=884)

## **Шаг 5. Готовим конфигурацию**

С помощью Terraform вы сможете управлять разнообразными типами ресурсов в своем облаке Timeweb Cloud.

Рассмотрим пример создания виртуальной машины (далее ВМ) с диском SSD емкостью 100 ГБ, 2 ядрами и 4 ГБ оперативной памяти. В качестве операционной системы будем использовать Ubuntu 20.04, а наш сервер назовем, допустим, `my-timeweb-server` (вы можете заменить на свое имя).

Сервер мы будем создавать в локации `ru-1`. Весь список локаций и соответствующих им зон доступности можно найти [здесь](https://timeweb.cloud/docs/zony-dostupnosti/servisy-i-zony-dostupnosti).

Для этого в конфигурационном файле `twcproject.tf` прописываем следующее:

```shell
terraform {
  required_providers {
    twc = {
      source = "tf.timeweb.cloud/timeweb-cloud/timeweb-cloud"
    }
  }
  required_version = ">= 1.4.4"
}

provider "twc" {
  token = "fb246030216d5g30b1g6228e3071037g"
}

data "twc_configurator" "configurator" {
  location = "ru-1"
  preset_type = "premium"
}

data "twc_os" "os" {
  name = "ubuntu"
  version = "20.04"
}

resource "twc_server" "my-timeweb-server" {
  name = "My Timeweb Server"
  os_id = data.twc_os.os.id

  configuration {
    configurator_id = data.twc_configurator.configurator.id
    disk = 102400
    cpu = 2
    ram = 1024 * 4
  }
}
```

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

Важно: если ВМ не создалась, проверьте, корректно ли указан токен (см. Шаг 4). Также стоит обратить внимание на ошибку, которую вывел Terraform: зачастую из нее понятна причина, по которой ВМ не создалась.

Кроме того, можно настроить доступ через SSH-ключи. Если вы не знаете, как генерировать SSH-ключи, воспользуйтесь [этой инструкцией](https://timeweb.cloud/docs/cloud-servers/manage-servers/ssh-keys). Для загрузки SSH-ключа добавьте следующий блок в конфигурационный файл `twcproject.tf`:

```shell
resource "twc_ssh_key" "your-key" {
  name = "Your key"
  body = file("~/.ssh/your-key.pub")
}
```

А в этом блоке `resource` пропишите строку `ssh_keys_ids`:

```shell
resource "twc_server" "my-timeweb-server" {
  name = "My Timeweb Server"
  os_id = data.twc_os.os.id

  ssh_keys_ids = [twc_ssh_key.your-key.id]
}
```

Обратите внимание, что указывать нужно **только публичный** ключ SSH.

В итоге у нас получится следующий файл конфигурации:

```shell
terraform {
  required_providers {
    twc = {
      source = "tf.timeweb.cloud/timeweb-cloud/timeweb-cloud"
    }
  }
  required_version = ">= 1.4.4"
}

provider "twc" {
  token = "fb246030216d5g30b1g6228e3071037g"
}

data "twc_configurator" "configurator" {
  location = "ru-1"
  preset_type = "premium"
}

data "twc_os" "os" {
  name = "ubuntu"
  version = "20.04"
}

resource "twc_ssh_key" "your-key" {
  name = "Your key"
  body = file("~/.ssh/your-key.pub")
}

resource "twc_server" "my-timeweb-server" {
  name = "My Timeweb Server"
  os_id = data.twc_os.os.id

  ssh_keys_ids = [twc_ssh_key.your-key.id]

  configuration {
    configurator_id = data.twc_configurator.configurator.id
    disk = 102400
    cpu = 2
    ram = 1024 * 4
  }
}
```

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

## **Шаг 6. Проверяем конфигурацию**

Это делает команда:

```shell
terraform validate
```

При правильных настройках вы получите сообщение о том, что конфигурация корректна (_valid_). Если возникла ошибка, проверьте настройки еще раз. Теперь осталось применить конфигурацию.

## **Шаг 7. Применяем конфигурацию**

Сначала вводим следующую инструкцию:

```shell
terraform plan
```

Она не применяет изменения, а только выводит список ресурсов для проверки настроек. При обнаружении ошибок Terraform не просто выдаст дежурное сообщение, но и укажет, где эти ошибки допущены. Если же всё в порядке, вводим:

```shell
terraform apply
```

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

```shell
Enter a value:
```

вводим _yes_ и нажимаем _Enter_.

Теперь можно проверить созданные ресурсы через [панель управления](https://timeweb.cloud/my). Если же по каким-то причинам вы решите удалить их, это можно сделать при помощи инструкции:

```shell
terraform destroy
```

Операцию также нужно будет подтвердить, введя _yes_ и нажав на клавишу _Enter_, чтобы подтвердить удаление.

## **Заключение**

Итак, мы научились создавать конфигурационные файлы Terraform, настраивать провайдера, а также добавлять ресурсы и настраивать их конфигурацию, чтобы можно было работать с ними на своем сервере Timeweb Cloud. Если же вы хотите узнать об инструкциях Terraform больше, ознакомиться с ними можно в [официальной документации](https://developer.hashicorp.com/terraform/cli).
