

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Terraform 入门：AWS CDK 和 AWS 专家指南 CloudFormation
<a name="introduction"></a>

*Steven Guggenheimer，Amazon Web Services（AWS）*

*2024 年 3 月*（[文档历史记录](doc-history.md)）

如果您仅在配置云资源方面的经验属于以下领域 AWS，那么除了[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)和[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)之外，您使用基础设施即代码 (IaC) 工具的经验可能有限。实际上，类似的工具，例如Hashicorp Terraform，你可能完全不熟悉。但是，你进入云之旅的深度越深，遇到Terraform的不可避免性就越大。熟悉其核心概念绝对对你有利。

虽然 Terraform、 AWS CDK、和 CloudFormation 实现了相似的目标并有许多共同的核心概念，但还是有许多不同之处。如果你是第一次接触 Terraform，你可能还没有为这些差异做好准备。毕竟 AWS CDK ， CloudFormation堆栈都位于其中 AWS 账户，因此，通过这种方式，它们与它们维护的大多数资源有着直接的关系。Terraform 不基于任何单一云提供商的环境。这使它能够灵活地支持各种不同的提供商，但它必须维护来自远程位置的资源。

本指南有助于揭开Terraform背后的核心概念的神秘面纱，以帮助您应对遇到的任何Iac挑战。它重点介绍 Terraform 如何使用提供者、模块和状态文件等概念来配置资源。它还将 Terraform 的概念与 AWS CDK 和 CloudFormation 执行类似操作的方式进行了对比。

**注意**  
 AWS CDK 可帮助开发人员使用编程编码语言部署 CloudFormation 堆栈。运行后`cdk synth`，您的代码将转换为 CloudFormation模板。从那时起， AWS CDK 和之间的过程是相同的 CloudFormation。为了简洁起见，本指南通常用 CloudFormation 术语来提及 AWS Iac流程，但比较同样适合。 AWS CDK

## CloudFormation 和 Terraform 术语
<a name="cf-nshort-and-terraform-terminology"></a>

在将 Terraform 与 AWS CDK 和进行比较时 CloudFormation，由于描述它们时使用的术语不一致，因此很难协调 IaC 的核心概念。以下是这些术语以及本指南将如何引用它们：
+ **堆栈** **—* *堆栈*是 IaC，它部署到 CI/CD 管道中并可作为单个单元进行跟踪。*尽管这个术语很常见 CloudFormation，但Terraform并没有真正使用这个术语。Terraform 堆栈是一个已部署的根模块，包含其所有子模块。但是，为了避免与 “*模块*” 一词混淆，本指南使用术语*堆栈*来描述这两个工具的单一部署。
+ **状态** *-*状态*是 IaC 部署堆栈中当前跟踪的所有资源及其当前配置。*如[了解 Terraform 状态和后端](states-and-backends.md)本节所述，Terraform 更多地使用了 “*状态*” 一词。 CloudFormation这是因为在 Terraform 中维护状态更加明显，但是跟踪和更新状态同样重要。 CloudFormation
+ **IaC 文件 —** **IaC 文件*是包含基础设施即代码 (IaC) 语言的单个文件。* CloudFormation 指单个 CloudFormation 文件作为*模板*。但是，Terraform 中的[模板](https://developer.hashicorp.com/terraform/language/expressions/strings#string-templates)[和模板文件](https://developer.hashicorp.com/terraform/language/functions/templatefile)完全不同。等同于 Terraform 中 CloudFormation 模板的被称为*配置*文件。为了最大限度地减少本指南中的混乱，术语*文件*或 *IaC 文件*用于指代 CloudFormation 模板和 Terraform 配置文件。

下表比较了用于 CloudFormation 和 Terraform 的术语。此表的目的是显示相似之处。这些不是 one-to-one比较。 CloudFormation 和 Terraform 之间的每个概念至少略有不同。本指南的相关部分对概念进行了深入的解释。


****  

| CloudFormation 术语 | Terraform 术语 | 本指南的章节 | 
| --- | --- | --- | 
| CDK 接口（例如 IBucket） | 数据来源 | [了解 Terraform 数据源](data-sources.md) | 
| 更改集 | 规划 | [了解 Terraform 模块](modules.md) | 
| 条件函数 | 条件表达式 | [了解 Terraform 函数、表达式和元参数](functions-expressions.md) | 
| DependsOn 属性 | depends\$1on元论点 | [了解 Terraform 函数、表达式和元参数](functions-expressions.md) | 
| 内置函数 | 函数 | [了解 Terraform 函数、表达式和元参数](functions-expressions.md) | 
| 模块 | 模块 | [了解 Terraform 模块](modules.md) | 
| 输出 | 输出值 | [了解 Terraform 变量、局部值和输出](variables-locals-outputs.md) | 
| 参数 | 变量 | [了解 Terraform 变量、局部值和输出](variables-locals-outputs.md) | 
| 注册表 | 提供商 | [了解 Terraform 提供商提供商](providers.md) | 
| 模板 | 配置文件 | 全部 | 