首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接入蔚蓝计费API

接入蔚蓝计费API
EN

Stack Overflow用户
提问于 2019-09-27 13:37:41
回答 1查看 387关注 0票数 1

我想创建一个仪表板,其中包含关于我的蓝色资源成本的图表(尽可能详细)。意思是,单单每月发票是不够的(但我已经非常高兴,如果我能做到这一点!)

无论如何,我注意到的第一件事是,如果您找到一个示例,端点urls看起来如下

代码语言:javascript
复制
 https://management.azure.com/subscriptions/${subscriptionId}/resourcegroups?api-version=2016-09-01

查看url 2016-09-01的末尾,看起来不太像up2date。中间帖子是我能找到的最好的文章,但它也使用这些urls。此外,我无法按照所描述的步骤进行操作,首先它使用postman检索access_token (因为我需要它的自动化,所以对我不是很有用),其次,在中间的某个地方检索到了access_token,但从未使用过。

因此,我找到了一个像[azure-arm-billing][2]这样的npm包,我可以从它编写以下程序(主要是复制粘贴):

代码语言:javascript
复制
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和发票

代码语言:javascript
复制
...
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...'
    ]
  }
]

虽然我有发票,但没有号码。我想收回每一项资源的成本。

因此,这些文档似乎已经过时,以至于我想要的东西已经不存在了(看上去是这样的)。我的问题是,如果有人能够检索到这样的信息?我真的很想知道怎么做!!

更新这似乎是一个权限问题。所以,下面我分享一些截图,展示我现在所拥有的。也许从这些可以清楚地看出我错过了什么,或者设置错了。首先,这里是我最新的nodejs应用程序:

代码语言:javascript
复制
const msRestAzure = require("ms-rest-azure");
const ConsumptionManagementClient = require("azure-arm-consumption");

const clientId = '76d79....';          // App registration ID
const secret = '****...';              // App registration secret
const domain =  'dc36...';             // tenantId
const subscriptionId = '9ea2d...';     // subscription ID

const AzureServiceClient = msRestAzure.AzureServiceClient;

//an example to list resource groups in a subscription
msRestAzure.loginWithServicePrincipalSecret(clientId, secret, domain).then((creds) => {
    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:', result);
  });
}).catch((err) => {
  console.log('An error occurred:');
  console.dir(err, { depth: null, colors: true });
});

,它输出statusCode 401

代码语言:javascript
复制
Error: Unauthorized. Request ID: e6b127...
...

所以,我在AD中注册了应用程序

它的API权限是

最后,我只有一个订阅

具有下列IAM设置

有可疑吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-27 15:15:19

如果您正在寻找资源成本,我建议您查看一下Consumption API - List Usage Details。这会让你消耗掉所有的资源。

您需要安装azure-arm-consumption包。

下面是示例代码:

代码语言:javascript
复制
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

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

https://stackoverflow.com/questions/58135692

复制
相关文章

相似问题

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