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

如何使用Golang Azure Blob Storage SDK获取存储容器所属区域信息?

Azure Blob 存储容器区域查询方案(Golang 场景)

Azure Blob 容器的所属区域和其归属的存储账号区域完全一致,无需单独查询容器维度的区域信息,以下两种方案均可实现需求:

方案1:无依赖公开接口查询(推荐)

该方案使用Azure Blob存储原生公开的Get Account Information接口实现,无需存储账号权限、无需引入额外SDK,只要网络可访问目标Blob服务地址即可调用。

  • 调用规则:
    • 请求地址:直接使用你已知的Blob服务根地址即可,无需携带容器路径
    • 请求方法:优先使用HEAD方法减少传输开销,GET方法也支持
    • 必传请求头:x-ms-version: 2018-03-28 或更高版本
    • 响应解析:成功请求返回的响应头中,x-ms-location 字段值即为存储账号所属的Azure区域标识
  • Golang 示例代码:
package main

import (
	"fmt"
	"net/http"
)

func GetBlobAccountRegion(blobServiceAddr string) (string, error) {
	req, err := http.NewRequest(http.MethodHead, blobServiceAddr, nil)
	if err != nil {
		return "", err
	}
	// 必须指定符合要求的x-ms-version版本
	req.Header.Set("x-ms-version", "2018-03-28")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		return "", err
	}
	defer resp.Body.Close()

	return resp.Header.Get("x-ms-location"), nil
}

func main() {
	// 替换为实际的Blob服务地址
	region, err := GetBlobAccountRegion("https://demoaccount.blob.core.windows.net/")
	if err != nil {
		panic(err)
	}
	fmt.Println("存储容器所属区域:", region)
}

方案2:Azure 资源管理SDK查询

该方案适用于你已经持有存储账号所属Azure订阅的管理权限,且项目中已经集成了Azure Go SDK的场景。

  • 操作逻辑:
    1. 从Blob服务地址中提取存储账号名称
    2. 通过Azure资源管理SDK调用存储账号查询接口,返回的资源属性中Location字段即为区域信息
  • 注意事项:该方案需要提前配置Azure SDK的身份认证信息,权限范围至少包含存储账号的读取权限。
  • 简化示例代码:
package main

import (
	"context"
	"fmt"

	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage"
)

func GetBlobRegionBySDK(subscriptionID, accountName, resourceGroupName string) (string, error) {
	cred, err := azidentity.NewDefaultAzureCredential(nil)
	if err != nil {
		return "", err
	}
	client, err := armstorage.NewAccountsClient(subscriptionID, cred, nil)
	if err != nil {
		return "", err
	}
	resp, err := client.GetProperties(context.TODO(), resourceGroupName, accountName, nil)
	if err != nil {
		return "", err
	}
	return *resp.Account.Location, nil
}

func main() {
	// 替换为实际参数
	region, err := GetBlobRegionBySDK("你的订阅ID", "存储账号名", "资源组名")
	if err != nil {
		panic(err)
	}
	fmt.Println("存储容器所属区域:", region)
}

补充说明

如果你的Blob服务地址使用了自定义域名,需要先将自定义域名解析到对应的原生Blob服务地址后,再使用方案1进行查询即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:48:04