Доступ к Azure Billing API - PullRequest
       50

Доступ к Azure Billing API

0 голосов
/ 27 сентября 2019

Я хотел бы создать информационную панель с графиками стоимости моих ресурсов Azure (как можно более подробно).Это значит, что списка ежемесячных счетов недостаточно (но я бы уже был очень рад, если бы смог этого добиться!)

В любом случае, первое, что я заметил, это то, что если вы найдете пример, URL-адреса конечной точкивыглядит вот так

 https://management.azure.com/subscriptions/${subscriptionId}/resourcegroups?api-version=2016-09-01

Проверьте конец URL 2016-09-01, выглядит не очень up2date. Этот средний пост был лучшей статьей, которую я мог найти, но он также использует эти URL.Кроме того, я не смог выполнить описанные шаги, во-первых, он использует почтальон для получения access_token (не очень полезно для меня, потому что мне это нужно автоматизировать), а во-вторых, где-то посередине извлекается access_token, но никогда не используется.

Итак, я обнаружил npm-пакеты, такие как [azure-arm-billing][2], из которых мне удалось написать следующую программу (в основном, copy-paste):

const msRestAzure = require('ms-rest-azure');
const BillingManagement = require('azure-arm-billing')

const clientId = process.env['CLIENT_ID'];
const secret = process.env['APPLICATION_SECRET'];
const domain = process.env['DOMAIN']; 
const subscriptionId = process.env['AZURE_SUBSCRIPTION_ID'];

// Retrieve access_token
const app = new msRestAzure.ApplicationTokenCredentials(clientId, domain, secret);
app.getToken((err, token) => {
    console.log(token.accessToken);
});

// =======
msRestAzure
  .interactiveLogin( { domain }) // The argument here is nowhere documented
  .then(credentials => {
      console.log(credentials);
      let client = new BillingManagement(credentials, subscriptionId);
      return client.invoices.list();
  })
  .then(invoices => {
      console.log('List of invoices:');
      console.dir(invoices, { depth: null, colors: true });
  });

При запуске это показывает хороший access_token и счета

...
List of invoices:
[
  {
    id: '/subscriptions/../providers/Microsoft.Billing/invoices/....',
    name: '...',
    type: 'Microsoft.Billing/invoices',
    invoicePeriodStartDate: 2019-08-25T00:00:00.000Z,
    invoicePeriodEndDate: 2019-09-24T00:00:00.000Z,
    billingPeriodIds: [
      '/subscriptions/.../pr..s/Micro..ing/bill..ods/201910-1'
    ]
  },
  {
    id: '/subscriptions/9ea...3d/providers/Microsoft.Billing/invoices/201909-...',
    name: '....',
    type: 'Microsoft.Billing/invoices',
    invoicePeriodStartDate: 2019-07-25T00:00:00.000Z,
    invoicePeriodEndDate: 2019-08-24T00:00:00.000Z,
    billingPeriodIds: [
      '/subscriptions/..../providers/Microsoft.Billing/billingPeriods/201909-1...'
    ]
  }
]

Несмотря на то, что у меня есть мои счета, номеров нет.И я хотел бы получить стоимость для каждого ресурса.

Таким образом, документация, кажется, устарела до того, что не существует для того, что я хочу (как кажется).У меня вопрос: смог ли кто-нибудь получить такую ​​информацию?Я действительно хотел бы знать, как !!

1 Ответ

1 голос
/ 27 сентября 2019

Если вы ищете стоимость ресурсов, я бы посоветовал вам взглянуть на Consumption API - List Usage Details.Это даст вам потребление всех ресурсов.

Вам потребуется установить пакет azure-arm-consumption.

Вот пример кода:

const msRestAzure = require("ms-rest-azure");
const ConsumptionManagementClient = require("azure-arm-consumption");
msRestAzure.interactiveLogin().then((creds) => {
    const subscriptionId = "<your subscription id>";
    const client = new ConsumptionManagementClient(creds, subscriptionId);
    const expand = "";
    const filter = "";
    const skiptoken = "";
    const top = 1000;
    const apply = "";
    return client.usageDetails.list(expand, filter, skiptoken, top, apply).then((result) => {
      console.log("The result is:");
      console.log(result);
    });
}).catch((err) => {
  console.log('An error occurred:');
  console.dir(err, {depth: null, colors: true});
});

Это принятоотсюда: https://github.com/Azure/azure-sdk-for-node/tree/master/lib/services/consumptionManagement.

...