--- title: "CTP Topic 48 Terraform vs Terragrunt" type: source tags: - Terraform - Terragrunt - IaC - CTP - DevOps date: 2026-04-14 --- ## Source File - [[Cloud & DevOps/Public-Cloud-Learning-Sessions/03_Terraform/ctp-topic-48-terraform-vs-terragrunt.md]] ## Summary(用中文描述) - 核心主题:Terraform 与 Terragrunt 的深度对比分析,帮助工程师在战略设计层面和开发调试层面理解两者的差异与适用场景 - 问题域:IaC 工具选型、多云环境管理、企业级 Terraform 状态管理 - 方法/机制:Terraform 由 HashiCorp 开发的 Golang 应用,通过状态文件将期望状态绑定到实际环境;Terragrunt 作为 Terraform 的轻量级包装器,践行 DRY 原则,通过模板化管理 provider 和 remote state 块,避免多环境重复声明 - 结论/价值:两者命令和语言高度一致,但定位不同——Terraform 保持云无关的核心能力,Terragrunt 优化跨环境的可复用性和配置 DRY ## Key Claims(用中文描述) - Terraform 由 HashiCorp 开发,通过状态文件将基础设施的期望状态与实际运行环境绑定,企业级使用必须将状态文件存放在安全可访问的位置 - Terragrunt 是 Terraform 的轻量包装器,践行 DRY 原则,将 provider 和 remote state 配置抽取为可复用模板,避免跨多环境重复硬编码 - Terraform 与 Terragrunt 在命令和语言层面高度一致,Terragrunt plan 即 Terraform plan,HCL 语法完全兼容 - Terraform Enterprise 提供 CI 平台和 workspaces;Gruntwork 提供预构建可定制模块和原生 AWS landing zone 方案 - Atlantis 将 Terraform 与 GitHub 深度集成,实现 Pull Request 驱动的自动化基础设施部署 ## Key Quotes > "To run Terraform consistently, it ties the desired state to the existing environment using a state file." — Terraform 状态管理的核心机制说明 > "Terragrunt offers a way to use information in a repeatable way without hard coding values." — Terragrunt 践行 DRY 原则的核心价值 > "Terraform's core is cloud-agnostic, while its vendor-specific parts require separate modules for each cloud provider." — Terraform 厂商相关性的局限 ## Key Concepts - [[InfrastructureAsCode]]:通过代码定义和管理基础设施,实现版本控制和自动化部署 - [[DrYPrinciple]](Don't Repeat Yourself):Terragrunt 的核心理念,通过模板复用减少配置重复 - [[TerraformState]]:Terraform 通过状态文件将代码定义的期望状态与实际运行环境绑定 - [[Terragrunt]]:Terraform 的轻量包装器,优化多环境配置管理 ## Key Entities - [[HashiCorp]]:Terraform 的创始公司,开发和维护 Terraform 核心产品 - [[Gruntwork]]:提供预构建 Terraform 模块库和 AWS landing zone 方案的 SaaS 平台 - [[Atlantis]]:开源工具,将 Terraform 与 GitHub/GitLab 集成,实现 PR 驱动的 IaC 自动化 - [[TerraformEnterprise]]:HashiCorp 提供的 Terraform 企业版,包含 CI 平台和 workspace 功能 ## Connections - [[Gruntwork]] ← uses ← [[Terraform]] - [[Gruntwork]] ← uses ← [[Terragrunt]] - [[Atlantis]] ← extends ← [[Terraform]](CI/CD 集成) - [[TerraformEnterprise]] ← is_enterprise_version_of ← [[Terraform]] ## Contradictions - 无已知冲突内容 ## Related Pages - [[CTP Topic 9 CI CD with Gruntwork]] — Gruntwork 在 CI/CD 中的实际应用 - [[CTP Topic 32 Using Atlantis CICD for Infrastructure Deployments]] — Atlantis 集成详解 - [[CTP Topic 16 Cross-account Terraform modules]] — 跨账户 Terraform 模块管理