当前位置: 首页 > news >正文

【Azure 架构师学习笔记】- Terraform创建Azure 资源

本文属于【Azure 架构师学习笔记】系列。

前言

在实际的企业环境中,很少甚至可以说禁止手动创建资源,因为很容易出错,并且大规模部署时会非常低效。因此大部分企业都会使用工具或者某些服务来实现这种可控,可复用,具有伸缩性的部署方式。本文把工具选定为Terraform。

由于后续学习需要不停创建、删除Azure 资源,所以这里演示一下在本机(windows 10)上安装Terraform,并且创建一个Azure Storage Account.

环境搭建

本文把具体环境定格在Win 10 和Azure 上,大概搭建的步骤为:

  1. 安装必要工具
  2. 配置Azure 认证
  3. 创建Terraform配置文件
  4. 部署资源
  5. 验证资源(可选)
  6. 销毁资源(可选)

一、安装必要工具

必要工具包含Terraform,Azure CLI

Terraform

  1. 下载Terraform:Terraform官网,下载对应版本。
    在这里插入图片描述

  2. 解压到特定文件,比如本文的D:\Program Files\terraform_1.10.5_windows_386。

  3. 配置环境变量:
    在这里插入图片描述

  4. 按照步骤把刚才的路径贴进去
    在这里插入图片描述

  5. 验证安装结果:在cmd或者powershell中运行均可。
    在这里插入图片描述

Azure CLI

官网下载安装包并安装。同理验证安装结果
在这里插入图片描述

二、配置 Azure 认证

注意接下来的步骤基本上都使用powershell完成。

  1. 登录 Azure
    ​通过 Azure CLI 登录:az login
    浏览器会自动打开,然后选择你的 Azure 账号登录。
    在这里插入图片描述
    在这里插入图片描述
  2. 创建服务主体(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 配置文件

  1. 新建项目目录: 比如D:\terraform-azure
  2. 创建以下文件:
    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.name
  location                 = azurerm_resource_group.example.location
  account_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.name
  location                 = data.azurerm_resource_group.architect.location
  account_tier             = "Standard"         # 存储层级
  account_replication_type = "LRS"              # 冗余类型
  account_kind             = "StorageV2"        # 必须为 StorageV2
  is_hns_enabled           = true               # 启用分层命名空间


  

  tags = {
    Environment = "DEV"
    Purpose     = "Data Lake Storage"
  }
}


在Powershell中按顺序执行下面命令

  1. terraform init
  2. terraform plan
  3. 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资源已经完成。

相关文章:

  • 趣讲TCP三次握手
  • 【Java分布式】Nacos注册中心
  • 深度评测:Cursor、Windsurf、Devin及其他AI编程工具大比拼
  • PS画笔工具
  • 【NLP】注意力机制
  • JavaScript
  • 2024华为OD机试真题-根据某条件聚类最少交换次数(C++/Java/Python)-E卷-100分
  • Linux基础 -- ARM 32 位架构动态注入代码技术文档
  • dify绑定飞书多维表格
  • 前端或者后端通常用到数组使用方式
  • PMP项目管理—整合管理篇—2.制定项目管理计划
  • drupal的翻译集添加后如何起作用
  • mysql怎样优化where like ‘%字符串%‘这种模糊匹配的慢sql
  • ODE卷-可以处理的最大任务数(200分)
  • [记录贴] 火绒奇怪的进程保护
  • Cherry Studio + 火山引擎 构建个人AI智能知识库
  • 操作系统:设备与I/O管理
  • springboot浅析
  • 打印九九乘法表
  • 【Docker】使用Docker搭建-MySQL数据库服务
  • 紫光集团原董事长赵伟国一审被判死缓
  • 巴方:印度上周导弹袭击造成至少40名平民死亡
  • 观察|“双雄”格局下电池制造商如何生存:加码不同技术、抢滩新赛道
  • 新闻1+1丨婚姻登记服务,如何跑出幸福加速度?
  • 权益类基金发行回暖,这些老将挂帅新基,谁值得买?
  • 今起公开发售,宁德时代将于5月20日在港股上市