菜单

Terraform 和基础设施即代码

相关源文件

目的与范围

本文档涵盖了基础设施即代码 (IaC) 工具的 gitignore 模式,特别是 Terraform、Packer 和 Terragrunt。它解释了在使用这些工具时,哪些文件应从版本控制中排除以及原因。有关构建工具和依赖管理的一般信息,请参阅构建工具和依赖管理

基础设施即代码工具简介

基础设施即代码 (IaC) 是通过机器可读的定义文件而非手动流程来管理和配置基础设施的实践。本文档涵盖的主要工具包括

图示:基础设施即代码工具关系

来源:Terraform.gitignore Packer.gitignore community/Terragrunt.gitignore

Terraform Gitignore 模式

Terraform 的 gitignore 模板排除了数类不应提交到版本控制中的文件

本地 Terraform 目录

**/.terraform/*

.terraform 目录包含在 terraform init 期间下载的提供程序插件和模块。这些是特定于环境的,应在每个环境中重新下载。

来源:Terraform.gitignore1-2

状态文件

*.tfstate
*.tfstate.*
.terraform.tfstate.lock.info

Terraform 状态文件跟踪 Terraform 创建的实际资源。它们通常包含敏感数据,并且特定于环境。锁定信息文件是 Terraform 操作期间创建的临时文件。

来源:Terraform.gitignore4-6 Terraform.gitignore26-27

崩溃日志

crash.log
crash.*.log

崩溃日志是在 Terraform 遇到错误并崩溃时生成的。它们可能包含有关您的基础设施的敏感信息。

来源:Terraform.gitignore8-10

变量定义文件

*.tfvars
*.tfvars.json

变量定义文件通常包含 API 密钥、密码和其他机密等敏感数据,这些数据不应存储在版本控制中。

来源:Terraform.gitignore12-17

覆盖文件

override.tf
override.tf.json
*_override.tf
*_override.tf.json

覆盖文件用于自定义特定环境的基础设施,通常不应纳入版本控制。但是,如果需要,您可以使用否定模式包含特定的覆盖文件。

来源:Terraform.gitignore19-24 Terraform.gitignore29-30

CLI 配置文件的配置

.terraformrc
terraform.rc

CLI 配置文件可能包含敏感的提供程序凭据,并且是用户特定的。

来源:Terraform.gitignore35-37

图示:Terraform 工作流和生成的文件

来源:Terraform.gitignore

Packer Gitignore 模式

Packer 是一个用于从单一源配置为多种平台创建相同机器镜像的工具。其 gitignore 模板排除

缓存对象

packer_cache/

Packer 缓存目录包含下载的 ISO 文件和其他工件。这些是大型文件,应在每个环境中重新下载。

来源:Packer.gitignore1-2

崩溃日志

crash.log

与 Terraform 类似,Packer 会生成可能包含敏感信息的崩溃日志。

来源:Packer.gitignore4-5

变量文件

*.pkrvars.hcl

Packer 的变量文件可能包含凭据等敏感数据,不应纳入版本控制。

来源:Packer.gitignore7-13

构建工件

*.box

.box 文件是已构建的机器镜像,它们是大型二进制文件,不应存储在版本控制中。

来源:Packer.gitignore15-16

图示:Packer 工作流和生成的文件

来源:Packer.gitignore

Terragrunt Gitignore 模式

Terragrunt 是 Terraform 的一个轻量级包装器,它提供了额外工具来处理多个 Terraform 模块。其社区 gitignore 模板排除

.terragrunt-cache

.terragrunt-cache 目录包含缓存的 Terraform 配置和下载的模块。此目录在运行 Terragrunt 命令时重新创建,不应纳入版本控制。

来源:community/Terragrunt.gitignore1-3

IaC Gitignore 使用最佳实践

在使用基础设施即代码工具时,请遵循以下管理 gitignore 文件的最佳实践:

类别最佳实践原理
状态文件将状态存储在远程后端(S3、Azure Storage 等)支持团队协作,并将敏感数据排除在版本控制之外
秘密使用 Vault 或 AWS KMS 等密钥管理工具提供对敏感值的安全处理,而不是将它们存储在 .tfvars 文件中
变量文件提交包含虚拟/示例值的模板文件帮助新团队成员理解需要哪些变量
覆盖文件改用标准化的环境文件夹为大多数用例提供比覆盖文件更好的组织

当在项目中同时使用不同的 IaC 工具时,将它们的 gitignore 模式合并到一个文件中。例如,如果在项目中同时使用 Terraform 和 Packer,请在项目的 .gitignore 文件中包含这两个模板的模式。

始终排除的文件类别

图示:基础设施即代码应排除的文件类别

来源:Terraform.gitignore Packer.gitignore community/Terragrunt.gitignore

总结

基础设施即代码工具的 gitignore 模板侧重于排除

  1. 包含已下载插件和模块的本地缓存目录
  2. 包含敏感数据和基础设施映射的状态文件
  3. 包含凭据和机密的配置文件
  4. 仅用于本地使用的覆盖文件
  5. 构建的工件和大型二进制文件
  6. 崩溃日志和临时文件

通过正确配置这些工具的 gitignore 设置,您可以维护干净的存储库,而不会暴露敏感信息或将不必要的大型文件纳入版本控制。