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

如何通过TypeScript SDK调用API估算OCI实例及存储成本?

OCI资源成本估算的TypeScript SDK实现方案

可行方案:基于OCI Pricing Service SDK实现

OCI官方提供的Pricing Service API及对应TypeScript SDK,可直接获取各类资源的单价,结合你传入的资源数量计算总成本,完全匹配你的需求。

步骤1:安装依赖

先安装OCI Pricing模块和通用认证模块:

npm install @oci-pricing @oci-common

步骤2:实现成本估算逻辑

以下是符合你请求/响应格式的TypeScript代码示例:

import { PricingClient, GetProductPricesRequest } from "@oci-pricing";
import { ConfigFileAuthenticationDetailsProvider } from "@oci-common";

// 初始化OCI认证(依赖本地~/.oci/config配置文件)
const authProvider = new ConfigFileAuthenticationDetailsProvider();
const pricingClient = new PricingClient({ authenticationDetailsProvider: authProvider });

// 你的输入资源列表
const inputResources = [
  {
    "name": "compute.standard.x86",
    "shape": "VM.Standard2.1",
    "region": "us-ashburn-1",
    "quantity": 2
  },
  {
    "name": "storage.standard",
    "region": "us-ashburn-1",
    "quantity": 100
  }
];

// 批量计算资源成本
async function calculateResourceCosts() {
  const outputPrices = [];

  for (const resource of inputResources) {
    let filterConfig;

    // 根据资源类型配置价格查询过滤条件
    switch (resource.name) {
      case "compute.standard.x86":
        filterConfig = {
          productFamily: "Compute Instance",
          attributes: { shape: resource.shape },
          pricingModel: "PAY_AS_YOU_GO"
        };
        break;
      case "storage.standard":
        filterConfig = {
          productFamily: "Block Storage",
          attributes: { storageType: "Standard" },
          pricingModel: "PAY_AS_YOU_GO"
        };
        break;
      default:
        console.warn(`Unsupported resource type: ${resource.name}`);
        continue;
    }

    // 构建价格查询请求
    const priceRequest: GetProductPricesRequest = {
      compartmentId: "ocid1.tenancy.oc1..your-tenancy-ocid", // 替换为你的租户OCID
      filter: {
        region: resource.region,
        productFamily: filterConfig.productFamily,
        attributes: filterConfig.attributes,
        pricingModel: filterConfig.pricingModel
      }
    };

    try {
      const priceResponse = await pricingClient.getProductPrices(priceRequest);
      if (!priceResponse.items?.length) {
        console.warn(`No price found for resource: ${JSON.stringify(resource)}`);
        continue;
      }

      const priceItem = priceResponse.items[0];
      const unitPrice = priceItem.prices?.[0].unitPrice;
      if (!unitPrice) continue;

      // 计算总成本并格式化输出
      const formattedPrice = {
        name: resource.name,
        ...(resource.shape && { shape: resource.shape }),
        region: resource.region,
        quantity: resource.quantity,
        price: {
          amount: parseFloat(unitPrice.amount) * resource.quantity,
          currency: unitPrice.currency,
          unit: resource.name.includes("compute") ? "HOUR" : "GB"
        }
      };

      outputPrices.push(formattedPrice);
    } catch (err) {
      console.error(`Failed to fetch price for ${resource.name}:`, err);
    }
  }

  // 输出你需要的响应格式
  console.log(JSON.stringify({ prices: outputPrices }, null, 2));
}

// 执行计算
calculateResourceCosts();

关键说明

  • 认证配置:代码依赖本地~/.oci/config文件中的认证信息,确保该文件包含正确的租户OCID、用户OCID、密钥路径等。
  • 过滤条件调整:不同资源类型的productFamily和attributes需要对应OCI官方定义的产品属性,比如对象存储需将productFamily改为Object Storage,attributes调整为对应的存储层级。
  • 单位与定价模型:示例中使用按需付费(PAY_AS_YOU_GO),如果需要预留实例或其他定价模型,修改pricingModel参数即可;价格单位需根据资源类型调整(比如存储通常是每月每GB,实例是每小时)。
  • 扩展支持:可以通过添加更多case分支支持其他资源类型(如数据库、网络资源等)。

内容的提问来源于stack exchange,提问作者Samuel A. Souza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:35:19