Гид по технологиям

Установка Terraform и создание VPC в AWS на Ubuntu

• 6 min read • DevOps • Обновлено 21 Nov 2025
Terraform: установка и создание VPC в AWS
Terraform: установка и создание VPC в AWS

Инфраструктура как код: логотип Terraform

Зачем это нужно

Terraform — инструмент Infrastructure as Code (IaC). Он позволяет описывать инфраструктуру в виде человеко-читаемых конфигураций и применять эти описания последовательно и повторимо. Terraform хранит состояние (state) — это источник истины для ресурсов. Правильное использование Terraform упрощает воспроизводимость, аудит и автоматизацию развертываний в облаках (AWS, GCP, Azure и др.).

Предварительные требования

  • Аккаунт AWS (создайте, если нет).
  • EC2-инстанс для работы (если вы будете запускать команды с удалённого сервера).
  • root-доступ или права sudo на машине Ubuntu.
  • Учётные данные AWS: access_key и secret_key (рекомендуется не хранить их в открытых файлах, см. раздел безопасности).

Важно: никогда не публикуйте реальные секретные ключи в репозитории.

Что мы сделаем

  1. Установим Terraform на Ubuntu.
  2. Напишем Terraform-конфигурацию для VPC в AWS.
  3. Применим конфигурацию и проверим VPC в консоли AWS.
  4. Удалим созданные ресурсы.

Установка Terraform на Ubuntu

Установка простая: скачиваем архив с релизом HashiCorp, распаковываем бинарь и помещаем в /usr/local/bin.

Перед загрузкой установите wget и unzip (если они ещё не установлены):

apt-get update -y
apt-get install wget unzip -y

Обновление пакетов и установка wget/unzip

Создадим рабочую директорию под загрузку:

cd /opt/
mkdir terraform
cd terraform/

Скачиваем и распаковываем конкретную версию (пример):

wget https://releases.hashicorp.com/terraform/0.12.18/terraform_0.12.18_linux_amd64.zip
unzip terraform_0.12.18_linux_amd64.zip
ls -lt

После распаковки в каталоге появится бинарный файл terraform. Перенесём его в /usr/local/bin и проверим версию:

mv terraform /usr/local/bin/
terraform -v

Вывод версии Terraform

Примечание: при необходимости используйте более новую версию Terraform; документация HashiCorp подскажет совместимость провайдеров.

Написание конфигураций Terraform

Создайте отдельный каталог для конфигураций и откройте его в удобном редакторе:

mkdir terraform
cd terraform/

В примере ниже создаются файлы variables.tf, terraform.tfvars и main.tf. main.tf отвечает за создание VPC, интернет-шлюза, маршрутов, подсетей и группы безопасности. Файлы переменных отделяют секреты и параметры окружения.

vim main.tf

provider "aws" {  
region     = "${var.region}"  
access_key = "${var.access_key}"  
secret_key = "${var.secret_key}"  
}  
resource "aws_vpc" "vpc" {  
cidr_block = "10.0.0.0/16"  
}  
resource "aws_internet_gateway" "gateway" {  
vpc_id = "${aws_vpc.vpc.id}"  
}  
resource "aws_route" "route" {  
route_table_id         = "${aws_vpc.vpc.main_route_table_id}"  
destination_cidr_block = "0.0.0.0/0"  
gateway_id             = "${aws_internet_gateway.gateway.id}"  
}  
data "aws_availability_zones" "available" {}  
resource "aws_subnet" "main" {  
count                    = "${length(data.aws_availability_zones.available.names)}"  
vpc_id                   = "${aws_vpc.vpc.id}"  
cidr_block               = "10.0.${count.index}.0/24"  
map_public_ip_on_launch  = true  
availability_zone        = "${element(data.aws_availability_zones.available.names, count.index)}"  
}  
resource "aws_security_group" "default" {  
name        = "http-https-allow"  
description = "Allow incoming HTTP and HTTPS and Connections"  
vpc_id      = "${aws_vpc.vpc.id}"  
ingress {  
from_port = 80  
to_port = 80  
protocol = "tcp"  
cidr_blocks = ["0.0.0.0/0"]  
}  
ingress {  
from_port = 443  
to_port = 443  
protocol = "tcp"  
cidr_blocks = ["0.0.0.0/0"]  
}  
}

Создайте файл переменных variables.tf:

vim variables.tf

variable "access_key" {  
description = "Access key to AWS console"  
}  
variable "secret_key" {  
description = "Secret key to AWS console"  
}  
variable "region" {  
description = "Region of AWS VPC"  
}

Внимание по безопасности: в примерах часто используют terraform.tfvars, но хранить реальные ключи в файлах небезопасно. Лучше использовать переменные окружения, профиль AWS CLI или секретные хранилища.

Создайте terraform.tfvars — в примере ниже значения заменены на заглушки. Замените на свои параметры безопасным способом.

vim terraform.tfvars

region = "eu-west-3"  
access_key = "REPLACE_WITH_YOUR_AWS_ACCESS_KEY"  
secret_key = "REPLACE_WITH_YOUR_AWS_SECRET_KEY"

Теперь в директории должны быть три файла: variables.tf, terraform.tfvars и main.tf.

