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

如何使用Go语言AWS客户端获取指定AWS实例类型的vCPU数量

方案说明

完全可以通过Go版本AWS SDK直接从服务端拉取实例对应的vCPU数值,不需要硬编码实例规格和vCPU的映射表,核心用EC2服务的DescribeInstanceTypes接口即可,这个接口会返回所有实例规格的官方元数据,包括默认vCPU数、内存容量、网络带宽等属性,返回的数值和AWS官方公布的规格参数完全一致。

具体实现

以下是基于AWS Go SDK v2的实现示例,SDK v1版本也提供同名接口,调用逻辑基本一致:

package main

import (
	"context"
	"fmt"
	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/ec2"
)

func GetInstanceVCPUMap(ctx context.Context, instanceTypes []string) (map[string]int32, error) {
	// 加载默认AWS配置,自动从环境变量、本地凭证文件读取凭证和区域配置
	cfg, err := config.LoadDefaultConfig(ctx)
	if err != nil {
		return nil, fmt.Errorf("加载AWS配置失败: %w", err)
	}
	ec2Client := ec2.NewFromConfig(cfg)

	// 接口支持批量传入实例类型查询,无需逐个发起请求
	input := &ec2.DescribeInstanceTypesInput{
		InstanceTypes: instanceTypes,
	}

	resp, err := ec2Client.DescribeInstanceTypes(ctx, input)
	if err != nil {
		return nil, fmt.Errorf("查询实例规格信息失败: %w", err)
	}

	vcpuMap := make(map[string]int32, len(resp.InstanceTypes))
	for _, info := range resp.InstanceTypes {
		// DefaultVCpus字段即为实例默认配置下的vCPU数量,例如c5.18xlarge对应值为72
		vcpuMap[aws.ToString(info.InstanceType)] = aws.ToInt32(info.VCpuInfo.DefaultVCpus)
	}
	return vcpuMap, nil
}
注意事项
  • 调用该接口仅需要给运行程序的身份分配ec2:DescribeInstanceTypes权限即可,不需要其他高权限,IAM配置成本很低。
  • 单次请求最多支持查询100种实例类型,如果你需要查询的实例类型超过这个数量,或者需要拉取全量实例规格数据,处理接口返回的NextToken字段做分页拉取即可。日常使用仅查询配置文件中存储的少量实例类型时,单次请求就能完成。
  • 相比硬编码映射表的方案,这种方式会自动同步AWS侧最新的实例规格数据,新上线的实例类型不需要你手动更新代码里的映射关系,也不会出现本地硬编码数据和AWS实际参数不一致的问题。
  • 建议拿到结果后做一次非零校验,如果某个配置里的实例类型没有查到对应的vCPU数值,直接抛出错误终止流程,避免后续实例启动、资源计算逻辑出现异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:36:18