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

Terraform部署Azure Site Recovery复制VM时认证超时问题求助

解决Azure Site Recovery复制VM时的AAD令牌过期问题

首先明确:你遇到的不是Terraform资源的超时问题,而是Azure AD服务主体的令牌过期导致的认证失败。错误信息里的AADSTS700024明确指出,请求时使用的客户端断言(令牌)已经过期(有效期到10:10,请求时间是10:41)——Terraform在等待VM复制完成的长时间过程中,没有自动刷新Azure凭据,导致后续的状态查询请求用了过期令牌。

以下是可行的解决方案:

1. 延长服务主体凭据的有效期

如果你的Terraform使用服务主体证书认证:

  • 将证书的有效期从当前的10分钟延长至至少1小时(或覆盖VM复制的预估耗时),确保在整个复制过程中令牌不会过期。
    如果使用客户端密码认证:
  • 检查Azure AD中服务主体的密码有效期,确保其足够覆盖流水线的执行时长。

2. 拆分Terraform执行逻辑,避免长时间等待

azurerm_site_recovery_replicated_vm资源默认会等待VM复制完成才会标记为创建成功,这个过程可能耗时超过令牌有效期。可以拆分操作:

  • 第一步:仅触发复制配置,不等待完成
  • 第二步:单独用Azure CLI等待复制完成(CLI会自动刷新令牌)

示例配置:

# 仅触发VM复制配置,不等待完成
resource "azurerm_site_recovery_replicated_vm" "windowsvm-replication" {
  # 你的现有配置参数
  # ...

  # 设置create超时为10分钟,仅用于触发复制
  timeouts {
    create = "10m"
  }
}

# 单独等待复制完成,依赖CLI自动刷新令牌
resource "null_resource" "wait_for_replication_completion" {
  depends_on = [azurerm_site_recovery_replicated_vm.windowsvm-replication]

  provisioner "local-exec" {
    command = <<EOT
      # 循环查询复制状态,直到进入健康保护状态
      until az recovery-services replication protected-item show \
        --vault-name "rsv-dr-ukwest" \
        --resource-group "rg-dr-ukwest" \
        --fabric-name "primary-fabric" \
        --protection-container "primary-protection-container" \
        --name "VM1" \
        --query "properties.protectionState" -o tsv | grep -E "Protected|Healthy"; do
        echo "Replication in progress, waiting 5 minutes..."
        sleep 300
      done
    EOT
  }
}

3. 升级AzureRM Provider到最新版本

检查并升级azurerm Terraform Provider到最新稳定版,部分新版本优化了长时间操作中的令牌刷新逻辑,可能直接解决该问题。

4. 流水线层面拆分步骤

在CI/CD流水线中拆分操作:

  1. 先执行terraform apply完成复制资源的创建(仅触发复制)
  2. 添加独立的等待步骤,用Azure CLI循环查询复制状态,直到完成后再继续后续流水线任务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:47:09