Terraform 简介

已完成

借助 Terraform 开源 IaC 工具,你能够使用称为 HashiCorp Configuration Language (HCL) 的高级配置语言来定义和预配云基础结构。 Terraform 在描述基础结构所需状态的配置文件中编写基础结构。 Terraform 可使用 Terraform 提供程序管理任何基础结构,例如公有云、私有云和 SaaS 服务。

用于 Azure 基础结构的 Terraform 提供程序

几个 Terraform 提供程序可用于管理 Azure 基础结构:

  • AzureRM:管理 Azure 资源管理器资源,例如虚拟机、存储帐户和网络接口。
  • AzureAD:管理 Microsoft Entra 资源,例如组、用户、服务主体和应用程序。
  • AzureDevOps:管理 Azure DevOps 资源,例如代理、存储库、项目、管道和查询。
  • AzAPI:直接使用 Azure 资源管理器 API 管理 Azure 资源。 此提供程序是对 AzureRM 提供程序的补充,可用于管理最新的 Azure 资源。
  • Azure Stack:管理 Azure Stack 资源,例如虚拟机、DNS、虚拟网络和存储。

创建存储帐户

所有 Terraform 配置都必须包含 provider 块。 以下 HCL 代码指定了提供程序 Azure 资源管理器 (azurerm)。 在 storageaccountexamplerg 位置定义了名为 eastus 的 Azure 资源组。 在资源组中创建 Azure 存储帐户。 存储帐户名是通过 md5 函数生成的数字的前 24 个字符。

terraform {
  required_version = ">=0.12"
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>2.0"
    }
  }
}
provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "rg" {
  ___location = "eastus"
  name     = "storageaccountexamplerg"
}

resource "azurerm_storage_account" "example" {
  name                     = substr(md5(azurerm_resource_group.rg.id), 0, 24)
  resource_group_name      = azurerm_resource_group.rg.name
  ___location                 = azurerm_resource_group.rg.___location
  account_kind             = "StorageV2"
  account_tier             = "Standard"
  account_replication_type = "LRS"
  access_tier              = "Hot"
}

运行 Terraform 代码

运行 terraform init 以下载管理 Azure 资源所需的 Azure 模块:

terraform init

运行 terraform plan 以确定创建配置文件中指定的配置需要执行哪些操作。 运行命令将创建一个执行计划,但不会应用它。 此模式允许你在对实际资源进行任何更改之前验证执行计划是否符合预期。

terraform plan -out main.tfplan

验证执行计划后,运行 terraform apply 以应用该计划。 此命令创建定义的资源。

terraform apply main.tfplan

验证存储帐户

要验证 Azure 存储帐户,可使用 terraform state show 命令。 此命令显示指定资源的当前状态。

对于在本模块中创建的存储帐户,命令将显示生成的名称以及存储帐户属性及其值的完整列表。

terraform state show 'azurerm_storage_account.example'

清理资源

如果不再需要在本模块中创建的资源,请使用 terraform apply 标志运行 -destroy

terraform plan -destroy -out main.destroy.tfplan

运行 terraform apply 以应用执行计划:

terraform apply main.destroy.tfplan