使用 Terraform 配置 Azure 计算库

使用 Terraform 可以定义、预览和部署云基础结构。 使用 Terraform 时,请使用 HCL 语法来创建配置文件。 利用 HCL 语法,可指定 Azure 这样的云提供程序和构成云基础结构的元素。 创建配置文件后,请创建一个执行计划,利用该计划,可在部署基础结构更改之前先预览这些更改。 验证了更改后,请应用该执行计划以部署基础结构。

本文介绍如何配置 Azure 计算库。

在本文中,学习如何:

  • 使用 Terraform 配置 Azure 计算库(以前共享映像库)

1.配置环境

  • Azure 订阅:如果没有 Azure 订阅,请在开始之前创建一个免费帐户。

2. 实现 Terraform 代码

  1. 创建用于测试和运行示例 Terraform 代码的目录,并将其设为当前目录。

  2. 创建名为 providers.tf 的文件并插入下列代码:

    terraform {
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>2.0"
        }
        azuread = {
          source = "hashicorp/azuread"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. 创建名为 main.tf 的文件并插入下列代码:

    resource "azurerm_resource_group" "sigrg" {
      location = var.deploy_location
      name     = var.rg_shared_name
    }
    
    # generate a random string (consisting of four characters)
    # https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string
    resource "random_string" "rando" {
      length  = 4
      upper   = false
      special = false
    }
    
    
    # Creates Shared Image Gallery
    # https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/shared_image_gallery
    resource "azurerm_shared_image_gallery" "sig" {
      name                = "sig${random_string.random.id}"
      resource_group_name = azurerm_resource_group.sigrg.name
      location            = azurerm_resource_group.sigrg.location
      description         = "Shared images"
    
      tags = {
        Environment = "Demo"
        Tech        = "Terraform"
      }
    }
    
    #Creates image definition
    # https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/shared_image
    resource "azurerm_shared_image" "example" {
      name                = "avd-image"
      gallery_name        = azurerm_shared_image_gallery.sig.name
      resource_group_name = azurerm_resource_group.sigrg.name
      location            = azurerm_resource_group.sigrg.location
      os_type             = "Windows"
    
      identifier {
        publisher = "MicrosoftWindowsDesktop"
        offer     = "office-365"
        sku       = "20h2-evd-o365pp"
      }
    }
    
    
  4. 创建名为 variables.tf 的文件并插入下列代码:

variable "deploy_location" {
  type        = string
  default     = "eastus"
  description = "The Azure Region in which all resources in this example should be created."
}

variable "rg_shared_name" {
  type        = string
  default     = "rg-shared-resources"
  description = "Name of the Resource group in which to deploy shared resources"
}
  1. 创建名为 output.tf 的文件并插入下列代码:
output "location" {
  description = "The Azure region"
  value       = azurerm_resource_group.sigrg.location
}

output "Compute_Gallery" {
  description = "Azure Compute Gallery"
  value       = azurerm_shared_image_gallery.sig.name
}

3. 创建 Terraform 执行计划

运行 terraform plan 以创建执行计划。

terraform plan -out main.tfplan

要点:

  • terraform plan 命令将创建一个执行计划,但不会执行它。 它会确定创建配置文件中指定的配置需要执行哪些操作。 此模式允许你在对实际资源进行任何更改之前验证执行计划是否符合预期。
  • 使用可选 -out 参数可以为计划指定输出文件。 使用 -out 参数可以确保所查看的计划与所应用的计划完全一致。

4.应用 Terraform 执行计划

运行 terraform apply,将执行计划应用到云基础结构。

terraform apply main.tfplan

要点:

  • 示例 terraform apply 命令假设你先前运行了 terraform plan -out main.tfplan
  • 如果为 -out 参数指定了不同的文件名,请在对 terraform apply 的调用中使用该相同文件名。
  • 如果未使用 -out 参数,请调用不带任何参数的 terraform apply

5.清理资源

不再需要通过 Terraform 创建的资源时,请执行以下步骤:

  1. 运行 terraform plan 并指定 destroy 标志。

    terraform plan -destroy -out main.destroy.tfplan
    

    要点:

    • terraform plan 命令将创建一个执行计划,但不会执行它。 它会确定创建配置文件中指定的配置需要执行哪些操作。 此模式允许你在对实际资源进行任何更改之前验证执行计划是否符合预期。
    • 使用可选 -out 参数可以为计划指定输出文件。 使用 -out 参数可以确保所查看的计划与所应用的计划完全一致。
  2. 运行 terraform apply 以应用执行计划。

    terraform apply main.destroy.tfplan
    

Azure 上的 Terraform 故障排除

排查在 Azure 上使用 Terraform 时遇到的常见问题

后续步骤