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流水线中拆分操作:
- 先执行
terraform apply完成复制资源的创建(仅触发复制) - 添加独立的等待步骤,用Azure CLI循环查询复制状态,直到完成后再继续后续流水线任务
内容的提问来源于stack exchange,提问作者Matty
相关产品推荐
相关产品推荐

