这些环境变量的值都可以从前面创建 Azure service principal 的过程中获得。方便起见,我们把设置这些环境变量的步骤可以写到脚本文件 azureEnv.sh 中:
#!/bin/sh echo "Setting environment variables for Terraform" export ARM_SUBSCRIPTION_ID=your_subscription_id export ARM_CLIENT_ID=your_appId export ARM_CLIENT_SECRET=your_password export ARM_TENANT_ID=your_tenant_id # Not needed for public, required for usgovernment, german, china export ARM_ENVIRONMENT=public
这样在执行 Terraform 命令前通过 source 命令执行该脚本就可以了!
创建 Terraform 配置文件
为了在 Azure 上创建一个 Resource Group,我们创建名称为 createrg.tf 的配置文件,并编辑内容如下:
provider "azurerm" { } resource "azurerm_resource_group" "rg" { name = "NickResourceGroup" location = "eastasia" }
用 init 命令用来初始化工作目录
把当前目录切换到 createrg.tf 文件所在的目录,然后执行 init 命令:
$ terraform init
其实就是把 createrg.tf 文件中指定的驱动程序安装到当前目录下的 .terraform 目录中:
通过 plan 命令检查配置文件
plan 命令会检查配置文件并生成执行计划,如果发现配置文件中有错误会直接报错:
$ . azureEnv.sh $ terraform plan
通过 plan 命令的输出,我们可以清楚的看到即将在目标环境中执行的任务。
使用 graph 命令生成可视化的图表
其实 graph 命令只能生成相关图表的数据(dot 格式的数据),我们通过 dot 命令来生成可视化的图表,先通过下面���命令安装 dot 程序:
$ sudo apt install graphviz
然后生成一个图表:
$ terraform graph | dot -Tsvg > graph.svg
上图描述了我们通过 azurerm 驱动创建了一个 Resource Group。
使用 apply 命令完成部署操作
在使用 apply 命令执行实际的部署时,默认会先执行 plan 命令并进入交互模式等待用户确认操作,我们已经执行过 plan 命令了,所以可以使用 -auto-approve 选项跳过这些步骤直接执行部署操作:
$ terraform apply -auto-approve
到 Azure 站点上检查一下,发现名称为 NickResourceGroup 的 Resource Group 已经创建成功了。
总结Terraform 支持的平台非常多,像 AWS,Azure 等大厂自然是不用说了,一些小的厂商也可以通过提供 provider 支持 Terraform,从而让整个生态变得非常活跃。如果大家想在 DevOps 实践中引入基础设施即代码,无论是面对的是公有云还是私有云,相信 Terraform 都不会让你失望。
参考:
Introduction to Terraform
Terraform github
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx