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

如何获取EC2 t2型实例价格列表?现有API无价格返回求替代方案

AWS Pricing API未返回t2.medium实例价格,有哪些替代方案?

我尝试通过API请求获取可用EC2实例的价格列表,但调用t2类型实例时未在响应中得到价格值。以下是我使用的Ruby代码:

def price_list_of_instance
  pricing = Aws::Pricing::Client.new(
    region: "us-east-1",
    access_key_id: "XXXX",
    secret_access_key: "XXXX"
  )
  resp = pricing.get_products({
    filters: [{
      field: "instanceType",
      type: "TERM_MATCH",
      value: "t2.medium",
    }, ],
    format_version: "aws_v1",
    max_results: 1,
    service_code: "AmazonEC2"
  })
end

请问是否有其他等效API或替代方案可获取EC2 t2型实例的价格列表?


问题分析与解决方案

我来帮你排查这个问题,同时提供几个靠谱的替代方案:

1. 先修复现有AWS Pricing API调用

你的当前调用只过滤了instanceType,但EC2实例价格是多维度的——操作系统、计费模式、租用类型等都会影响价格条目。仅靠实例类型过滤,返回的产品可能不包含有效价格数据,或者价格藏在深层结构里没被提取。

试试添加这些过滤条件,并正确解析价格字段:

def price_list_of_instance
  pricing = Aws::Pricing::Client.new(
    region: "us-east-1",
    access_key_id: "XXXX",
    secret_access_key: "XXXX"
  )
  resp = pricing.get_products({
    filters: [
      { field: "instanceType", type: "TERM_MATCH", value: "t2.medium" },
      { field: "operatingSystem", type: "TERM_MATCH", value: "Linux" }, # 指定操作系统,比如Linux
      { field: "preInstalledSw", type: "TERM_MATCH", value: "NA" }, # 无预装软件
      { field: "tenancy", type: "TERM_MATCH", value: "Shared" }, # 共享租户(默认)
      { field: "capacitystatus", type: "TERM_MATCH", value: "Used" } # 按需实例的容量状态
    ],
    format_version: "aws_v1",
    max_results: 5,
    service_code: "AmazonEC2"
  })

  # 解析响应中的按需价格
  resp.price_list.each do |product|
    product_data = JSON.parse(product)
    on_demand_terms = product_data["terms"]["OnDemand"]
    next if on_demand_terms.empty?

    price_dimensions = on_demand_terms.values.first["priceDimensions"]
    price_info = price_dimensions.values.first
    puts "实例类型: #{product_data['product']['attributes']['instanceType']}"
    puts "按需价格: $#{price_info['pricePerUnit']['USD']} 每小时"
  end
end

2. 替代方案:使用AWS公开价格列表静态文件

AWS提供无需认证的公开JSON格式价格列表,适合批量获取全量EC2价格数据。你可以直接请求对应区域的官方静态文件,然后解析筛选t2系列实例:

require 'net/http'
require 'json'

def get_ec2_t2_prices
  # 构造us-east-1区域的EC2价格列表端点(其他区域可替换对应pricing域名)
  url = URI("https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/index.json")
  response = Net::HTTP.get(url)
  pricing_data = JSON.parse(response)

  # 筛选t2系列的Linux按需实例价格
  pricing_data["products"].each do |product_id, product|
    next unless product["attributes"]["instanceType"].start_with?("t2.")
    next unless product["attributes"]["operatingSystem"] == "Linux"
    next unless product["attributes"]["preInstalledSw"] == "NA"

    on_demand_price = pricing_data["terms"]["OnDemand"][product_id]["priceDimensions"].values.first["pricePerUnit"]["USD"]
    puts "#{product['attributes']['instanceType']}: $#{on_demand_price}/小时"
  end
end

3. 替代方案:使用AWS Cost Explorer API

如果你的场景需要结合成本分析,Cost Explorer API可以获取实例的实际成本(近似价格参考),但需要给IAM用户配置ce:GetCostAndUsage相关权限:

def get_t2_price_via_cost_explorer
  ce = Aws::CostExplorer::Client.new(
    region: "us-east-1",
    access_key_id: "XXXX",
    secret_access_key: "XXXX"
  )

  resp = ce.get_cost_and_usage({
    time_period: {
      start: Date.today.prev_month.strftime("%Y-%m-%d"),
      end: Date.today.strftime("%Y-%m-%d")
    },
    granularity: "DAILY",
    metrics: ["UnblendedCost"],
    filter: {
      dimensions: {
        key: "INSTANCE_TYPE",
        values: ["t2.medium"]
      }
    }
  })

  # 解析返回的成本数据作为价格参考
  resp.results_by_time.each do |result|
    result.groups.each do |group|
      puts "t2.medium 近期成本参考: $#{group.metrics['UnblendedCost']['amount']}"
    end
  end
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:19:14