Terraform: 简介
当人们听到 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能够确定需要进行哪些修改。
-
生成/更新时机:
-
运行
terraform apply
之后: 当您运行terraform apply
时,Terraform会根据您的配置来部署基础设施。在此过程中,它会根据当前资源的状态来更新或创建terraform.tfstate
文件。 -
运行
terraform destroy
之后: 同样地,当您销毁资源时,状态文件会被更新以反映这些资源已经不存在。- Terraform 锁定文件 (
.terraform.lock.hcl
):
- Terraform 锁定文件 (
-
目的: 此文件锁定配置中使用的提供程序插件版本,以确保一致性和防止意外更改。
-
生成/更新时机:
-
运行
terraform init
后: 运行terraform init
命令后会下载所需提供程序插件并生成.terraform.lock.hcl
文件。这确保了团队成员和CI/CD流水线使用相同的提供程序版本。- Terraform目录(
.terraform
文件夹):
- Terraform目录(
-
目的: 此隐藏目录用来存放下载的提供者插件、模块源代码和后端配置。这对Terraform的运行至关重要。
-
生成时机:
-
terraform init
之后: 使用terraform init
初始化Terraform工作目录时,.terraform
目录会自动创建。- 计划输出文件(可选,根据需要)。
-
目的: 如果您选择将执行计划保存到文件中(使用
terraform plan
命令的-out
标志),该二进制文件(binary file)将捕获 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
查看 AWS 命令行工具的版本信息
全屏 退出全屏
要本地设置您的凭证,您需要创建一个IAM用户,并为他们分配一些权限。
- 登录您的 AWS 控制台账号
- 进入 IAM 部分
- 创建一个新用户并授予该用户所需的权限
- 下载该用户的访问密钥和秘钥并将它们以 CSV 格式安全存储。我更喜欢这种方式,而不是直接从控制台复制这些密钥。确保不要公开提交这些密钥。例如,在处理 GitHub、GitLab 或 Bitbucket 等远程仓库时,请在提交更改前将 CSV 文件添加到 .gitignore 文件中
现在,执行以下命令来本地配置您的认证信息。
aws configure``` (配置 AWS)
全屏 退出全屏
你将被提示输入访问密钥ID、秘密密钥、区域和输出格式(选择 json、text 或 table,默认为 json)。填写完后,这样就会在 ~/.aws
目录下生成两个文件:credentials 和 config。credentials 文件包含访问密钥和秘密密钥。config 文件则包含区域和输出格式。
测试你是否可以从本地终端访问你的 AWS 账户:创建一个空的 S3 存储桶(dummy S3 bucket),然后运行以下命令来列出你的存储桶:
aws s3 ls
进入全屏。退出全屏。
2. 将凭证信息设置为环境变量
在你的终端执行下面的命令,并用你的实际信息替换其中的具体文本:
export AWS_ACCESS_KEY_ID="你的访问密钥ID(AK)"
export AWS_SECRET_ACCESS_KEY="你的秘密访问密钥(SK)"
export AWS_DEFAULT_REGION="默认区域"
切换全屏
Terraform、Boto3 和 AWS CLI 自动从环境变量或 ~/.aws 目录中的文件中获取这些配置。
在 Terraform 中管理资源
在你正在工作的文件夹里创建一个 main.tf 文件,并把下面这段代码保存在文件里:
保存如下代码:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "5.85.0"
}
}
}
provider "aws" {
# 配置设置
region = "your-region"
}
# 变量定义
variable "aws_region" {
description = "AWS 区域"
type = string
default = "your-region"
}
resource "aws_s3_bucket" "example" {
bucket = "my-tf-test-bucket-${random_id.bucket_suffix.hex}" # 确保桶名的唯一性
tags = {
Name = "My bucket"
Environment = "Dev"
}
}
# 添加一个随机后缀来确保桶名的独特性
resource "random_id" "bucket_suffix" {
byte_length = 4
}
进入全屏;退出全屏
将“your-region”替换为你的实际所在地区。
现在咱们可以运行这些 terraform 命令了。
#### **1. 在您的文件夹中开始 Terraform**
运行这条命令。
运行 terraform init
初始化 Terraform。
全屏 退出全屏
它初始化后端和提供程序插件。它还会创建一个锁定文件 `.terraform.lock.hcl` 用来记录提供程序的选择。还会创建一个 `.terraform` 文件夹以存放一些配置。请将此文件加入到您的版本控制系统仓库中,这样当您将来运行 `terraform init` 命令时,Terraform 可以默认做出相同的选择,而无需每次都手动指定。
#### **2. 规划**
运行以下命令来查看您基础设施中是否需要任何更改:
执行 terraform plan
命令
全屏 退出全屏
它根据 `main.tf` 文件中的代码生成执行计划如下。输出的最后部分包含如下所示的摘要信息:
计划是:增加2个,更改0个,删除0个。
我们会提出一些更改建议,你可以通过运行下面提到的 apply 命令来确认这些更改。你可以用 out 标志来保存这个计划。
terraform 计划 -out=将文件保存到的路径
全屏显示 退出全屏
#### **3. 申请**
要使建议的更改生效,请运行该命令:
你可以说 terraform apply
(这会执行你定义的基础设施配置)。
点这里进入全屏,再点这里退出全屏
你需要输入 yes 来确认。请注意,这会创建资源,因此,如果你没有云信用额度或没有使用免费层,否则你的 AWS 账户会产生费用。
输入 yes 之后,进入界面并转到 s3 部分。查看是否有新的存储桶被创建。或者,您可以运行以下命令来列出您的存储桶:
在命令行中,你可以运行 `aws s3 ls` 来列出S3存储桶中的内容。
进入全屏模式,退出全屏
如果你之前将计划保存到文件里,请运行下面的命令来应用这个计划:
执行这个命令:terraform apply 「filename」(命令)
切换到全屏模式 结束全屏模式
#### **4. 删除**
执行以下命令来删除 Terraform 配置的资源:
运行 terraform destroy
命令。这会销毁所有的 Terraform 资源。
全屏模式 退出全屏
你标记要删除的资源将被列出,系统会再次提示你确认。请输入 yes 来确认。
### **总结:**
### **简要:**
本指南将指导你如何在本地环境中使用 AWS CLI 配置和环境变量设置 AWS 凭证,并演示了如何使用 Terraform 管理 AWS 资源。你学会了如何编写基本的 Terraform 配置来创建一个 S3 存储桶,初始化项目并预览变更,使用计划预览变更,应用变更,以及最终在不再需要资源时销毁资源。这种系统化的基础设施管理方式不仅保证了操作的一致性和可重复性,也符合现代 DevOps 的最佳实践。
共同学习,写下你的评论
评论加载中...
作者其他优质文章