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

Azure Cost Management API未返回Blob位置问题求助

Azure成本管理API生成成本明细报告后无法获取Blob链接的排查方案
  • 先确认响应结构是否正确
    轮询得到200响应后,先把完整响应内容打印出来排查,别直接定位Manifest.blobs.blobLink。比如在PowerShell里执行$response.Content | ConvertFrom-Json | Format-List输出所有字段,重点看:

    • 是否存在Manifest字段?有没有拼写错误(比如小写manifest)?
    • blobs数组是否为空?如果是空数组,说明生成的报告无数据,自然不会返回Blob链接。
    • 有没有隐藏的错误字段?比如error或status是否提示报告生成异常?
  • 检查请求参数与权限

    1. 调用generateCostDetailsReport时必须传入合法请求体,比如指定时间范围、指标类型:
      $requestBody = @{
          metric = "ActualCost"
          timePeriod = @{
              start = "2024-02-01"
              end = "2024-02-29"
          }
          granularity = "Daily"
      } | ConvertTo-Json -Depth 5
      
      若未传请求体或参数无效,可能生成无数据的报告,导致没有Blob链接。
    2. 确认你的服务主体/账户拥有CostManagementReader或BillingReader权限,且权限范围覆盖目标enrollmentAccounts,而非仅订阅级权限。权限不足可能导致报告生成后隐藏Blob链接。
  • 验证轮询逻辑

    1. 确保正确提取Location响应头:在PowerShell里用$initialResponse.Headers.GetValues("Location")获取完整轮询URL,不要遗漏任何参数。
    2. 调整轮询间隔:报告生成可能需要3-5分钟(数据量大时更久),建议间隔设为30秒以上,避免过早轮询导致报告未完全生成,此时blobs字段可能为空。
  • 调试示例代码
    把轮询后的处理代码改成以下形式,方便排查问题:

    # 轮询获取报告状态
    $pollHeaders = @{ Authorization = "Bearer $accessToken" }
    do {
        Start-Sleep -Seconds 30
        $pollResponse = Invoke-RestMethod -Uri $pollUrl -Method Get -Headers $pollHeaders
        # 输出完整响应结构
        Write-Host "完整响应内容:"
        $pollResponse | ConvertTo-Json -Depth 10
        # 检查Blob链接
        if ($pollResponse.Manifest -and $pollResponse.Manifest.blobs) {
            $blobLinks = $pollResponse.Manifest.blobs | Select-Object -ExpandProperty blobLink
            Write-Host "找到Blob链接:$($blobLinks -join ', ')"
            break
        } else {
            Write-Host "未找到Blob链接,继续轮询..."
        }
    } while ($pollResponse.Status -ne "Completed")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:52:44