AzureRM Provider 3.0 升级指南:关键变更与迁移策略
前言
AzureRM Provider 作为 Terraform 生态中管理 Azure 资源的核心组件,其 3.0 版本带来了多项重要改进。本文将从技术架构角度深入解析这次升级的关键变更,并提供实用的迁移建议,帮助用户顺利完成版本过渡。
版本概览
AzureRM Provider 3.0 是自 2020 年 2 月以来首个重大版本更新。新版本新增了近 400 种资源和 100 种数据源支持,使总支持特性达到 761 个资源和 238 个数据源。
升级前准备
在升级到 3.0 版本前,建议:
- 确保使用最新版 Terraform Core(推荐 1.0 或更高版本)
- 检查现有配置中是否使用了即将废弃的功能
- 制定详细的测试和回滚计划
核心变更解析
1. App Service 资源重构
类似 v2.0 中对虚拟机的改进,3.0 版本对 App Service 相关资源进行了更细粒度的划分,主要变化包括:
资源拆分
- 将原有通用资源按操作系统类型拆分为独立资源:
- Linux Function App (
azurerm_linux_function_app
) - Windows Function App (
azurerm_windows_function_app
) - Linux Web App (
azurerm_linux_web_app
) - Windows Web App (
azurerm_windows_web_app
)
- Linux Function App (
新增功能
- 引入专用服务计划资源 (
azurerm_service_plan
) - 新增源代码管理相关资源
- 改进混合连接和部署槽位管理
迁移建议:
使用 terraform state mv
命令逐步迁移现有资源到新资源类型,注意新资源的 schema 可能有所不同。
2. Key Vault 软删除增强
3.0 版本扩展了 Key Vault 的软删除功能,现在支持对证书、密钥和机密单独配置软删除行为:
provider "azurerm" {
features {
key_vault {
purge_soft_deleted_certificates_on_destroy = true
recover_soft_deleted_certificates = true
# 其他相关配置...
}
}
}
最佳实践:
- 生产环境建议保留软删除功能
- 测试环境可考虑禁用以加速资源清理
3. 认证体系升级
从 ADAL (v1) 迁移到 MSAL (v2) 认证库:
- 使用更现代的 OAuth 2.0 令牌
- 更好的安全性和性能
- 对用户透明,无需配置变更
4. 行为一致性改进
可用区处理
- 单可用区资源使用
zone
字段 - 多可用区资源使用
zones
字段 - 不再自动计算可用区,需显式配置
托管身份
identity
块的存在现在明确表示需要分配托管身份- 省略该块表示不需要托管身份
其他重要变更
- Application Gateway:嵌套项改为 Set 类型
- API Management:创建时自动移除默认 API 和产品
- Storage Account:
allow_blob_public_access
重命名为更准确的allow_nested_items_to_be_public
废弃功能移除
3.0 版本移除了多项已废弃功能,主要包括:
数据源变更
azurerm_app_service
→ 使用特定 OS 类型的数据源azurerm_data_lake_store
:因 Data Lake Gen1 废弃而移除- CosmosDB 账户的主密钥字段名称规范化
资源变更
- 移除了多个资源的
tags
字段支持 - Batch Pool 中废弃的任务配置字段更新
- 容器注册表的废弃
storage_account_id
字段移除
升级策略
分阶段升级路径
-
测试阶段:
- 在 2.99.0 版本中通过功能标志启用 3.0 特性
- 在非生产环境验证配置
-
配置固化:
terraform {
required_providers {
azurerm = {
version = "~> 3.0"
}
}
}
- 资源迁移:
- 对每个待更新资源执行:
terraform state rm <resource.address> terraform import <resource.address> <resource.id>
- 对每个待更新资源执行:
常见问题处理
问题1:可用区资源报错
解决:明确配置 zone
或 zones
字段,或使用 ignore_changes
问题2:托管身份不工作
解决:检查是否正确定义了 identity
块
问题3:嵌套资源顺序依赖 解决:对 Application Gateway 等资源更新索引引用方式
结语
AzureRM Provider 3.0 通过资源模型重构、功能增强和废弃清理,为 Azure 资源管理带来了更清晰、更一致的体验。建议用户参考本文指南,制定详细的测试和迁移计划,确保升级过程平稳顺利。对于复杂环境,可考虑分模块逐步升级,降低变更风险。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考