CertMaster

🏗️ Testing & Code Quality

terraform test, validation, checkov, tfsec, pre-commit hooks

Terraform Associate · TF-Associate · ⏱️ 18 min · ❓ 3 вопр.

✅ Built-in Variable Validation

В переменной блок `validation`: `condition` и `error_message`. Проверяется во время plan — до apply не доходит. Например, регион должен принимать только определённые значения или проверка формата типа инстанса.

🧪 terraform test (Terraform 1.6+)

Файлы `.tftest.hcl`. Блок `run` — запускает plan или apply. `assert` — проверяет условия. `expect_failures` — тестирует сценарии с ожидаемыми ошибками. Создаёт реальную инфраструктуру → тест → удаляет (нужен sandbox account).

🔍 Static Analysis: checkov & tfsec

checkov — Python, более 1000 проверок политик безопасности (CIS Benchmark). `checkov -d .` или `checkov -f main.tf`. tfsec — Go, быстрый, формат SARIF, нативная поддержка в GitHub Actions. Trivy — all-in-one (IaC + container + SBOM). Добавляйте вместе в CI/CD pipeline.

🎣 Pre-commit Hooks

Фреймворк pre-commit: `.pre-commit-config.yaml`. Хуки: `terraform fmt --check`, `terraform validate`, `terraform-docs` (автогенерация README), `checkov`, `tfsec`. Автоматически проверяет перед git commit. `pre-commit install` — однократная настройка.
💡 Ключевые моменты
📋 Пример кода
# Variable validation
variable "environment" {
  type = string
  validation {
    condition     = contains(["dev", "staging", "prod"], var.environment)
    error_message = "Environment faqat dev, staging yoki prod bo'lishi mumkin."
  }
}

variable "aws_region" {
  type = string
  validation {
    condition     = can(regex("^[a-z]{2}-[a-z]+-[0-9]$", var.aws_region))
    error_message = "Region format noto'g'ri (masalan: us-east-1)."
  }
}

# terraform test (tests/main.tftest.hcl)
run "test_s3_bucket_created" {
  command = apply

  assert {
    condition     = aws_s3_bucket.main.bucket_prefix == "my-app-"
    error_message = "S3 bucket prefix noto'g'ri"
  }
}

# pre-commit config (.pre-commit-config.yaml)
# repos:
#   - repo: https://github.com/antonbabenko/pre-commit-terraform
#     hooks:
#       - id: terraform_fmt
#       - id: terraform_validate
#       - id: terraform_tfsec
🎯 Советы для экзамена
⚠️ Частые ошибки
🧠 Для запоминания: "VTP" = Validate (синтаксис), Test (функциональность), Policy (безопасность) — 3 уровня тестирования Terraform

Проверьте себя по теме «Testing & Code Quality»

Бесплатные интерактивные тесты, пробный экзамен и полные уроки — на платформе CertMaster.

Начать бесплатно →