Задание из LMS
1. Создайте три файла:
main.tf— для описания ресурса (S3 бакет)providers.tf— для настройки провайдера AWS (регион Frankfurt)variables.tf— для объявления переменной, которая задаёт имя S3 бакета с использованием значения по умолчанию
2. Имя бакета и теги:
- Имя бакета должно задаваться через переменную
bucket_name - Задайте значение по умолчанию для переменной
bucket_nameв файлеvariables.tf, например,"group-bucket-name", где group — ваша группа, а name — ваше имя - Присвойте теги для вашего бакета:
nameиenvironment
3. Используйте Terraform:
- Выполните инициализацию, планирование и развёртывание с помощью команд
terraform init,terraform planиterraform apply
4. Удалите созданные ресурсы:
- После успешного создания ресурса выполните команду
terraform destroyдля удаления S3 бакета - Сохраните вывод команды
terraform destroyв файлdestroy-output.txt
5. Загрузите как результат выполнения ДЗ:
- Файл
destroy-output.txt, содержащий вывод командыterraform destroy, который подтверждает удаление S3 бакета - Скриншот вывода команды
terraform apply, чтобы показать, что бакет был успешно создан перед удалением, либо ссылку на GitHub-репозиторий с Terraform-кодом
Подготовка окружения
Шаг 0.1 — Установка Terraform
Проверьте, установлен ли Terraform:
# PowerShell
terraform --version
Если нет — установка через Winget (Windows 10/11):
# PowerShell (запустить как Администратор)
winget install HashiCorp.Terraform
# Перезапустить PowerShell, затем проверить
terraform --version
# Ожидаемый вывод: Terraform v1.x.x
Шаг 0.2 — Проверка AWS CLI и credentials
Terraform использует те же credentials, что и AWS CLI:
# PowerShell
# Проверить, что AWS CLI настроен
aws sts get-caller-identity
# Ожидаемый вывод — JSON с вашим Account ID и UserId:
# {
# "UserId": "AIPAIOSFODNN7EXAMPLE",
# "Account": "123456789012",
# "Arn": "arn:aws:iam::123456789012:user/student"
# }
# Если нет — настроить (ключи берём из AWS Systems Manager Parameter Store)
aws configure
# AWS Access Key ID: [вставьте ключ из Parameter Store]
# AWS Secret Access Key: [вставьте секретный ключ]
# Default region name: eu-central-1
# Default output format: json
Шаг 0.3 — Создание рабочей директории
# PowerShell
mkdir hw07-terraform
cd hw07-terraform
Пошаговое решение
Шаг 1: Создайте файл providers.tf
Файл настраивает провайдер AWS с регионом Frankfurt и фиксирует версию провайдера.
# providers.tf
terraform {
required_version = ">= 1.5.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "eu-central-1" # Frankfurt — регион, указанный в задании
# Credentials берутся автоматически из ~/.aws/credentials
}
Шаг 2: Создайте файл variables.tf
Файл объявляет переменную bucket_name с значением по умолчанию. Замените group на вашу группу (напр. pd2025) и name на ваше имя.
# variables.tf
variable "bucket_name" {
description = "Глобально уникальное имя S3-бакета"
type = string
default = "pd2025-myname-bucket" # замените group и name!
}
variable "environment" {
description = "Название окружения"
type = string
default = "dev"
}
Шаг 3: Создайте файл main.tf
Файл описывает ресурс S3-бакета с тегами name и environment.
# main.tf
resource "aws_s3_bucket" "hw_bucket" {
bucket = var.bucket_name
tags = {
name = var.bucket_name
environment = var.environment
}
}
var.bucket_name ссылается на переменную из variables.tf. Когда нужно создать несколько окружений (dev/prod) — меняем только terraform.tfvars, а не main.tf.
Шаг 4: Инициализация
Terraform скачает провайдер AWS (~25 МБ) и создаст директорию .terraform/.
# PowerShell — в директории hw07-terraform
terraform init
# Ожидаемый вывод:
# Initializing the backend...
# Initializing provider plugins...
# - Finding hashicorp/aws versions matching "~> 5.0"...
# - Installing hashicorp/aws v5.x.x...
# Terraform has been successfully initialized!
Шаг 5: Просмотр плана
Убедитесь, что Terraform планирует создать именно то, что нужно.
# PowerShell
terraform plan
# Ожидаемый вывод:
# Terraform will perform the following actions:
#
# # aws_s3_bucket.hw_bucket will be created
# + resource "aws_s3_bucket" "hw_bucket" {
# + bucket = "pd2025-myname-bucket"
# + tags = {
# + "environment" = "dev"
# + "name" = "pd2025-myname-bucket"
# }
# ...
# }
#
# Plan: 1 to add, 0 to change, 0 to destroy.
BucketAlreadyExists в previewing — значит, имя бакета уже занято другим аккаунтом. Измените значение в variables.tf на уникальное.
Шаг 6: Создание ресурса (terraform apply)
# PowerShell
terraform apply
# Terraform снова покажет план и запросит подтверждение:
# Do you want to perform these actions?
# Terraform will perform the actions described above.
# Only 'yes' will be accepted to approve.
#
# Enter a value: yes <-- введите "yes"
# Ожидаемый вывод после создания:
# aws_s3_bucket.hw_bucket: Creating...
# aws_s3_bucket.hw_bucket: Creation complete after 3s [id=pd2025-myname-bucket]
#
# Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Шаг 7: Проверка создания через AWS CLI
# PowerShell
aws s3 ls
# В списке должен появиться ваш бакет:
# 2025-06-10 12:00:00 pd2025-myname-bucket
Шаг 8: Удаление ресурса и сохранение вывода
Удалите бакет и сохраните вывод в файл destroy-output.txt:
# PowerShell — удалить ресурсы и сохранить вывод
terraform destroy | Tee-Object -FilePath destroy-output.txt
# Terraform запросит подтверждение:
# Enter a value: yes
# Ожидаемый вывод:
# aws_s3_bucket.hw_bucket: Destroying... [id=pd2025-myname-bucket]
# aws_s3_bucket.hw_bucket: Destruction complete after 1s
#
# Destroy complete! Resources: 0 destroyed.
# Проверить, что файл создан
Get-Content destroy-output.txt
Tee-Object выводит текст одновременно в консоль и в файл. Это эквивалент Unix tee. Если вывод не попал в файл — повторите с более явным указанием:
# Альтернатива для PowerShell
terraform destroy 2>&1 | Tee-Object -FilePath destroy-output.txt
Проверка в VS Code
Расширение HashiCorp Terraform
Для удобной работы с .tf-файлами:
- Открыть VS Code Extensions: Ctrl+Shift+X
- Найти и установить HashiCorp Terraform (официальное расширение)
- Откройте папку
hw07-terraformв VS Code: File → Open Folder
Расширение добавляет:
- Подсветку синтаксиса HCL
- Автодополнение ресурсов и аргументов
- Подсказки при ошибках
- Форматирование через
terraform fmt
Терминал в VS Code
# Открыть терминал в VS Code: Ctrl+` (backtick)
# Все команды terraform выполняются здесь же
Что сдавать в LMS
- Файл
destroy-output.txtс полным выводомterraform destroy - Скриншот вывода
terraform apply(видно сообщение «Apply complete! Resources: 1 added») ИЛИ ссылку на GitHub-репозиторий с тремя.tfфайлами
.gitignore добавлены .terraform/ и *.tfstate* — эти файлы не нужно коммитить.
Связь с теорией и примерами
- Концепция IaC — Теория: Infrastructure as Code
- HCL-синтаксис (блоки terraform, provider, resource, variable) — Теория: HCL-синтаксис
- Шпаргалка команд — Справочник
- Полный пример S3 с outputs — Примеры (Пример 1)
- Типичные ошибки (одинаковое имя бакета, забыть destroy) — Ошибки
Поздравляем с завершением курса Docker & Cloud Tech!
За 7 уроков вы прошли путь от основ контейнеризации до Infrastructure as Code:
- Docker: образы, контейнеры, Dockerfile, Docker Compose
- Облачные вычисления: AWS Global Infrastructure, IAM, EC2, S3
- AWS CLI и Boto3: управление инфраструктурой из кода
- Terraform: декларативное описание инфраструктуры как кода
Вы готовы к работе с облачной инфраструктурой в реальных проектах!