AWS 上的 Terraform:入门指南

2025-06-08

AWS 上的 Terraform:入门指南

Terraform 概述

当人们听到“地球化”一词时,他们通常会想到改造行星——这个概念由科学家和梦想家推广,例如伊隆·马斯克,他设想让火星变得适合居住。在这种情况下,改造行星意味着开发一个适合居住的岩石或死行星,以便它能够拥有维持生命所需的必要条件。改造火星将涉及产生大气层、引入水源和培育植物,以创造人类可以生存的条件。同样,在软件开发领域,HashiCorp 的Terraform遵循相同的原则——只不过它不是重塑行星,而是将AWS、GCP 和 vSphere云平台或内部资源转变为应用程序可以蓬勃发展的结构化环境。正如行星地球化为生命奠定了基础一样,Terraform 作为基础设施即代码 (IaC)为可扩展和自动化的基础设施奠定了基础,软件可以在其中无缝运行。

什么是 Terraform?

Terraform 是由 HashiCorp 开发的一款基础设施即代码 (IaC)工具。它允许用户使用易于理解的配置文件定义云端和本地基础设施。该工具提供了一致的工作流程,用于在整个生命周期内配置、管理和自动化基础设施。

为什么要使用 Terraform?

  1. 简单性——所有基础设施都在一个文件中定义,从而可以轻松跟踪变化。
  2. 协作——代码可以存储在 GitHub 等版本控制系统中,以便团队协作。
  3. 可重复性——配置可以在不同的环境中重复使用(例如开发和生产)。
  4. 资源清理——确保未使用的资源被正确销毁,以避免不必要的成本。

Terraform 不是什么

  1. 不是软件部署工具——它不管理或更新现有基础设施上的软件。
  2. 无法修改不可变资源——某些更改(例如,VM 类型)需要销毁并重新创建资源。
  3. 不管理外部资源——Terraform 仅管理其配置文件中明确定义的内容。

Terraform 工作流程

  1. 本地安装的 Terraform – CLI 在用户的机器上运行。
  2. 使用提供商– 这些将 Terraform 连接到云服务(AWS、Azure、GCP 等)。
  3. 需要身份验证——API 密钥或服务帐户验证对云平台的访问。

Terraform 安装

转到此链接并按照符合您系统规格的命令进行操作

关键 Terraform 命令

  1. terraform init– 下载提供商插件并初始化工作目录。
  2. terraform plan– 显示 Terraform 在应用之前将进行哪些更改。
  3. terraform apply– 提供定义的基础设施。
  4. terraform destroy– 删除 Terraform 配置中定义的所有资源。

Terraform 文件及其生成

Terraform 使用多个文件来管理基础架构状态、配置和依赖项。以下概述了关键文件、它们代表的含义以及触发它们创建或更新的 Terraform 命令:

  1. 配置文件(*.tf文件):

    • 用途:这些文件(例如main.tfvariables.tfoutputs.tf等)由您编写,用于定义您的基础架构。它们描述了您希望配置的资源以及它们之间的相互关系。
    • 创建时间:您可以手动创建它们。它们构成了 Terraform 理解和管理您的环境的蓝图。
  2. Terraform 状态文件(terraform.tfstate):

    • 用途:此文件跟踪您基础架构的当前状态。它将您的配置映射到实际资源,确保 Terraform 能够确定需要进行哪些更改。
    • 生成/更新时间:
      • 之后terraform apply运行 时terraform apply,Terraform 会根据您的配置配置您的基础架构。在此过程中,它会创建或更新terraform.tfstate包含资源当前状态的文件。
      • 之后terraform destroy同样,当您销毁资源时,状态文件会更新以反映资源不再存在。
  3. Terraform 锁定文件 ( .terraform.lock.hcl):

    • 目的:此文件锁定配置中使用的提供程序插件的版本,以确保一致性并防止新版本发生意外更改。
    • 生成/更新时间:
      • 之后terraform init运行terraform init会下载所需的提供程序插件并创建.terraform.lock.hcl文件。这可确保每个团队成员或 CI/CD 流水线都使用相同的提供程序版本。
  4. Terraform 目录(.terraform):

    • 用途:此隐藏目录存储已下载的提供程序插件、模块源和后端配置。它对于 Terraform 的运行至关重要。
    • 生成时间:
      • 之后terraform init.terraform当您使用初始化 Terraform 工作目录时,会自动创建该目录terraform init
  5. 计划输出文件(可选):

    • 目的:如果您选择将执行计划保存到文件(使用-out带有的标志terraform plan),则此二进制文件将捕获 Terraform 想要进行的一组更改。
    • 生成时间:
      • 之后terraform plan -out=<filename>运行此命令将生成一个计划文件,稍后可以使用 进行应用terraform apply <filename>。这对于审查更改或自动化部署工作流程非常有用。

在本地配置 AWS 凭证

如果您希望能够使用 boto3 等 SDK 在终端或代码内部访问您的 AWS 账户和资源,这一点至关重要。
可能还有其他方法可以实现这一点,但我在此列出两种:
aws configure
将凭证导出为环境变量

1. AWS 配置

要使用此功能,您需要安装 aws-cli,您可以从这里安装。

