“基础设施即代码”是一种通过代码来定义计算和网络基础设施的方法,它可以应用于任何软件系统中。这样的代码放在代码版本控制系统中,具有可审查性、可重用性,并且符合测试惯例,还完全遵从持续交付的原则。该方法已经在过去的十年内广泛应用于快速增长的云计算平台中了,而且也将会成为接下来管理计算机基础设施的主要方式。对于目前而言,我们若想使用基础设施即代码的方式在Azure中部署资源,通常可以选择如下工具:

  • PowerShell
  • Ansible
  • Puppet
  • Chef
  • Azure Resource Manager
  • Etc.

除了上述工具以外,我们还可以选择使用Terraform来实现基础设施及代码的部署。那么接下来我们会和大家讨论如何使用Terraform从0开始在Azure上部署测试环境。本次我们主要讨论使用Terraform部署一个资源组和一个带有两个子网的VNet

下载并安装Terraform
若要使用Terraform实现IcA我们需要先下载并安装Terraform,具体可以参考如下链接:
https://www.terraform.io/downloads.html

准备TF文件

安装完Terraform以后,我们需要创建一些文件:

  • main.tf :包含我们要创建的资源以及一些模块的调用
  • Variables.tf:包含我们要创建资源的值
    使用Terraform部署Azure资源_第1张图片

以下是main.tf,其中包含了一个资源组和一个带有两个子网的虚拟网络:

provider "azurerm" {
    version = "2.0.0"
    features {}
}

resource "azurerm_resource_group" "rg" {
    name = var.resource_group_name
    location = var.location
}

resource "azurerm_virtual_network" "vnet" {
    name = var.virtual_network_name
    location = var.location
    resource_group_name = azurerm_resource_group.rg.name
    address_space = [element(var.address_space, 1)]
}

resource "azurerm_subnet" "infra" {
    name = var.subnetname_infra
    virtual_network_name = azurerm_virtual_network.vnet.name
    resource_group_name = azurerm_resource_group.rg.name
    address_prefix = var.subnet_prefix_infra
}

resource "azurerm_subnet" "infra_subnet" {
    name = var.subnet_name_DB
    virtual_network_name = azurerm_virtual_network.vnet.name
    resource_group_name = azurerm_resource_group.rg.name
    address_prefix = var.subnet_prefix_DB
}

该variables.tf文件将包含我们将部署的资源值:

variable "resource_group_name" {
    default = "TF-RG01"
}

variable "location" {
    default = "southeastasia"
}

variable  "virtual_network_name" {
    default = "Prod-VNet"
}

variable "address_space" {
    type = list(string)
    default = [
        "10.0.0.0/16"
    ]
}

variable "subnetname_infra" {
    default = "infra"
}

variable "subnet_name_DB" {
    default = "DB"
}

variable "subnet_prefix_infra" {
    default = "10.0.1.0/24"
}

variable "subnet_prefix_DB" {
    default = "10.0.2.0/24"
}

准备好上述文件以后,我们就应该开始执行部署命令了,首先我们会执行terraform init来初始化项目,这个过程中terraform会帮助我们下载对于的依赖项:
使用Terraform部署Azure资源_第2张图片

然后我们需要执行terraform plan来查看我们要在Azure订阅中执行的操作。若我们的tf文件编写有问题,也会在这一步的时候显示出来:
使用Terraform部署Azure资源_第3张图片

接下来,我们需要运行terraform apply来执行部署:
使用Terraform部署Azure资源_第4张图片

部署过程中需要我们输入yes来确认部署:
使用Terraform部署Azure资源_第5张图片

部署完成如下图所示:
使用Terraform部署Azure资源_第6张图片

此时我们可以登陆到Azure查看对应的资源是否创建成功:
使用Terraform部署Azure资源_第7张图片

如果要删除已经删除的部署,可以运行terraform destroy:
使用Terraform部署Azure资源_第8张图片

几分钟后,所有内容均已被删除:
使用Terraform部署Azure资源_第9张图片