azure-arm-потребление: получить потребление группы ресурсов - PullRequest
0 голосов
/ 12 января 2019

В моем проекте Node.js я пытаюсь использовать пакет Azure-Arm-потребление , чтобы получить текущее потребление / биллинг группы ресурсов. Я имею в виду, сколько денег было потрачено на эту группу ресурсов до сих пор.

В разделе Интерфейсы, от AggregatedCost до UsageDetails, все эти интерфейсы содержат методы, но мне просто не удается найти метод для считывания того, сколько денег потратила определенная группа ресурсов.

Мой код:

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);

Получает потребление моей подписки, разделенное на дату. Теперь проблема в том, что я не хочу, чтобы он был разделен по дате, а по группе ресурсов. Есть ли в этот API какой-либо метод, который может это сделать?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Если вы ищете способ использования командлета Azure Powershell: Get-AzureRmConsumpUsageDetail дает потребление для группы ресурсов,

Затем фильтрует результат для группы ресурсов .

Так что в вашем случае используйте следующее при звонке ConsumptionManagementClient.UsageDetails.ListByBillingPeriod

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

0 голосов
/ 14 января 2019

В соответствии с документацией, нет доступных методов / конечных точек для получения данных по группам ресурсов. Вы должны загрузить все данные и обработать их самостоятельно.

Вот скрипт, который будет загружать данные с использованием REST (с использованием ConsistanceManagementClient будет почти то же самое) и суммировать использование по группам ресурсов. Возьми это как отправную точку.

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/

...