我发现这sudo apt install aws-clipip3 install aws-cli我来说同样有效。

您可以通过检查其版本来确认是否已安装它,如下所示:

aws --version
Enter fullscreen mode Exit fullscreen mode

要在本地配置您的凭证,您需要创建一个 IAM 用户并授予他们一些权限。

  1. 登录你的 AWS 控制台
  2. 导航至 IAM 部分
  3. 创建新用户并授予其所需的权限
  4. 下载该用户的访问密钥和密钥的 CSV 文件并安全保存。我更喜欢这样做,而不是直接从控制台复制。但请确保不要公开提交。例如,如果你正在处理的仓库在 github/gitlab/bitbucket 等位置有远程版本,那么在添加、提交和推送更改之前,请考虑将 CSV 文件添加到你的 git 忽略文件中。

现在,运行以下命令在本地配置您的凭据。

aws configure
Enter fullscreen mode Exit fullscreen mode

系统将提示您输入访问密钥 ID、秘密访问密钥、区域和输出格式(可选 JSON、文本或表格,默认为 JSON)。填写完成后,系统会在 ~/.aws 目录中创建两个文件:credentials 和 config。credentials 文件包含访问密钥和秘密访问密钥。config 文件包含区域和输出格式。

要测试您是否可以从本地终端访问您的 aws 帐户,请创建一个虚拟 s3 存储桶,然后运行以下命令列出您的存储桶:

aws s3 ls
Enter fullscreen mode Exit fullscreen mode

2. 将凭证导出为环境变量

在终端上运行以下命令,将字符串文本替换为实际值:

export AWS_ACCESS_KEY_ID="your-access-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret-access-key"
export AWS_DEFAULT_REGION="your-region"
Enter fullscreen mode Exit fullscreen mode

Terraform、Boto3 和 AWS CLI 将自动从环境变量或 ~/.aws 目录中的文件使用这些

*管理 Terraform 上的资源 *

在您正在工作的文件夹中创建一个 main.tf 文件,并在文件中保存以下代码:


terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "5.85.0"
    }
  }
}

provider "aws" {
  # Configuration options
  region = "your-region"
}

# Variable definitions
variable "aws_region" {
  description = "AWS region for resources"
  type        = string
  default     = "your-region"
}

resource "aws_s3_bucket" "example" {
  bucket = "my-tf-test-bucket-${random_id.bucket_suffix.hex}" # Make bucket name unique

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

# Add a random suffix to ensure bucket name uniqueness
resource "random_id" "bucket_suffix" {
  byte_length = 4
}

Enter fullscreen mode Exit fullscreen mode

将“your-region”替换为您的实际地区。

现在我们可以运行 terraform 命令。

1. 在你的文件夹中初始化 Terraform

运行以下命令:

terraform init
Enter fullscreen mode Exit fullscreen mode

它会初始化后端和提供程序插件。它还会创建一个锁定文件 .terraform.lock.hcl 来记录提供程序的选择。它还会创建一个 .terraform 文件夹。请将此文件添加到您的版本控制存储库中,以便 Terraform 能够保证在
您以后运行“terraform init”时默认做出相同的选择。

2. 计划

运行以下命令来查看基础架构所需的任何更改:

terraform plan
Enter fullscreen mode Exit fullscreen mode

它根据 main.tf 中的代码生成执行计划。输出的最后会有一个如下所示的摘要:

计划:添加 2 个,更改 0 个,销毁 0 个。

系统会建议更改,您可以通过运行下文所述的 apply 命令来同意这些更改。您可以使用 out 标志保存计划:

terraform plan -out=filepath-to-save-file
Enter fullscreen mode Exit fullscreen mode

3. 申请

要应用建议的更改,请运行以下命令:

terraform apply
Enter fullscreen mode Exit fullscreen mode

系统将提示您输入“yes”进行确认。请谨慎操作,因为这会创建资源,因此您的 AWS 帐户会产生费用,除非您拥有云积分或正在使用免费套餐。

输入“yes”后,前往控制台并导航至 s3 部分。检查是否已创建新的存储桶。或者,您可以运行以下命令列出您的存储桶:

aws s3 ls
Enter fullscreen mode Exit fullscreen mode

如果您之前已将计划保存到文件中,请运行以下命令来应用该计划:

terraform apply “filename”
Enter fullscreen mode Exit fullscreen mode

4. 删除

运行以下命令删除 terraform 提供的资源

terraform destroy
Enter fullscreen mode Exit fullscreen mode

您标记为删除的资源将会列出,然后系统将再次提示您确认。输入“yes”进行确认。

概括

本指南将指导您使用 AWS CLI 配置和环境变量在本地设置 AWS 凭证,并演示如何使用 Terraform 管理 AWS 资源。您学习了如何编写基本的 Terraform 配置来创建 S3 存储桶、初始化项目、根据计划预览更改、应用更改以及最终在不再需要资源时销毁它们。这种系统化的基础设施管理方法不仅确保了一致性和可重复性,还符合现代 DevOps 最佳实践。

鏂囩珷鏉ユ簮锛�https://dev.to/aws-builders/terraform-on-aws-an-introductory-guide-5dfb
PREV
AWS 无服务器开发现状
NEXT
无服务器模式