本文属于【Azure 架构师学习笔记】系列。
前言
在实际的企业环境中,很少甚至可以说禁止手动创建资源,因为很容易出错,并且大规模部署时会非常低效。因此大部分企业都会使用工具或者某些服务来实现这种可控,可复用,具有伸缩性的部署方式。本文把工具选定为Terraform。
由于后续学习需要不停创建、删除Azure 资源,所以这里演示一下在本机(windows 10)上安装Terraform,并且创建一个Azure Storage Account.
环境搭建
本文把具体环境定格在Win 10 和Azure 上,大概搭建的步骤为:
- 安装必要工具
- 配置Azure 认证
- 创建Terraform配置文件
- 部署资源
- 验证资源(可选)
- 销毁资源(可选)
一、安装必要工具
必要工具包含Terraform,Azure CLI
Terraform
-
下载Terraform:Terraform官网,下载对应版本。
-
解压到特定文件,比如本文的D:\Program Files\terraform_1.10.5_windows_386。
-
配置环境变量:
-
按照步骤把刚才的路径贴进去
-
验证安装结果:在cmd或者powershell中运行均可。
Azure CLI
官网下载安装包并安装。同理验证安装结果
二、配置 Azure 认证
注意接下来的步骤基本上都使用powershell完成。
- 登录 Azure
通过 Azure CLI 登录:az login
浏览器会自动打开,然后选择你的 Azure 账号登录。
- 创建服务主体(Service Principal)
Terraform 需要通过SP 对操作 Azure 资源, 另外这个SP 需要在订阅中有contributor 或以上的角色,才能进行资源的操作。
az ad sp create-for-rbac --name "terraform-sp" --role contributor --scopes /subscriptions/<你的订阅ID>
执行后会生成以下结果, 记得要保存好信息,后续需要使用
3. 设置环境变量
可以在powershell或者cmd中执行:
Powershell:
$env:ARM_CLIENT_ID = "<appId>"
$env:ARM_CLIENT_SECRET = "<password>"
$env:ARM_TENANT_ID = "<tenant>"
$env:ARM_SUBSCRIPTION_ID = "<订阅ID>"
CMD:
set ARM_CLIENT_ID="<appId>"
set ARM_CLIENT_SECRET="<password>"
set ARM_TENANT_ID="<tenant>"
set ARM_SUBSCRIPTION_ID="<订阅ID>"
三、创建 Terraform 配置文件
- 新建项目目录: 比如D:\terraform-azure
- 创建以下文件:
providers.tf :用于配置 Azure Provider
terraform {required_providers {azurerm = {source = "hashicorp/azurerm"version = "~> 3.90.0" # 使用最新稳定版本}}
}provider "azurerm" {features {}
}
main.tf :用于定义资源
# 创建资源组
resource "azurerm_resource_group" "example" {name = "terraform-rg"location = "East US"
}# 创建存储账户
resource "azurerm_storage_account" "example" {name = "tfstorageaccount123" # 必须全局唯一resource_group_name = azurerm_resource_group.example.namelocation = azurerm_resource_group.example.locationaccount_tier = "Standard"account_replication_type = "LRS"
}
outputs.tf :用于输出关键信息
output "storage_account_name" {value = azurerm_storage_account.example.name
}
四、部署资源
完成上面准备之后即可开始尝试创建,本人通过把下面内容放入main.tf 并运行,从而创建了一个Azure Storage Account。
terraform {required_providers {azurerm = {source = "hashicorp/azurerm"version = "=3.0.0"}}
}# Configure the Microsoft Azure Provider
provider "azurerm" {features {}
}# 引用现有的资源组 "Architect"
data "azurerm_resource_group" "architect" {name = "Architect" # 确保资源组已存在
}# 创建支持分层命名空间的存储账户
resource "azurerm_storage_account" "medallionadls01" {name = "medallionadls01" # 必须全局唯一resource_group_name = data.azurerm_resource_group.architect.namelocation = data.azurerm_resource_group.architect.locationaccount_tier = "Standard" # 存储层级account_replication_type = "LRS" # 冗余类型account_kind = "StorageV2" # 必须为 StorageV2is_hns_enabled = true # 启用分层命名空间tags = {Environment = "DEV"Purpose = "Data Lake Storage"}
}
在Powershell中按顺序执行下面命令
- terraform init
- terraform plan
- terraform apply --回复yes即可。
下面是一些过程截图:
五、验证资源
可以登录portal。或者通过PS 命令: az storage account list --resource-group 具体的资源组名
六、销毁资源
需要在Terraform的配置目录下执行,一开始本人在D 盘直接执行,不抱错但是没有效果,后来定位到本人的D:\terraform-azure即可执行:
terraform destroy -target=资源类型.资源名
本例中为: terraform destroy -target=azurerm_storage_account.medallionadls01
七、常见问题解决
1. 错误:权限不足
现象:Error: authorization.RoleAssignmentsClient#Create: Failure responding to request
解决:确保服务主体在订阅中有 Contributor 角色。
2. 错误:名称冲突
现象:Storage account name ‘tfstorageaccount123’ is already taken
解决:修改存储账户名称(如 tfstorageaccount001)。
3. 错误:版本不兼容
现象:Provider registry.terraform.io/hashicorp/azurerm does not have a version matching ~> 3.0
解决:更新 providers.tf 中的版本号(如 version = “~> 3.90.0”)。
小结
至此用Terraform创建单个Azure资源已经完成。