Hanumanth Andela
Hanumanth Andela

Reputation: 11

Aws cost and usage for all the instances

I would like to get the usage cost report of each instance in my aws account form a period of time.

I'm able to get linked_account_id and service in the output but I need instance_id as well. Please help

import argparse
import boto3
import datetime

cd = boto3.client('ce', 'ap-south-1')

results = []

token = None
while True:
    if token:
        kwargs = {'NextPageToken': token}
    else:
        kwargs = {}
    data = cd.get_cost_and_usage(
    TimePeriod={'Start': '2019-01-01', 'End':  '2019-06-30'},
    Granularity='MONTHLY',
    Metrics=['BlendedCost','UnblendedCost'],
    GroupBy=[
                {'Type': 'DIMENSION', 'Key': 'LINKED_ACCOUNT'},
                {'Type': 'DIMENSION', 'Key': 'SERVICE'}
             ], **kwargs)
    results += data['ResultsByTime']
    token = data.get('NextPageToken')
    if not token:
        break
print('\t'.join(['Start_date', 'End_date', 'LinkedAccount', 'Service', 'blended_cost','unblended_cost', 'Unit', 'Estimated']))
for result_by_time in results:
    for group in result_by_time['Groups']:
        blended_cost = group['Metrics']['BlendedCost']['Amount']
        unblended_cost = group['Metrics']['UnblendedCost']['Amount']
        unit = group['Metrics']['UnblendedCost']['Unit']
        print(result_by_time['TimePeriod']['Start'], '\t',
        result_by_time['TimePeriod']['End'],'\t',
        '\t'.join(group['Keys']), '\t',
        blended_cost,'\t',
        unblended_cost, '\t',
        unit, '\t',
        result_by_time['Estimated'])

Upvotes: 1

Views: 1266

Answers (2)

Rene B.
Rene B.

Reputation: 7424

You can add an individual tag to all instances (e.g. Id) and then group by that tag:

GroupBy=[
   {
       'Type': 'TAG',
       'Key': 'Id'
   },
],

Upvotes: 1

Lamanus
Lamanus

Reputation: 13581

As far as I know, Cost Explorer can't treat the usage per instance. There is a function Cost and Usage Reports which gives a detailed billing report by dump files. In this file, you can see the instance id.

It can also be connected to the AWS Athena. Once you did this, then directly query to the file on Athena.


Here is my presto example.

select 
    lineitem_resourceid,
    sum(lineitem_unblendedcost) as unblended_cost,
    sum(lineitem_blendedcost) as blended_cost
from 
    <table>
where 
    lineitem_productcode = 'AmazonEC2' and 
    product_operation like 'RunInstances%'
group by 
    lineitem_resourceid

The result is

lineitem_resourceid     unblended_cost      blended_cost
i-*****************     279.424             279.424
i-*****************     139.948             139.948
i-********              68.198              68.198
i-*****************     3.848               3.848
i-*****************     0.013               0.013

where the resourceid containes the instance id. The amount of cost is summed for all usage in this month. For other type of product_operation, it will contains different resource ids.

Upvotes: 1

Related Questions