跳转到内容

Terraform基础架构

Terraform 是一款开源的基础设施即代码工具,可帮助您安全、可预测地创建、变更和改进基础设施。

Terraform 基础设施生成器用于创建 Terraform 基础设施项目。生成的应用程序通过 Checkov 安全检查集成了安全最佳实践。

您可以通过两种方式生成新的 Terraform 项目:

  1. 安装 Nx Console VSCode Plugin 如果您尚未安装
  2. 在VSCode中打开Nx控制台
  3. 点击 Generate (UI) 在"Common Nx Commands"部分
  4. 搜索 @aws/nx-plugin - terraform#project
  5. 填写必需参数
    • name: tf-infra
  6. 点击 Generate
参数 类型 默认值 描述
name 必需 string - The name of the project.
type string application Whether this is a terraform lib (re-usable modules) or app (deployable).
directory string packages The directory of the new project.

生成器会根据项目类型创建不同的文件结构:

对于应用项目(--type=application),生成器会创建完整的 Terraform 应用并包含远程状态管理:

  • 文件夹src
    • main.tf 主 Terraform 配置文件
    • providers.tf 包含 S3 后端配置的 Provider 配置
    • variables.tf 输入变量定义
    • outputs.tf 输出值定义
    • 文件夹env 环境特定变量文件
      • dev.tfvars 开发环境变量
  • 文件夹bootstrap 远程状态初始化配置
    • main.tf 状态存储的 S3 桶和策略
    • providers.tf AWS provider 配置
    • variables.tf 初始化变量定义
  • project.json 项目配置和构建目标

对于库项目(--type=library),生成器会创建更简洁的可复用 Terraform 模块结构:

  • 文件夹src
    • main.tf 主 Terraform 模块文件
  • project.json 项目配置和构建目标

您可以在 src/main.tf 中开始编写 Terraform 基础设施代码,例如:

src/main.tf
locals {
account_id = data.aws_caller_identity.current.account_id
aws_region = data.aws_region.current.id
}
resource "null_resource" "print_info" {
# triggers = {
# always_run = timestamp()
# }
provisioner "local-exec" {
command = "echo 'AWS Region: ${local.aws_region}, AWS Account: ${local.account_id}, Environment: ${var.environment}'"
}
}
# 在此声明您的基础设施
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-unique-bucket-name"
}

如需引用其他项目(库)中的模块,可以按如下方式操作:

module "lib_module" {
source = "../../path/to/my-lib/src"
}

这将自动更新 Nx 依赖图,在消费应用和库之间建立依赖关系。

src/env/*.tfvars 文件中配置环境特定变量。

要添加新环境,需创建新的 src/env/<environment>.tfvars 文件并定义环境变量,同时在 project.json 中为 apply, destroy, init, plan 添加新环境配置。例如添加 prod 环境:

# 生产环境变量
environment = "prod"
region = "us-west-2"

远程状态初始化(仅应用项目)

Section titled “远程状态初始化(仅应用项目)”

对于应用项目,在部署基础设施前需要初始化远程状态后端(创建存储 Terraform 状态文件的 S3 桶):

Terminal window
pnpm nx run tf-infra:bootstrap

可用目标取决于项目类型:

使用 validate 目标验证 Terraform 配置:

Terminal window
pnpm nx run tf-infra:validate

使用 fmt 目标格式化 Terraform 代码:

Terminal window
pnpm nx run tf-infra:fmt

使用 test 目标通过 Checkov 进行基础设施安全检查:

Terminal window
pnpm nx run tf-infra:test

安全测试结果位于根目录 dist 文件夹下的 dist/packages/<my-terraform-project>/checkov

以下目标仅适用于应用类型项目:

执行变更前可通过 plan 目标查看 Terraform 计划:

Terminal window
pnpm nx run tf-infra:plan

这将在 dist/packages/<my-terraform-project>/terraform/dev.tfplan 生成计划文件。

使用 init 目标初始化 Terraform 工作目录:

Terminal window
pnpm nx run tf-infra:init

规划完成后,使用 apply 目标将基础设施部署到 AWS:

Terminal window
pnpm nx run tf-infra:apply

从 Terraform 配置中获取输出值:

Terminal window
pnpm nx run tf-infra:output

使用 destroy 目标销毁基础设施:

Terminal window
pnpm nx run tf-infra:destroy

清理状态存储的 S3 桶等初始化资源:

Terminal window
pnpm nx run tf-infra:bootstrap-destroy

有关 Terraform 的更多信息,请参考 Terraform 文档AWS Provider 文档