首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >azure-arm- consumption :获取资源组的消耗

azure-arm- consumption :获取资源组的消耗
EN

Stack Overflow用户
提问于 2019-01-12 17:34:32
回答 2查看 705关注 0票数 5

在我的Node.js项目中,我尝试使用azure-arm-consumption package来获取资源组的当前消耗/计费。我的意思是,到目前为止,在这个资源组上花了多少钱。

在接口下,从AggregatedCost到UsageDetails,所有这些接口都包含方法,但我只是找不到用于读取特定资源组消耗了多少钱的方法。

我的代码:

代码语言:javascript
复制
const MsRest = require('ms-rest-azure');
const credentials = MsRest.loginWithServicePrincipalSecret(keys.appId, keys.pass, keys.tenantId);
const { ConsumptionManagementClient } = require('azure-arm-consumption');
const client = new ConsumptionManagementClient (credentials, subscriptionId);
const cost = client.forecasts.list(subscriptionId);

它检索我的订阅消耗除以日期。现在的问题是,我不希望它按日期划分,而是按资源组划分。在this API中有什么方法可以做到这一点吗?

EN

回答 2

Stack Overflow用户

发布于 2019-01-14 22:00:59

根据文档,没有可用的方法/端点来按资源组获取数据。你必须下载所有的数据并自己处理它们。

下面的脚本将使用REST下载数据(使用ConsumptionManagementClient几乎是相同的),并按资源组汇总使用情况。以此为起点。

代码语言:javascript
复制
const axios = require('axios');

function processUsage(data) {
  let usage = [];

  for (index in data.value) {
    const properties = data.value[index].properties;
    const cost = properties.pretaxCost;

    let resourceGroup = properties.instanceId.replace(`/subscriptions/${properties.subscriptionGuid}/resourceGroups/`, "");
    resourceGroup = resourceGroup.substring(0, resourceGroup.indexOf("/"));

    let foundUsage = usage.filter(x => x.rg === resourceGroup);
    if (foundUsage.length > 0) {
      foundUsage[0].cost += cost
    } else {
      usage.push({
        rg: resourceGroup,
        cost: cost
      });
    }
  }

  usage.map(x => console.log(`${x.rg} | ${x.cost}`));

  // Example result display list of resource groups and costs in EUR (in my case)
  // myresourcegroup | 1.2234748382055878
  // DevTestLab | 0.0004314997440000002
}

function getUsage(subscriptionId, accessToken) {
  const url = `https://management.azure.com/subscriptions/${subscriptionId}/providers/Microsoft.Consumption/usageDetails?api-version=2018-10-01`

  const options = {
    headers: {
      Authorization: `Bearer ${accessToken}`
    }
  }
  axios.get(url, options).then(response => {
    processUsage(response.data);
  }).catch(error => {
    console.log(error);
  });
}

getUsage(
  "subscription id",
  "access token"
);

参考:

https://docs.microsoft.com/en-us/rest/api/consumption/usagedetails https://docs.microsoft.com/en-us/javascript/api/azure-arm-consumption/usagedetails#list-object-

https://docs.microsoft.com/en-us/javascript/api/azure-arm-consumption/usagedetail

https://azure.microsoft.com/cs-cz/blog/azure-consumption-usage-details-api/

票数 2
EN

Stack Overflow用户

发布于 2019-01-18 07:57:32

如果您正在查找Azure Powershell cmdlet: Get-AzureRmConsumptionUsageDetail如何为资源组提供消耗,请参阅

然后it ends up filtering the result for a resource group

因此,在您的用例中,在调用ConsumptionManagementClient.UsageDetails.ListByBillingPeriod时使用以下代码

https://docs.microsoft.com/en-us/javascript/api/azure-arm-consumption/filters?view=azure-node-latest#resourcegroups

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54158315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档