You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Terraform部署Azure Ubuntu虚拟机时遇到资源购买验证失败(未接受订阅法律条款)问题求助

解决Terraform部署Azure Ubuntu VM时的ResourcePurchaseValidationFailed错误

这个错误的根源很明确:你使用的Ubuntu 20.04 Gen2镜像是Azure Marketplace提供的授权镜像,你的目标订阅还没有接受该镜像的法律条款和隐私声明。Azure门户创建VM时会主动弹出条款确认弹窗让你手动接受,但Terraform作为自动化工具不会触发这个交互步骤,所以导致部署失败。

下面是几种解决方法,按优先级推荐:


方法一:用Azure CLI手动接受条款(快速解决)

打开终端,登录Azure CLI后,执行以下命令接受对应镜像的条款:

# 如果只有一个订阅,直接执行
az vm image accept-terms --publisher canonical --offer 0001-com-ubuntu-server-focal --sku 20_04-lts-gen2

# 如果你有多个订阅,指定目标订阅ID执行
az vm image accept-terms --publisher canonical --offer 0001-com-ubuntu-server-focal --sku 20_04-lts-gen2 --subscription xxxxx-xxxxx-xxxxx-xxxx

执行成功后,再重新运行terraform apply即可。

方法二:用Terraform自动化接受条款(适合持续部署场景)

如果你希望把条款接受也纳入自动化流程,可以在你的Terraform配置中添加azurerm_marketplace_agreement资源,让Terraform在创建VM前自动完成条款接受:

  1. 添加协议资源:
resource "azurerm_marketplace_agreement" "ubuntu_bastion_agreement" {
  publisher = var.bastion_publisher
  offer     = var.bastion_offer
  plan      = var.bastion_sku
}
  1. 修改你的虚拟机资源,添加依赖关系,确保条款先被接受再创建VM:
resource "azurerm_linux_virtual_machine" "linux_virtual_machine" {
  # 保留你原有的所有配置...
  
  # 添加依赖,确保协议先生效
  depends_on = [azurerm_marketplace_agreement.ubuntu_bastion_agreement]
}

这样后续执行terraform apply时,Terraform会自动处理条款接受,无需手动操作。

方法三:用Azure PowerShell接受条款

如果你习惯用PowerShell,执行以下命令:

# 先获取条款信息,再接受
Get-AzMarketplaceTerms -Publisher canonical -Product 0001-com-ubuntu-server-focal -Name 20_04-lts-gen2 | Set-AzMarketplaceTerms -Accept

补充说明

为什么Azure门户可以正常创建?因为门户在你选择该镜像后,会自动检测订阅是否已接受条款,如果未接受,会立即弹出确认窗口,你点击"接受"后门户会后台完成条款注册,之后就能正常创建VM。而Terraform没有这个交互环节,所以必须提前处理条款接受。

内容的提问来源于stack exchange,提问作者Jananath Banuka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 16:28:10