Последняя проверка: май 2026 г.
Разверните сервисы AWS для экзамена CLF-C02 с помощью чистого Terraform: пошаговое руководство с привязкой каждого блока к разделам экзамена. Код также совместим с OpenTofu.
К концу этой лабораторной работы вы подготовите, используя чистый Terraform, наименьшую реалистичную первую рабочую нагрузку AWS — частный зашифрованный бакет S3, роль IAM с минимальными привилегиями, инстанс EC2 бесплатного уровня и оповещение о выставлении счетов, которое отправит вам электронное письмо раньше, чем AWS. Каждый ресурс соответствует одной из четырех областей экзамена CLF-C02.
Каждый ресурс — это чистый Terraform — тот же код работает без изменений в OpenTofu. Здесь нет переменных, модулей, удаленного состояния. Просто вставьте следующие фрагменты в один файл main.tf, запустите terraform init один раз, а затем terraform apply пошагово.
>= 1.5 или OpenTofu >= 1.6.us-east-1 по умолчанию, потому что именно там централизуются данные о выставлении счетов.Все ресурсы в этой лабораторной работе укладываются в Бесплатный уровень AWS для новых учетных записей (12 месяцев с момента регистрации):
t3.micro: 750 часов/месяц бесплатно.Вне Бесплатного уровня весь стек стоит менее $10/месяц, даже при круглосуточной работе. Тем не менее: за неактивные ресурсы все равно взимается плата после истечения Бесплатного уровня — уничтожьте их, когда закончите. Оповещение о выставлении счетов, которое мы настроим в Шаге 4, является вашей страховкой, если вы забудете.
Любая рабочая нагрузка начинается с указания Terraform, какую версию самого себя мы ожидаем и какого провайдера AWS будем использовать. Мы привязываем провайдера AWS к ~> 5.60 и по умолчанию используем us-east-1 — старейший регион AWS, где централизуются данные о выставлении счетов и где большинство сервисов запускаются в первую очередь.
Вставьте это в новый файл main.tf для начала. Все последующие шаги лабораторной работы находятся в том же файле.
Блок default_tags в провайдере прикрепляет одни и те же теги ко всем ресурсам, которые мы будем создавать и которые поддерживают тегирование. AWS Cost Explorer + отчеты о распределении затрат группируют расходы по тегам — правильно настроить это с первого дня является самой дешевой инвестицией в контроль затрат, которую вы когда-либо сделаете, и это напрямую соответствует области Выставление счетов и ценообразование экзамена CLF-C02.
terraform {
required_version = ">= 1.5"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.60"
}
}
}
provider "aws" {
region = "us-east-1"
default_tags {
tags = {
Project = "certlabpro-clf-c02"
ManagedBy = "terraform"
Environment = "lab"
}
}
}S3 является уровнем хранения данных, используемым почти в каждой рабочей нагрузке AWS — на него ссылается каждая область экзамена CLF-C02. Мы создаем один бакет, ограничиваем публичный доступ (по умолчанию включен для новых бакетов с 2023 года, но явное указание лучше), и включаем серверное шифрование с AES256.
Эти три ресурса вместе — бакет, блок публичного доступа, шифрование — являются минимальным ответственным набором по умолчанию для любого бакета S3. Экзамен CLF-C02 рассматривает это как модель общей ответственности: AWS предоставляет нам безопасную платформу, но мы настраиваем шифрование + контроль доступа. Бакет является частью „ответственности клиента“.
resource "aws_s3_bucket" "app_data" {
bucket_prefix = "certlabpro-clf-c02-"
}
resource "aws_s3_bucket_public_access_block" "app_data" {
bucket = aws_s3_bucket.app_data.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_server_side_encryption_configuration" "app_data" {
bucket = aws_s3_bucket.app_data.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}EC2 — это сервис AWS, который каждый кандидат CLF-C02 должен знать досконально. Мы используем самый маленький тип инстанса, подходящий для бесплатного уровня (t3.micro), и предоставляем ему профиль инстанса IAM, чтобы он мог читать из бакета, который мы создали в Шаге 2 — без встраивания учетных данных AWS в сам инстанс. Это канонический шаблон AWS для аутентификации приложения в AWS и он встречается в нескольких вариантах вопросов CLF-C02.
Блок data динамически получает последний AMI Amazon Linux 2023 — привязка к конкретному AMI ID нарушила бы работу лаборатории, когда AWS выведет образ из эксплуатации. Группа безопасности запрещает весь входящий трафик; в реальной рабочей нагрузке мы бы добавили правила для входящего трафика, но для этой лаборатории заблокированный инстанс является правильным значением по умолчанию.
data "aws_ami" "al2023" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["al2023-ami-*-kernel-6.1-x86_64"]
}
}
resource "aws_iam_role" "ec2_app" {
name = "certlabpro-clf-c02-ec2-app"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "ec2.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy" "ec2_app_s3_read" {
name = "read-app-data-bucket"
role = aws_iam_role.ec2_app.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = ["s3:GetObject", "s3:ListBucket"]
Resource = [aws_s3_bucket.app_data.arn, "${aws_s3_bucket.app_data.arn}/*"]
}]
})
}
resource "aws_iam_instance_profile" "ec2_app" {
name = "certlabpro-clf-c02-ec2-app"
role = aws_iam_role.ec2_app.name
}
resource "aws_security_group" "ec2_app" {
name = "certlabpro-clf-c02-ec2-app"
description = "Locked down by default; add ingress rules per workload."
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "app" {
ami = data.aws_ami.al2023.id
instance_type = "t3.micro"
iam_instance_profile = aws_iam_instance_profile.ec2_app.name
vpc_security_group_ids = [aws_security_group.ec2_app.id]
metadata_options {
http_endpoint = "enabled"
http_tokens = "required" # IMDSv2 only — required for SCS-C03 best practice
}
}CLF-C02 посвящает 16% экзамена Выставлению счетов, ценообразованию и поддержке. Самое конкретное, что вы можете создать в этой области, это оповещение CloudWatch о выставлении счетов: AWS публикует оценочные расходы на уровне учетной записи как метрику, и мы устанавливаем порог, при превышении которого мы хотим получать уведомления. Оповещение публикуется в теме SNS, которая отправляет нам электронные письма.
Оповещения о метриках выставления счетов должны создаваться в us-east-1 независимо от того, где выполняются ваши рабочие нагрузки — поэтому мы по умолчанию использовали us-east-1 в Шаге 1. Вам также нужно будет один раз включить Оповещения о выставлении счетов в консоли учетной записи в разделе Billing → Billing preferences → Receive Billing Alerts. Terraform не может переключить эту настройку; это настройка на уровне учетной записи, находящаяся вне инфраструктуры как кода.
После terraform apply AWS отправит электронное письмо с подтверждением на адрес, указанный в email_endpoint — нажмите Confirm subscription один раз, и оповещение действительно будет доставлено вам при превышении порога.
resource "aws_sns_topic" "billing_alerts" {
name = "certlabpro-clf-c02-billing-alerts"
}
resource "aws_sns_topic_subscription" "billing_alerts_email" {
topic_arn = aws_sns_topic.billing_alerts.arn
protocol = "email"
endpoint = "you@example.com" # replace with your real email
}
resource "aws_cloudwatch_metric_alarm" "monthly_bill_over_10" {
alarm_name = "certlabpro-clf-c02-monthly-bill-over-10-usd"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = 1
metric_name = "EstimatedCharges"
namespace = "AWS/Billing"
period = 21600 # 6 hours — billing metric is slow-moving
statistic = "Maximum"
threshold = 10
alarm_description = "Estimated monthly AWS charges exceeded $10 USD."
alarm_actions = [aws_sns_topic.billing_alerts.arn]
dimensions = {
Currency = "USD"
}
}Стандартная команда terraform destroy удаляет все ресурсы, созданные в этой лабораторной работе. Два замечания:
Project = certlabpro-clf-c02 и убедиться, что ничего не осталось.CLF-C02 охватывает широкий каталог сервисов — RDS, Lambda, детали VPC, CloudFront, Route 53, ECS, EKS, Aurora, Elastic Beanstalk, AppSync и многие другие. Мы намеренно не предусматриваем их в этой базовой лабораторной работе.
Цель CLF-C02 — это широкое концептуальное понимание, а не глубокое предоставление услуг по отдельности. Четыре шага выше затрагивают по одному ресурсу из каждой из четырех областей экзамена — Концепции облака (IAM + S3 как примитивы платформы и хранения), Безопасность и соответствие требованиям (IAM с минимальными привилегиями, шифрование в состоянии покоя, IMDSv2), Облачные технологии и сервисы (EC2 как канонический вычислительный сервис) и Выставление счетов, ценообразование и поддержка (оповещение CloudWatch о выставлении счетов). Это правильная структура для экзамена.
Для охвата сервисов по отдельности см. разделы Просмотр и Editorial этой страницы сертификата — они содержат ссылки на каждый сервис в рамках CLF-C02 с однострочными описаниями и привязками к областям экзамена. Практическая ценность этой лабораторной работы заключается в понимании того, как четыре столпа связаны между собой с первого дня, а не в ознакомлении со всеми более чем 200 сервисами AWS.