AWS 上的 Terraform:入门指南
Terraform 概述
当人们听到“地球化”一词时,他们通常会想到改造行星——这个概念由科学家和梦想家推广,例如伊隆·马斯克,他设想让火星变得适合居住。在这种情况下,改造行星意味着开发一个适合居住的岩石或死行星,以便它能够拥有维持生命所需的必要条件。改造火星将涉及产生大气层、引入水源和培育植物,以创造人类可以生存的条件。同样,在软件开发领域,HashiCorp 的Terraform遵循相同的原则——只不过它不是重塑行星,而是将AWS、GCP 和 vSphere等云平台或内部资源转变为应用程序可以蓬勃发展的结构化环境。正如行星地球化为生命奠定了基础一样,Terraform 作为基础设施即代码 (IaC)为可扩展和自动化的基础设施奠定了基础,软件可以在其中无缝运行。
什么是 Terraform?
Terraform 是由 HashiCorp 开发的一款基础设施即代码 (IaC)工具。它允许用户使用易于理解的配置文件定义云端和本地基础设施。该工具提供了一致的工作流程,用于在整个生命周期内配置、管理和自动化基础设施。
为什么要使用 Terraform?
- 简单性——所有基础设施都在一个文件中定义,从而可以轻松跟踪变化。
- 协作——代码可以存储在 GitHub 等版本控制系统中,以便团队协作。
- 可重复性——配置可以在不同的环境中重复使用(例如开发和生产)。
- 资源清理——确保未使用的资源被正确销毁,以避免不必要的成本。
Terraform 不是什么
- 不是软件部署工具——它不管理或更新现有基础设施上的软件。
- 无法修改不可变资源——某些更改(例如,VM 类型)需要销毁并重新创建资源。
- 不管理外部资源——Terraform 仅管理其配置文件中明确定义的内容。
Terraform 工作流程
- 本地安装的 Terraform – CLI 在用户的机器上运行。
- 使用提供商– 这些将 Terraform 连接到云服务(AWS、Azure、GCP 等)。
- 需要身份验证——API 密钥或服务帐户验证对云平台的访问。
Terraform 安装
转到此链接并按照符合您系统规格的命令进行操作
关键 Terraform 命令
terraform init
– 下载提供商插件并初始化工作目录。terraform plan
– 显示 Terraform 在应用之前将进行哪些更改。terraform apply
– 提供定义的基础设施。terraform destroy
– 删除 Terraform 配置中定义的所有资源。
Terraform 文件及其生成
Terraform 使用多个文件来管理基础架构状态、配置和依赖项。以下概述了关键文件、它们代表的含义以及触发它们创建或更新的 Terraform 命令:
-
配置文件(
*.tf
文件):- 用途:这些文件(例如
main.tf
、variables.tf
、outputs.tf
等)由您编写,用于定义您的基础架构。它们描述了您希望配置的资源以及它们之间的相互关系。 - 创建时间:您可以手动创建它们。它们构成了 Terraform 理解和管理您的环境的蓝图。
- 用途:这些文件(例如
-
Terraform 状态文件(
terraform.tfstate
):- 用途:此文件跟踪您基础架构的当前状态。它将您的配置映射到实际资源,确保 Terraform 能够确定需要进行哪些更改。
- 生成/更新时间:
- 之后
terraform apply
:运行 时terraform apply
,Terraform 会根据您的配置配置您的基础架构。在此过程中,它会创建或更新terraform.tfstate
包含资源当前状态的文件。 - 之后
terraform destroy
:同样,当您销毁资源时,状态文件会更新以反映资源不再存在。
- 之后
-
Terraform 锁定文件 (
.terraform.lock.hcl
):- 目的:此文件锁定配置中使用的提供程序插件的版本,以确保一致性并防止新版本发生意外更改。
- 生成/更新时间:
- 之后
terraform init
:运行terraform init
会下载所需的提供程序插件并创建.terraform.lock.hcl
文件。这可确保每个团队成员或 CI/CD 流水线都使用相同的提供程序版本。
- 之后
-
Terraform 目录(
.terraform
):- 用途:此隐藏目录存储已下载的提供程序插件、模块源和后端配置。它对于 Terraform 的运行至关重要。
- 生成时间:
- 之后
terraform init
:.terraform
当您使用初始化 Terraform 工作目录时,会自动创建该目录terraform init
。
- 之后
-
计划输出文件(可选):
- 目的:如果您选择将执行计划保存到文件(使用
-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-cli
对pip3 install aws-cli
我来说同样有效。
您可以通过检查其版本来确认是否已安装它,如下所示:
aws --version
要在本地配置您的凭证,您需要创建一个 IAM 用户并授予他们一些权限。
- 登录你的 AWS 控制台
- 导航至 IAM 部分
- 创建新用户并授予其所需的权限
- 下载该用户的访问密钥和密钥的 CSV 文件并安全保存。我更喜欢这样做,而不是直接从控制台复制。但请确保不要公开提交。例如,如果你正在处理的仓库在 github/gitlab/bitbucket 等位置有远程版本,那么在添加、提交和推送更改之前,请考虑将 CSV 文件添加到你的 git 忽略文件中。
现在,运行以下命令在本地配置您的凭据。
aws configure
系统将提示您输入访问密钥 ID、秘密访问密钥、区域和输出格式(可选 JSON、文本或表格,默认为 JSON)。填写完成后,系统会在 ~/.aws 目录中创建两个文件:credentials 和 config。credentials 文件包含访问密钥和秘密访问密钥。config 文件包含区域和输出格式。
要测试您是否可以从本地终端访问您的 aws 帐户,请创建一个虚拟 s3 存储桶,然后运行以下命令列出您的存储桶:
aws s3 ls
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"
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
}
将“your-region”替换为您的实际地区。
现在我们可以运行 terraform 命令。
1. 在你的文件夹中初始化 Terraform
运行以下命令:
terraform init
它会初始化后端和提供程序插件。它还会创建一个锁定文件 .terraform.lock.hcl 来记录提供程序的选择。它还会创建一个 .terraform 文件夹。请将此文件添加到您的版本控制存储库中,以便 Terraform 能够保证在
您以后运行“terraform init”时默认做出相同的选择。
2. 计划
运行以下命令来查看基础架构所需的任何更改:
terraform plan
它根据 main.tf 中的代码生成执行计划。输出的最后会有一个如下所示的摘要:
计划:添加 2 个,更改 0 个,销毁 0 个。
系统会建议更改,您可以通过运行下文所述的 apply 命令来同意这些更改。您可以使用 out 标志保存计划:
terraform plan -out=filepath-to-save-file
3. 申请
要应用建议的更改,请运行以下命令:
terraform apply
系统将提示您输入“yes”进行确认。请谨慎操作,因为这会创建资源,因此您的 AWS 帐户会产生费用,除非您拥有云积分或正在使用免费套餐。
输入“yes”后,前往控制台并导航至 s3 部分。检查是否已创建新的存储桶。或者,您可以运行以下命令列出您的存储桶:
aws s3 ls
如果您之前已将计划保存到文件中,请运行以下命令来应用该计划:
terraform apply “filename”
4. 删除
运行以下命令删除 terraform 提供的资源
terraform destroy
您标记为删除的资源将会列出,然后系统将再次提示您确认。输入“yes”进行确认。
概括
本指南将指导您使用 AWS CLI 配置和环境变量在本地设置 AWS 凭证,并演示如何使用 Terraform 管理 AWS 资源。您学习了如何编写基本的 Terraform 配置来创建 S3 存储桶、初始化项目、根据计划预览更改、应用更改以及最终在不再需要资源时销毁它们。这种系统化的基础设施管理方法不仅确保了一致性和可重复性,还符合现代 DevOps 最佳实践。
鏂囩珷鏉ユ簮锛�https://dev.to/aws-builders/terraform-on-aws-an-introductory-guide-5dfb