Мне было бы интересно получить данные управления затратами Azure (особенно амортизированную стоимость). На первый взгляд набор пакетов AzureR кажется хорошей отправной точкой.
Можно ли как-то использовать AzureAuth, чтобы авторизовать меня, а затем попытаться использовать REST API? На данный момент мне даже не удалось правильно использовать AzureAuth, так как я не понимаю параметры.
Кто-нибудь из вас работает с этими данными в R? Как вы его получаете? Сохранение CSV-файла на портале Azure — это ужасно, потому что установка правильных фильтров занимает много времени, а Microsoft время от времени меняет схему экспорта. Например, сегодня пропали несколько столбцов (например, тип ресурса) при группировке по тегу.
Любая помощь будет очень признательна :)
Изменить: благодаря помощи Хонга Оой (https://github.com/Azure/AzureR/issues/6) Теперь мне удалось подключиться к API управления затратами с помощью AzureRMR:
library(AzureRMR)
az <- create_azure_login()
sub1 <- az$get_subscription(my_sub_guid)
d1 <- sub1$do_operation("providers/Microsoft.CostManagement/query", api_version = "2019-11-01", http_verb = "POST", encode = "json",
body = list(
timeframe = "Custom",
timePeriod = list(
from = "2020-04-01",
to = "2020-04-01"
),
type = "AmortizedCost",
dataset = list(
granularity = "daily"
)
))
Чего я до сих пор не знаю, так это:
- Как отправить тело в формате JSON, а не список списков?
- Как получить ответ в формате JSON?
- Как получить больше столбцов в ответе? Мне особенно нужно имя ресурса и тип ресурса.
Изменить 2. Пример ответа:
response_example <-
list(properties = list(
nextLink = NULL,
columns = list(
list(name = "UsageDate",
type = "Number"),
list(name = "Currency",
type = "String")
),
rows = list(
list(as.integer(20200401),
"EUR"),
list(as.integer(20200402),
"EUR")
)
))
Что я хочу сделать, так это получить фрейм данных из ответа. Я нашел рабочее решение, но оно выглядит ужасно:
d1_ <- do.call(what = "rbind", args = lapply(d1$properties$rows, as_tibble, .name_repair = "unique"))
colnames(d1_) <- do.call(what = "rbind", args = lapply(d1$properties$columns, as_tibble, .name_repair = "unique")) %>%
select(name) %>% pull()
Редактировать 3: если кому-то это нужно, я нашел способ запросить определенные столбцы. Тело это:
{
"type":"AmortizedCost",
"dataSet":{
"granularity":"Daily",
"aggregation":{
"PreTaxCost":{
"name":"PreTaxCost",
"function":"Sum"
}
},
"sorting":[
{
"direction":"ascending",
"name":"UsageDate"
}
],
"grouping":[
{
"type":"TagKey",
"name":"myTag"
},
{
"type":"Dimension",
"name":"ResourceType"
},
{
"type":"Dimension",
"name":"ResourceGroupName"
}
]
},
"timeframe":"Custom",
"timePeriod":{
"from":"2020-04-01T00:00:00+00:00",
"to":"2020-04-30T23:59:59+00:00"
}
}
Допустимые параметры (имена столбцов):
AccountName, BillingAccountId, BillingAccountName, BillingMonth, BillingPeriod, BillingProfileId, BillingProfileName, ChargeType, ConsumedService, CostAllocationRuleId, CostAllocationRuleName, CustomerName, CustomerTenantDomainName, CustomerTenantId, DepartmentName, EnrollmentAccountName, Frequency, InvoiceId, InvoiceNumber, InvoiceSection, InvoiceSectionId, InvoiceSectionName, MarkupRuleId, MarkupRuleName, Meter, MeterCategory, MeterId, MeterSubcategory, PartNumber, PartnerEarnedCreditApplied, PartnerName, PricingModel, Product, ProductOrderId, ProductOrderName, PublisherType, ResellerMPNId, ReservationId, ReservationName, ResourceGroup, ResourceGroupName, ResourceGuid, ResourceId, ResourceLocation, ResourceType, ServiceFamily, ServiceName, ServiceTier, SubscriptionId, SubscriptionName, UnitOfMeasure
Кроме того, вот как я работаю с ответом: Превращение стоимости Azure Ответ Management API на фрейм данных