Ответ
За последний месяц я написал и отрефакторил примерно 500-700 строк кода на HCL (Terraform). Основной объём работы пришёлся на:
- Разработку переиспользуемых модулей для стандартизации создания ресурсов AWS (VPC с NAT Gateway, EKS кластеров, RDS инстансов).
- Рефакторинг существующей конфигурации для улучшения структуры и использования
for_eachвместоcount. - Добавление новых окружений (staging) на основе модулей продакшена.
Пример модуля для создания безопасного S3 бакета для логов:
# modules/s3_logs_bucket/main.tf
variable "environment" {
type = string
description = "Название окружения (prod, staging, dev)"
}
variable "project_name" {
type = string
description = "Название проекта"
}
resource "aws_s3_bucket" "logs" {
bucket = "${var.project_name}-logs-${var.environment}"
tags = {
Environment = var.environment
ManagedBy = "Terraform"
}
}
# Включаем versioning для восстановления данных
resource "aws_s3_bucket_versioning" "logs" {
bucket = aws_s3_bucket.logs.id
versioning_configuration {
status = "Enabled"
}
}
# Блокируем публичный доступ к бакету
resource "aws_s3_bucket_public_access_block" "logs" {
bucket = aws_s3_bucket.logs.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
# Включаем server-side шифрование по умолчанию
resource "aws_s3_bucket_server_side_encryption_configuration" "logs" {
bucket = aws_s3_bucket.logs.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}