Terraform 简介
GenAI LIVE! | 2025年6月4日
我最近偶然发现了 Terraform,它提供的所有功能都让我惊叹不已。这篇文章将介绍 Terraform 的功能、您可能需要它的原因,以及一个在 AWS 上使用 Terraform 的快速演示。那就让我们开始吧!
什么是 Terraform?
Terraform 的官方网站表示
Terraform 是一个开源基础设施即代码软件工具,它提供一致的 CLI 工作流来管理数百种云服务。
您可能要问的第一个问题是基础设施即代码到底是什么?
嗯,每当您使用云提供商服务来为您的项目设置基础架构时,通常都会使用该特定服务的 Web UI 或 CLI 创建所有必需的资源。基础架构即代码是将所有基础架构以机器可读的格式(即代码)定义的过程!
Terraform 只是一个工具,它将您定义的基础设施作为代码并变为现实!
为了简化操作,假设您想在 AWS 中创建一个 S3 存储桶。您需要将此指令编写为代码(稍后我将向您展示如何操作),然后 Terraform 将直接执行此代码,这意味着它将为您创建该存储桶。
很酷吧?
为什么选择 Terraform?
现在你可能会想,为什么要使用 Terraform 或这种“基础设施即代码”的方法,而不是传统的方法。其实,它有几个优点:
告别错误!
手动创建基础架构时,您需要浏览大量的屏幕和向导来配置它,并且需要处理大量的设置。当需要配置的内容太多时,很容易意外设置错误。使用 Terraform,您可以将所有这些内容编写为代码,这意味着所有内容都集中在一个地方供您查看,因此在设置过程中出错的可能性会更小。
可重复性
按照传统方式操作时,创建多个完全相同的环境非常困难。这些环境可能完全相似,也可能略有不同。如果您采用传统方式操作,就意味着需要再次浏览所有配置屏幕,并记住要进行哪些细微的更改。
但是使用 Terraform,一切就变得非常简单Ctrl + C
,Ctrl + V
只需修改你的代码(它定义了你的基础架构)。这也使得你可以轻松地在每个环境中进行所有细微的更改!这样,从长远来看,保持这些环境彼此一致也更加方便。
纵观全局
使用 Terraform 时,您将获得以代码形式呈现的整个基础架构。这样,您可以轻松了解所有组件的现状,并根据需要进行更改。
这些是您可能希望使用 Terraform 而不是传统方法创建基础设施的一些主要原因。
有一些解决方案,例如 AWS CloudFormation,也可以帮你实现同样的功能。但我个人认为,Terraform 比某些特定于云提供商的解决方案更好。你或许想学习一种无论使用哪个云提供商都能派上用场的工具,不是吗?
弄脏我们的手!
现在您已经了解了 Terraform 的功能,让我们来实际看看它是如何运作的。本篇我将尽量简化,并向您展示如何使用 Terraform 在 AWS 中创建 S3 存储桶。但请记住,无论使用哪个云提供商,您都可以使用 Terraform 创建整个基础设施。我将在后续文章中介绍更复杂的用例。
登录 AWS 并创建一个编程用户,以便 Terraform 可以使用该用户与 AWS 通信。确保授予此用户足够的权限来创建 S3 存储桶。创建完成后,请务必记下访问密钥 ID 和 Secret 访问密钥。
完成此操作后,请为你的操作系统安装 Terraform 。运行
terraform -version
以确保您已正确安装它。
现在我们需要设置环境变量,以便 Terraform 能够访问我们的 AWS 账户。只需在终端中运行以下命令即可:
export AWS_ACCESS_KEY_ID=YOURACTUALKEYID
export AWS_SECRET_ACCESS_KEY=YOURACTUALACCESSKEY
就这样!现在 Terraform 可以访问你的 AWS 账户了。请注意,这两个变量仅在当前终端窗口的生命周期内存在,也就是说,如果你关闭窗口,则必须再次输入上述命令。
现在让我们开始将基础设施编写为代码!
如果您正在使用 VSCode,您可能想要获取这些扩展:HashiCorp Terraform和Terraform Autocomplete。
创建一个main.tf
文件,并用你常用的代码编辑器打开它。注意,你不必调用此文件,main.tf
但这被认为是最佳实践。将以下内容复制到文件中,我会解释我们所做的。
provider "aws" {
region = "eu-west-1"
}
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-first-bucket"
}
我们做的第一件事是指定我们的提供商,在本例中是 AWS。Terraform 拥有大量的提供商,这些提供商允许 Terraform 访问特定于提供商的资源。选择提供商时,我们还会指定我们想要在 AWS 中用于此项目的区域。
接下来我们要设置 S3 bucket。为此,我们定义了一个资源。
资源只是映射到现实世界中的某个项目的东西,也就是说,在这种情况下映射到我们的云提供商中的某个东西。
在第一个引号中,我们指定了要使用的资源,即 AWS S3 存储桶。在第二个引号中,我们为该存储桶指定了一个标识符。标识符仅供 Terraform 项目内部使用,与 Terraform 在 AWS 中创建的内容无关。
之后,我们提供了此资源的配置。资源可能包含任意数量的参数供您配置。此配置将用于像您在 AWS 中想要的那样设置资源。在此示例中,我们仅设置了存储桶名称。
现在回到设置 AWS 密钥的命令行。运行以下命令应该可以看到这些密钥:
printenv | grep AWS
从此终端导航到包含该main.tf
文件的文件夹并运行
terraform init
这将配置 Terraform 与您的项目一起运行,并将初始化状态文件(有关更多信息,请参阅后续文章)。下次运行
terraform apply
这将获取您的main.tf
文件并将其应用到 AWS。运行该命令时,您将看到 Terraform 在实际对 AWS 进行更改之前首先创建的计划。
这样您就可以看到 Terraform 将在您的云提供商中创建哪些内容。向您展示计划后,Terraform 会请求您允许应用该计划。输入“yes
继续”,您将看到一条成功消息。
现在转到您的 Amazon S3 控制台,您将看到由 Terraform 创建的存储桶。很神奇吧?!
你知道什么更酷吗?
再次运行terraform apply
,什么也不会发生。这是因为你要求 Terraform 确保存在一个特定的 S3 bucket,如果该 bucket 已经创建,它就不会执行任何操作。我必须提到这一点,这样你就不会认为terraform apply
再次运行会创建一个新的 bucket。
从 AWS 控制台中删除该存储桶,然后terraform apply
再次运行,您将再次看到计划屏幕,Terraform 会要求您确认创建 S3 存储桶。然后yes
,您将在 AWS 控制台中再次看到您的存储桶。
在结束本文之前,我想向你展示最后一个命令。运行
terraform destroy
现在您将看到另一个计划,其中显示了 Terraform 将删除的所有内容,以销毁该main.tf
文件创建的所有内容。输入yes
并转到控制台,您应该会看到存储桶消失了!
好了,各位,就到这里!我想在这篇文章中向你们展示 Terraform 的酷炫和强大,我相信现在你们已经对它印象深刻了。在接下来的文章中,我将更深入地介绍 Terraform,深入探讨 Terraform 的幕后工作原理,以及我们可以用它完成哪些复杂的事情。如果你们对此感兴趣,请务必关注接下来的文章 :)
感谢阅读!想聊聊的话,可以在推特上联系我 :D
鏂囩珷鏉ユ簮锛�https://dev.to/rinkiyakedad/introduction-to-terraform-545n