Получить стоимость ресурса AWS на основе конкретного тега

Я создал различные ресурсы 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 но результат всегда один и тот же.

Что мне здесь не хватает?

1 ответ

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

Вам нужно

  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
}

Я не уверен, какую именно версию 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

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

Другие вопросы по тегам