Применение конфигурации и создание VPC

  1. Инициализация провайдера и плагинов:

terraform init

Это скачает нужный провайдер aws и подготовит рабочую директорию.

Инициализация Terraform

  1. Просмотр плана изменений (без внесения изменений):

terraform plan

Команда покажет, какие ресурсы будут созданы, изменены или удалены.

Результат terraform plan

  1. Применение плана и создание ресурсов:

terraform apply

Вы увидите запрос подтверждения; после согласия Terraform создаст ресурсы согласно main.tf.

Применение конфигурации Terraform

После создания зайдите в консоль AWS → VPC, чтобы убедиться, что VPC, подсети и шлюз созданы.

Подтверждение создания VPC в консоли AWS

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

Чтобы удалить все ресурсы, созданные Terraform, используйте:

terraform destroy

Команда покажет план удаления и попросит подтверждение. Это безопасный способ откатить изменения и удалить все ресурсы, которыми управляет текущее состояние Terraform.

Удаление ресурсов Terraform

Рекомендации по безопасности и управлению состоянием

Важно:

  • Никогда не храните реальные access_key/secret_key в репозитории. Используйте переменные окружения (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY), AWS CLI профили или секретные менеджеры.
  • Храните state-файл в удалённом бэкенде (например, S3 + DynamoDB для блокировки) для совместной работы команды.
  • Ограничьте права IAM для аккаунта, используемого Terraform, принципом наименьших привилегий.
  • Шифруйте резервные копии state-файлов.

Краткий checklist по безопасности:

  • Настроить S3-бакет для backend и включить версионирование.
  • Настроить блокировку с помощью DynamoDB (для S3 backend).
  • Не коммитить terraform.tfvars в репозиторий.
  • Использовать ротацию ключей и MFA для важных аккаунтов.

Отладка и распространённые ошибки

  • Ошибка провайдера: убедитесь, что версия Terraform совместима с версией провайдера aws.
  • Доступ запрещён: проверьте права IAM и регион.
  • Конфликт состояний: используйте блокировку бэкенда (DynamoDB) и не редактируйте state вручную.
  • Проблемы с доступом к Интернету для провайдера: проверьте прокси и сетевые правила.

Когда показанный plan не соответствует ожиданиям, выполните terraform refresh и повторно terraform plan, чтобы синхронизировать состояние с реальностью.

Мини-методология внедрения IaC с Terraform (шаги)

  1. Разделять конфигурации по окружениям (dev/prod) и проектам.
  2. Использовать модули для повторно используемых блоков (VPC, RDS, IAM).
  3. Настроить CI/CD: автоматическая проверка формата (terraform fmt), статический анализ (terraform validate/terraform plan) и ручной контроль перед apply.
  4. Хранить state в удалённом бэкенде с блокировкой.
  5. Ревью плана и контроль доступа — обязательны для production.

Чит-лист команд (быстрая справка)

  • terraform init — инициализация рабочей директории.
  • terraform plan — просмотр плана изменений.
  • terraform apply — применение изменений (создание/изменение).
  • terraform destroy — удаление ресурсов.
  • terraform fmt — автоформатирование конфигураций.
  • terraform validate — базовая валидация конфигурации.
  • terraform state list — просмотр ресурсов в state.

Чек-листы по ролям

Для Cloud Engineer:

  • Проверить версии Terraform и провайдера.
  • Настроить backend для state (S3 + DynamoDB).
  • Проверить IAM-права.

Для DevOps:

  • Настроить CI-пайплайн для проверки plan.
  • Настроить хранение секретов и ротацию.

Для Developer/QA:

  • Запускать terraform plan в своём workspace.
  • Не выполнять apply в production без одобрения.

Критерии приёмки

  • Terraform init проходит без ошибок и загружает провайдер aws.
  • terraform plan показывает создание ожидаемых ресурсов (VPC, подсети, IGW, SG).
  • После terraform apply ресурсы видны в консоли AWS и соответствуют CIDR/зонам.
  • terraform destroy удаляет все ресурсы, указанные в state.

Короткая инструкция по безопасной настройке учётных данных

  1. Установите AWS CLI и создайте профиль: aws configure –profile my-terraform.
  2. В Terraform используйте провайдер с profile или установите переменные окружения:

export AWS_PROFILE=my-terraform export AWS_DEFAULT_REGION=eu-west-3

  1. Не храните секреты в terraform.tfvars в публичных репозиториях.

Частые сценарии, когда этот подход не подходит

  • Управление очень большим количеством ресурсов без модулей и структуры приведёт к путанице.
  • Если нужен мгновенный откат к точке во времени, state может быть недостаточен без полноценных бэкапов.

Сводка

  • Terraform даёт повторяемый, декларативный подход к управлению инфраструктурой.
  • Простая конфигурация позволяет создать VPC, подсети, интернет-шлюз и группу безопасности в AWS.
  • Ключевые практики — безопасное хранение ключей, использование удалённого state и CI-процесса для контроля изменений.

Важно: прежде чем запускать конфигурацию в production, протестируйте её в изолированном окружении и настройте процессы безопасности и ревью.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро