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

【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资源已经完成。


http://www.kler.cn/a/568874.html

相关文章:

  • ChatGPT与DeepSeek:开源与闭源的AI模型之争
  • 飞书考勤Excel导入到自己系统
  • 相机引导2_两个固定相机引导机器人把芯片装入外壳
  • 基于决策树和随机森林的鸢尾花种类预测
  • CCF-CSP认证 202104-1灰度直方图
  • 【星云 Orbit-STM32F4】06. 串口密码:USART 数据传递
  • 大模型技术:重塑未来的力量
  • 【Android】类加载器热修复-随记(二)
  • SwiftUI之状态管理全解析
  • 大语言模型学习--LangChain
  • webpack5在生产环境屏蔽掉控制台打印 失效处理
  • 阿里云服务器宝塔终端如何创建fastadmin插件
  • 神经网络之RNN和LSTM(基于pytorch-api)
  • 基于图神经网络的会话推荐经典论文
  • 一键安装Mysql部署脚本之Linux在线安装Mysql,脚本化自动化执行服务器部署(附执行脚本下载)
  • 在.net中,async/await的理解
  • 微服务组件详解——sentinel
  • centos7使用rpm包安装mysql5.6和mysql8.0
  • Scala的match表达式的基本简单介绍
  • Redis的持久化-RDBAOF