2023-02-24-Terraform 安装与简单demo
Terraform 简介与示例
Terraform 是一种安全有效地构建、更改和版本控制基础设施的工具(基础架构自动化的编排工具)。它的目标是 "Write, Plan, and create Infrastructure as Code", 基础架构即代码。
Terraform 几乎可以支持所有市面上能见到的云服务。具体的说就是可以用代码(其实就是配置文件定义)来管理维护 IT 资源,把之前需要手动操作的一部分任务通过程序来自动化的完成,这样的做的结果非常明显:高效、不易出错。
用法与k8s容器平台的helm有点类似,都是声明式资源管理,并对版本有较好的管理,配合git食用更佳。
下文将练习通过Terraform在Azure云上创建资源组、vnet、虚拟机。
其实Azure本身提供了ARM模板配合变量配置文件,也是以声明式创建和管理资源。 但我更好奇Terraform到底有什么魔力,让各大云厂商在官方文档里进行推介,容我一探究竟。
安装 terraform
支持 MAC,Win,Linux https://developer.hashicorp.com/terraform/tutorials/azure-get-started/install-cli
Centos/RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install terraform检查版本
[root@centos8 azure-terraform]# terraform version
Terraform v1.3.9
on linux_amd64
+ provider registry.terraform.io/hashicorp/azurerm v3.44.1开启命令自动补全,执行完重新进入下bas窗口
安装 Azure CLI 及登录认证
https://learn.microsoft.com/zh-cn/cli/azure/install-azure-cli
Azure CLI 的 RPM 包依赖于 python3 包。Centos7 可能会遇到些问题,Centos8没问题。我此处用的Centos8.5
使用Terraform创建资源组
先尝试实现一个最简单场景,了解下大概的使用流程。
创建配置文件
新建一个空目录,并在其中创建一个 main.tf 文件
编辑 main.tf 配置文件
文件的上半部分 terraform/provider 定义了将要使用什么云,及插件的版本,在以下连接的右上角“USE PROVIDER”查看。 resource 部分表示要创建的资源,此处是创建一个资源组,在以下连接的右上角“Documentation”,有所有支持的资源定义解读。 https://registry.terraform.io/providers/hashicorp/azurerm/latest
Azure 权限认证
在通过 Terraform 创建之前,需要先配置权限认证,才能去创建或配置资源。
https://learn.microsoft.com/zh-cn/azure/developer/terraform/authenticate-to-azure?tabs=bash
主要两种方式:
通过powershell 或者 az cli 进行认证
通过服务主体。服务主体创建后,可以在环境变量指定ID和密码。也可以配置在main.tf(明文,不安全)
此处就通过最简单的方式,执行 az login 注意如果是国内azure云,也就是21世纪互联运营的那个,需要切到中国区 az cloud set --name AzureCloud
初始化插件
执行 terraform init。 terraform init 会分析 xxx.tf 代码中所使用到的Provider,并尝试下载Provider插件到本地 如果网络连不上多执行几次,国内网络老大难。。。
成功后会看到提示 "Terraform has been successfully initialized!"
可以看到新增了两个隐藏文件,目录下就有 azure privider 的插件
格式化和校验配置文件(可选操作)
执行 terraform fmt 格式化配置文件,比如对齐。如果自动修改了文件,会列出修改的内容。同时对错误的格式也会指出,建议执行。
terraform validate 验证配置文件,和上面命令有点类似,但是不会去修改文件
terraform plan 预览变更
执行 terraform plan 可以预览一下代码即将产生的变更:
terraform apply 执行变更
运行terraform apply 时,Terraform会首先重新计算一下变更计划,并且像刚才执行plan命令那样把变更计划打印给我们,要求我们人工确认。让我们输入yes,然后回车
terraform show 查看当前部署
查看当前部署资源属性和元数据,可以用这些值来配置其他资源
apply 完成后将变更操作时的状态信息保存在一个状态文件中,默认情况下会保存在当前工作目录下的terraform.tfstate文件里。不要手动修改这个文件。 再次执行 apply 的时候会检查 tfstate 文件,如果没有这个文件,会认为是第一次创建。 同时下一步 destroy 删除资源的时候也依赖这个文件。 同时 tfstate 中的密码都是明文的,存储需注意安全。
terraform destroy 清理资源
会列出要清理的对象进行确认,清理之后会自动把 tfstate 文件备份 terraform.tfstate.backup 。原文件 terraform.tfstate 中 resource 部分会被清空了。
创建 vnet 和虚拟机
main.tf 增加vnet,sub,vm 等配置文件。注意下变量的引用,vnet 会引用RG名称,网卡引用subnet id
variables.tf 定义资源名称前缀,地区,vm的用户名密码
terraform apply 更新变更,可以在portal 上查看RG,VM信息。 state list 查看资源列表。
参考文档
https://developer.hashicorp.com/terraform/cloud-docs/workspaces/dynamic-provider-credentials/azure-configuration https://registry.terraform.io/providers/hashicorp/azurerm/latest https://lonegunmanb.github.io/introduction-terraform/
关注我的github,后续更新会同步上去
https://github.com/cai11745/hybrid-cloud
Last updated