Получить стоимость ресурса AWS на основе конкретного тега - PullRequest
0 голосов
/ 29 ноября 2018

Я создал различные ресурсы AWS для EC2, хранилища, балансировщика нагрузки, сетей и т. Д. Я пометил каждый ресурс GroupName как ключ и значение, различное для каждой группы, например, group1, group2и т. д.

Теперь я хочу узнать стоимость каждой группы.Я написал следующий код

    GroupDefinition groupDefinition =
        new GroupDefinition().withType(GroupDefinitionType.TAG).withKey("Cluster");

    GetCostAndUsageRequest costAndUsageRequest
        = new GetCostAndUsageRequest()
          .withGroupBy(groupDefinition)
          .withGranularity("MONTHLY")
          .withMetrics("UnblendedCost");

    GetCostAndUsageResult costAndUsage = 
         awsCostExplorer.getCostAndUsage(costAndUsageRequest);

Теперь я ожидаю, что у costAndUsage есть группы, основанные на каждом теге.Но это всегда дает мне общий счет.Я могу дать любое случайное значение withKey, но результат всегда одинаков.

Зависимость Maven:

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>1.11.453</version>
    </dependency>

Это ответ, который я получаю (сначала resultByTime для краткости)

{
   "timePeriod":{
      "start":"2018-11-01",
      "end":"2018-12-01"
   },
   "total":{

   },
   "groups":[
      {
         "keys":[
            "Cluster$"
         ],
         "metrics":{
            "UnblendedCost":{
               "amount":"26712.9751185906",
               "unit":"USD"
            }
         }
      }
   ],
   "estimated":false
}

Я хотел бы получить

Cluster1 -> 1500 USD Cluster2 -> 1000 USD

Предположим, у меня есть куча ресурсов, помеченных ключом Cluster и значениями Cluster1 и Cluster2.

Нет группирования по каждому фактическому значению тега в ответе.Что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Код работал правильно.Я не получил должным образом, потому что есть дополнительные шаги, которые должны быть выполнены на родительском счете получателя.

Вам необходимо

  1. Перейти на платежный портал AWS
  2. Выберите тег, для которого вы хотите включить калькуляцию, в моем случае Cluster
  3. Включить распределение затрат
  4. На это потребуется около 24 часов.

Примечание : если у вас есть субсчет AWS, ваш родительский счет получателя будет иметь разрешение на выполнение вышеуказанных действий.

Подробнее см. Документацию .


Через 24 часа, если вы запустите код, увидите ответ, как показано ниже

{
   "timePeriod":{
      "start":"2018-12-01",
      "end":"2018-12-31"
   },
   "total":{

   },
   "groups":[
      {
         "keys":[
            "Cluster$"
         ],
         "metrics":{
            "UnblendedCost":{
               "amount":"23434.5469766795",
               "unit":"USD"
            }
         }
      },
      {
         "keys":[
            "Cluster$cluster-1"
         ],
         "metrics":{
            "UnblendedCost":{
               "amount":"2343.3888413893",
               "unit":"USD"
            }
         }
      },
      {
         "keys":[
            "Cluster$cluster-2"
         ],
         "metrics":{
            "UnblendedCost":{
               "amount":"23464.8057597427",
               "unit":"USD"
            }
         }
      }
   ],
   "estimated":true
}
0 голосов
/ 02 декабря 2018

Я не уверен, какую именно версию SDK вы используете, но я могу показать вам рабочий код на Ruby (я также группирую по сервису AWS):

credentials = Aws::SharedCredentials.new(profile_name: "REPLACE_profile_name_in_credentials_file")
client = Aws::CostExplorer::Client.new(region: "us-east-1", credentials: credentials)
resp = client.get_cost_and_usage({
      time_period: {
        start: Date.today.at_beginning_of_month.strftime("%Y-%m-%d"), 
        end: Date.tomorrow.strftime("%Y-%m-%d"), 
      },
      granularity: "MONTHLY", 
      metrics: ["UnblendedCost"],
      group_by: [
        {
          type: "DIMENSION", 
          key: "SERVICE",
        },
        {
          type: "TAG",
          key: "Cluster",  
        }
      ]
    })
resp.results_by_time.each do |result|
  #DO SOMETHING
end

Это может дать вам лучшее направление на то, что вам нужно добавить \ редактировать.Если вы сможете поделиться своей документацией и полученным ответом, будет полезно отредактировать и добавить более важную информацию.

...