你之前是否通过Azure门户创建过Azure虚拟机?如果是,你需要点击多少次才能完成这个过程?你能够一遍又一遍地做到这一点,提供完全相同的输入值以确保符合特定标准吗?可能不行。你需要自动化这个过程。使用Terraform创建Azure虚拟机!
HashiCorp的Terraform是一个实用工具,可以在本地或云端创建简单到复杂的基础架构。Terraform是一个单一的二进制文件,它读取配置文件,创建一个状态,并确保你的基础架构创建并保持在该状态下。
在本文中,你将学习如何通过创建Azure虚拟机来开始使用Terraform。这个教程将是一个很好的Terraform Azure示例。
先决条件
如果你想跟随本教程进行操作,请确保你已经具备以下条件:
在本教程的步骤中,我们将使用运行PowerShell Core的macOS,但是相同的过程也可以在运行PowerShell Core的Windows 10、Windows PowerShell甚至Windows命令提示符上进行。
安装Terraform
要开始,你首先需要下载 Terraform。根据你的偏好,有许多方法可以做到这一点。本教程使用 macOS,所以你可以通过运行 brew install terraform
使用 HomeBrew。你也可以直接访问 Terraform 下载页面,或者,如果你使用的是 Windows,你也可以 使用 Chocolatey。
你知道吗,Azure 云 Shell 已经预先安装了 Terraform 吗?
当你下载了 Terraform 后,将其复制到你的路径中的一个文件夹中,并运行 terraform
。你应该会看到下面显示的一些使用说明。如果你看到了这个,那么你已经准备好继续了。

连接到 Azure
Terraform 使用提供程序与各种本地和云供应商进行通信。在这种情况下,你需要配置 Terraform Azure 提供程序。假设你已经安装了 Azure CLI 并且已经对 Azure 进行了身份验证,你需要首先创建一个 服务主体。Terraform 将使用服务主体进行身份验证并访问你的 Azure 订阅。
创建服务主体
在你的控制台中,使用 Azure CLI 创建一个服务主体。要做到这一点:
首先,使用以下命令az account list
来查找您的订阅 ID。
一旦您获得了订阅 ID,然后使用Contributor角色在您的订阅范围内创建一个服务主体。
Azure CLI 将会访问 Azure 并创建一个 Azure AD 应用程序,并显示如下密码。由于您将输出显示如下内容分配给上面的$sp
变量,您将会在变量中存储appId
和password
以备后用。

设置环境变量
Terraform 需要知道四个不同的配置项才能成功连接到 Azure。
- Azure 订阅 ID
- 服务主体的 Azure AD 应用程序 ID
- 服务主体密码
- Azure AD 租户
向 Terraform 提供此信息的一种方式是使用环境变量。由于本教程在 PowerShell 控制台中运行,您可以使用$env:
来设置这些环境变量。下面您将看到 Terraform 尝试连接到 Azure 时会查找的每个环境变量。
由于之前将az ad sp create-for-rbac
的输出保存到了$sp
变量中,因此您只需引用属性而不是复制和粘贴它们。
一旦您定义了环境变量,Terraform 就准备好连接到 Azure 了!
创建一个配置文件
所有Terraform配置通常都在一个名为模块的文件夹中创建。在本教程中,您不会创建一个模块,但您将遵循相同的做法。
在您的PowerShell控制台中,创建一个名为TerraformTesting的文件夹,放在您喜欢的任何位置,然后切换到该目录。
接下来,创建main.tf配置文件。这是存储使用Terraform构建Azure虚拟机的配置的地方。这是大多数人称之为“主”配置文件的配置文件。它包含了配置将管理的所有基础设施的提供者和资源声明。
如果您想了解更多关于语法(HCL)的信息,Michael Levan和我在我们的无废话Azure和DevOps电子书中有一章关于Terraform的精彩内容。
在Terraformtesting目录内创建一个新的main.tf文件,内容如下。
初始化 Terraform
Terraform 需要知道在尝试创建资源时将使用哪种提供者。它必须提前知道这一点,因为它会在您正在工作的同一文件夹中下载这些提供者。
通过运行 terraform init
下载在主配置文件中定义的 azurerm
资源提供者。一旦执行此操作,您应该会看到类似以下的输出。

验证配置
您创建的配置可能不是完美的。我知道,很难相信,对吧?Terraform需要验证配置中是否有任何语法错误。要做到这一点,请运行terraform plan
命令。这个命令会读取目录中的配置文件,并报告任何错误。
确保在尝试实际配置基础设施之前修复
terraform plan
提示的任何错误!
使用Terraform构建Azure VM
最后,是时候通过运行terraform apply
来实际构建Azure VM了。当你运行terraform apply
时,Terraform会读取目录中的任何配置文件,并提示你进行确认。一旦你输入“yes”,它就会联系Azure并开始构建VM和所有关联资源。

如果你看到亮丽的、绿色的Apply complete!
文本出现在底部,Terraform就已经成功构建了资源!
清理
由于这只是一个演示,而且你可能不打算保留这个VM,一定要做自己一个忙,删除你所做的一切。
你为Terraform创建了一个服务主体来认证Azure。你可以用下面的az ad sp delete
命令来删除它。
接下来,使用terraform destroy
删除你刚刚创建的Azure VM和配置文件中的所有其他资源。如果你想验证配置并测试如果你运行terraform destroy
会发生什么,你也可以运行terraform plan -destroy
。
结论
Terraform是一个在许多不同领域构建基础设施的强大而免费的工具。学习HCL的语法是Terraform中最难的部分,但老实说,HCL是一种直观的语言。如果你正在考虑使用Terraform或者像ARM模板这样的工具,那么学习Terraform吧!
Terraform现在是一个受欢迎的行业工具,拥有强大的社区支持和大量的人员提供帮助!