📝 Задания: проверка знаний Terraform

⚡ Быстрая проверка

  1. Какая команда инициализирует Terraform-проект?
  2. В каком файле Terraform хранит текущее состояние инфраструктуры?
  3. Чем декларативный подход отличается от императивного?
  4. Почему terraform.tfvars с секретами нужно добавить в .gitignore?

Ответы — в разделе Решения.

Теоретические вопросы

Ответьте на вопросы самостоятельно, затем сверьтесь с разделом Решения.

Вопрос 1

Что такое Infrastructure as Code (IaC)? Назовите два ключевых преимущества перед ручным управлением через консоль AWS.

Вопрос 2

Объясните разницу между императивным и декларативным подходом в IaC. К какому подходу относится Terraform?

Вопрос 3

Для чего нужна команда terraform plan? Изменяет ли она реальные ресурсы в AWS?

Вопрос 4

Что такое terraform.tfstate? Почему этот файл не рекомендуется хранить в публичном git-репозитории?

Вопрос 5

Перечислите файлы, которые появляются в рабочей директории после выполнения terraform init. Что содержит каждый?

Вопрос 6

Что такое провайдер в Terraform? Приведите пример провайдера и двух ресурсов, которые он предоставляет.


Практические задания

Задание 1: Структура проекта

Создайте структуру файлов для Terraform-проекта, который создаёт S3-бакет:

  • Перечислите необходимые файлы и их назначение
  • Напишите содержимое variables.tf с переменной bucket_name типа string и значением по умолчанию
  • Напишите блок terraform {} с required_providers для AWS провайдера версии 5.x

Задание 2: Последовательность команд

Запишите правильную последовательность Terraform-команд для:

  1. Инициализации нового проекта
  2. Проверки, что конфигурация создаст ожидаемые ресурсы
  3. Создания ресурсов
  4. Удаления всех созданных ресурсов после завершения работы

Каждая команда должна передавать файл переменных terraform.tfvars.

Задание 3: Анализ ошибки

Студент написал следующую конфигурацию и запустил terraform apply. Найдите и исправьте проблемы:

# main.tf — найдите ошибки
provider "aws" {
  region = "us-east-1"
  aws_access_key_id = "AKIAIOSFODNN7EXAMPLE"
  aws_secret_access_key = "wJalrXUtnFEMI/K7MDENG"
}

resource "aws_s3_bucket" "bucket" {
  bucket = "my-bucket"
}

resource "aws_s3_bucket" "backup" {
  bucket = "my-bucket"  # то же имя, что у bucket выше
}

Задание 4: Написать конфигурацию

Напишите Terraform-конфигурацию (файл main.tf) которая:

  • Создаёт S3-бакет с именем из переменной bucket_name
  • Добавляет теги Name и Environment (значение тега Environment тоже берётся из переменной)
  • Определяет output, который выводит ARN созданного бакета

Задание 5: Вопрос по безопасности

Разработчик создал файл terraform.tfvars с реальными ключами AWS и случайно закоммитил его в публичный GitHub-репозиторий. Что нужно сделать немедленно? Перечислите шаги в правильном порядке.