如何使用Azure SDK for Golang获取与az network list-usages CLI命令一致的网络使用量和配额信息
如何使用Azure SDK for Golang获取与az network list-usages CLI命令一致的网络使用量和配额信息
嗨,我看你现在遇到的问题是用armquota包获取不到实际的使用数值(比如Virtual Networks的3),这是因为你找错了对应的SDK包啦!az network list-usages CLI命令其实调用的是Microsoft.Network资源提供者的用量接口,而非Microsoft.Quota的,咱们换个正确的SDK包就能解决问题。
正确实现方案
你需要使用专门针对网络资源设计的armnetwork包,它和az network list-usages调用的是同一个后端接口,能准确返回和CLI一致的结果。
步骤1:引入依赖包
import "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork"
步骤2:完整代码示例
package main import ( "context" "fmt" "log" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork" ) func main() { ctx := context.Background() subscriptionID := "<你的订阅ID>" location := "centralus" // 创建Azure默认身份凭据 cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("创建凭据失败: %v", err) } // 初始化网络资源客户端工厂 clientFactory, err := armnetwork.NewClientFactory(subscriptionID, cred, nil) if err != nil { log.Fatalf("创建客户端工厂失败: %v", err) } usagesClient := clientFactory.NewUsagesClient() // 分页获取指定区域的所有网络资源用量 pager := usagesClient.NewListPager(location, nil) for pager.More() { page, err := pager.NextPage(ctx) if err != nil { log.Fatalf("分页获取数据失败: %v", err) } // 格式化输出,和CLI的table格式对齐 fmt.Printf("%-70s %-15s %-10s\n", "Name", "CurrentValue", "Limit") fmt.Println("----------------------------------------------------------------- -------------- ----------") for _, usage := range page.Value { localizedName := *usage.Name.LocalizedValue currentValue := *usage.CurrentValue limit := *usage.Limit fmt.Printf("%-70s %-15d %-10d\n", localizedName, currentValue, limit) } } }
为什么之前的方法无效?
你之前使用的armquota包对应的是Azure配额管理服务的API,它的Usages接口主要返回配额规则相关的元数据,并不直接对应网络资源的实际使用统计,所以会出现usages字段为空的情况。而armnetwork包的UsagesClient是专门为网络资源设计的,完全匹配az network list-usages的后端逻辑,能准确拿到你需要的CurrentValue和Limit值。
额外小技巧
如果只想获取特定资源类型(比如VirtualNetworks)的用量,可以在遍历的时候加个过滤条件:
if *usage.Name.Value == "VirtualNetworks" { // 输出该资源的用量信息 }
备注:内容来源于stack exchange,提问作者trivelt
相关产品推荐
相关产品推荐

