Terraform 最佳实践

2025-06-04

Terraform 最佳实践

原帖发布于此处:Terraform 最佳实践

Terraform 是一个开源工具,允许您使用简单的声明性编程语言为各种云提供商(例如 AWS、Azure、Google Cloud、DigitalOcean 等)定义基础设施。

本指南假设您对 Terraform 有基本的了解。我以 AWS 提供商的 Terraform 为例进行了说明。其他提供商的方案也类似。

我将使用这个 repo 来解释所有示例:Terraform-examples

始终使用最新的 Terraform 版本(当前版本是 Terraform v0.12.x)

我们应该始终选择最新的 Terraform 版本。原因是 Terraform 有时不具备向后兼容性。您将始终只能使用所选的版本。

始终使用 var-file 进行 Terraform 规划

我们应该始终使用 var-file 变量。这样可以方便地为不同的环境和模块维护不同的变量。变量可以使用不同的方法,例如为 var 变量赋值字符串、为环境变量赋值以及使用 var-file 变量。

查看本指南了解所有选项。输入变量指南。
查看此示例。变量示例

管理 tfstate 文件的 s3 后端

每当我们使用 Terraform(Terraform Apply)创建任何资源时,它都会将状态维护在 tfstate 文件中。尝试运行变量示例。它将在本地创建 tfstate 文件。如果我们修改或添加任何资源,每次执行 Terraform Apply 后,tfstate 都会发生变化。
在团队中,多个团队成员会修改 Terraform 代码。因此,我们应该在版本控制系统(例如 S3)中维护 tfstate。
查看此示例S3 后端示例

使用 dynamo db 锁定 tfstate 修改

多个团队成员会同时运行 Terraform Apply,这可能会引发问题。我们应该使用 Dynamo DB 进行锁定。在锁定解除之前,其他 Terraform Apply 进程无法更改 tfstate。
请查看此S3 后端示例

在 Terraform 状态文件存储桶上启用版本控制

首先,我们应该使用 S3 远程存储来管理 tfstate。我们应该在此 S3 远程存储上启用版本控制。
原因:如果当前 tfstate 在生产环境中出现任何问题,我们随时可以恢复到之前的版本。
查看此示例变量示例

使用 Terraform 导入现有资源

假设我们之前已经创建了资源。现在我们想将其与 Terraform 代码一起使用。这可以通过 来实现terraform import。它会将这些资源作为 Terraform 的一部分。
查看此示例导入​​示例

使用共享模块

Terraform 社区已在 Terraform 注册表中共享了通用模块,例如 ecs-fargate、ecs-service 和 s3 bucket 创建。

模块注册表
查看此示例共享模块示例

使用 terraform 模块管理不同的环境(dev/stage/prod)

模块是用于管理多种资源的容器,这些资源可以协同使用。我们应该使用 Terraform 模块来管理不同环境之间的代码。每个 Terraform 配置都有其根模块,该模块由主工作目录中 .tf 文件中定义的资源组成。我们将通用资源包装在模块中,以便在不同的环境中重复使用。我们可以使用 Git 版本系统来管理模块。查看共享模块示例。它托管在 Github 上,我们正在直接使用它。
查看此模块结构示例:模块示例

如果您想详细了解 Terraform,请查看以下书籍:

Terraform 详细信息

文章来源:https://dev.to/cryptic022/terraform-b​​est-practices-2a1n
PREV
Git 工作流程以及我对 Git 别名的新喜爱
NEXT
为使开发人员估算更准确,需要考虑的 11 件事