Terraform 概念与设置

LinuxBeginner
立即练习

Introduction

欢迎来到基础设施即代码(IaC)的世界。

想象一下,你是一家繁忙餐厅的主厨。传统上,你可能需要手动、逐步完成每一道菜。在 IT 世界中,这就像逐台手动配置服务器——速度慢,而且容易出错。

IaC 不需要你通过反复执行命令或点击云控制台来手动配置基础设施,而是允许你将基础设施描述在文件中。这样可以对配置进行版本控制、审查和重复使用。

Terraform 是使用最广泛的 IaC 工具之一。它采用声明式方式:你描述期望的最终状态,Terraform 会自行确定如何达到该状态。

这种声明式模型是 Terraform 的核心理念之一。你只需要描述应该存在什么基础设施,而不必编写创建这些基础设施所需的每个底层步骤的完整命令式脚本。

在本实验中,你将搭建好自己的「厨房」,并教会机器人它的第一个技能。你将了解 Provider。Provider 就像机器人访问不同食材(例如 AWS、Google Cloud 或 Docker)时所需要的专用烹饪工具。

完成本实验后,你将安装好 Terraform,创建第一个「配方」文件,并准备好开始构建基础设施的环境。

安装 Terraform

首先安装 terraform 程序。你可以把它理解为下载机器人的大脑。我们会手动完成安装,这样你可以清楚地看到程序的来源以及它的存储位置。

先确认当前所在的位置。我们需要位于项目目录中。

pwd

接下来,从互联网下载 Terraform 软件包。使用 wget 命令获取指定版本(1.14.3),以确保本实验中的操作能够正常完成。

wget https://releases.hashicorp.com/terraform/1.14.3/terraform_1.14.3_linux_amd64.zip

下载的文件是一个压缩的「zip」归档文件,就像装着工具的行李箱。使用 unzip 命令解压它。

unzip terraform_1.14.3_linux_amd64.zip

现在已经获得了 terraform 程序,但它目前位于当前目录中。我们希望在系统中的任意位置都能运行它,就像运行 ls 或 cd 这样的标准命令一样。

为此,将它移动到名为 /usr/local/bin 的特殊系统目录。系统会在输入命令时检查这个目录,因此可以把它理解为一个公共工具箱。

sudo mv terraform /usr/local/bin/

最后,通过检查版本来验证安装是否成功。

terraform -version

你应该会看到包含 Terraform v1.14.3 的输出。

删除下载的 zip 文件,保持工作区整洁:

rm terraform_1.14.3_linux_amd64.zip

创建蓝图

Terraform 需要一份蓝图来了解要构建什么。这些蓝图写在扩展名为 .tf 的文本文件中。

在此步骤中,创建主配置文件。按照惯例,主文件通常命名为 main.tf。你可以把它理解为配方书的主页。

在 ~/project 目录中创建名为 main.tf 的新文件。可以先使用 touch 命令创建一个空文件。

touch main.tf

确认文件已经创建:

ls -l main.tf

此时文件还是空的。下一步会向其中添加内容。这个文件将作为基础设施的蓝图。

配置 Provider

现在已经有了 main.tf 文件,接下来需要向其中添加指令。

Terraform 是一个通用工具。默认情况下,它不知道如何与 Docker、AWS 或 Azure 通信。你需要引入一个 Provider,它就像翻译器一样,负责教会 Terraform 使用我们要管理的平台的专用语言。本实验要管理 Docker 容器,因此需要 Docker Provider。

正是由于核心引擎与 Provider 插件相互分离,同一种 Terraform 工作流模式才能管理多种不同的基础设施系统。

使用文本编辑器 nano 打开 main.tf。

nano main.tf

将以下代码复制并粘贴到文件中。第一部分是 terraform 块,用于准确告诉 Terraform 要下载哪个翻译器插件。第二部分是 provider 块,用于启用该插件。

terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 3.0.1"
    }
  }
}

provider "docker" {}

粘贴代码后,保存更改并退出编辑器。按 Ctrl + O 写入文件,按 Enter 确认文件名,然后按 Ctrl + X 退出。

此配置告诉 Terraform:「我打算使用 Docker Provider,具体使用 3.0.1 版本或与其兼容的版本。」

初始化项目

现在已经安装好了工具,也写好了蓝图,但 Terraform 还没有完全准备好。它从 main.tf 中发现你需要「Docker」翻译器(插件),但还没有下载该插件。

需要运行 init 命令。你可以把它理解为「准备工作间」。Terraform 会读取蓝图,检查缺少哪些工具,然后自动将这些工具下载到一个隐藏目录中。

因此,terraform init 是项目引导步骤,而不是更改基础设施的步骤。它会准备工作目录,使后续命令能够正确理解配置。

运行初始化命令:

terraform init

你应该会看到类似以下的输出:

Initializing the backend...

Initializing provider plugins...
- Finding kreuzwerker/docker versions matching "~> 3.0.1"...
- Installing kreuzwerker/docker v3.0.2...
- Installed kreuzwerker/docker v3.0.2 (self-signed, key ID 24E54F214539BC63)

Terraform has been successfully initialized!

此命令会在项目目录中创建一个名为 .terraform 的隐藏目录。Terraform 会在这里存储下载的 Provider 插件。

通过列出所有文件(包括隐藏文件)来确认该目录存在:

ls -a

你应该能看到 .terraform 和 .terraform.lock.hcl。锁定文件确保后续运行使用完全相同的 Provider 版本,从而保持一致性。

总结

恭喜!你已经成功设置好 Terraform 环境。

在本实验中,你学习了:

  • 安装:如何将 Terraform 二进制文件放入系统路径(/usr/local/bin)。
  • 配置:如何创建 main.tf 文件,将其作为基础设施蓝图。
  • Provider:允许 Terraform 与 Docker 等不同平台通信的专用「翻译器」。
  • 初始化:如何使用 terraform init 在开始工作前下载必要的插件。

现在,你已经可以在下一个实验中开始定义实际资源并构建基础设施。