Add instance names/fleet name/ASG name against resource IDs in AWS Cost & Usage report

128 Views Asked by At

I have setup a cost and usage report in a s3 bucket. I'm trying to get different cost for EC2 instances from the report and I need to add a custom column which has a fleet name OR ASG name kind of details against the instance IDs.

I have got the instance Name and their IDs using EC2 API in a dictionary, but I'm not able to add my custom column to the report so that I can use groupBy to get different types of costs associated with instances.

2

There are 2 best solutions below

0
On BEST ANSWER

There is no straight forward way to do this. We have to add a new column to the dataframe derived from csv file(cost & usage report), then use the instance info derived using ec2 API(Use the tag option). Once we have the new column populated, we can use groupby() on the new column to get our desired data from the dataframe

running_instances = ec2_cli.instances.filter(Filters=[{
        'Name': 'instance-state-name',
        'Values': ['running']}])
    ec2info = defaultdict()

for instance in running_instances:
    for tag in instance.tags:
        if 'Name'in tag['Key']:
            name = tag['Value']
    ec2info[instance.id] = {
            'Name': name,
            'Type': instance.instance_type
    }

df.insert(loc=17, column='Instance_Name', value='Other')
instance_id = []

def update_col(x):
    for key, val in ec2info.items():
        if x == key:
            if ('MyAgg' in val['Name']) | ('MyAgg-AutoScalingGroup' in val['Name']):
                return 'SharkAggregator'
            if ('MyColl AS Group' in val['Name']) | ('MyCollector-AutoScalingGroup' in val['Name']):
                return 'SharkCollector'
            if ('MyMetric AS Group' in val['Name']) | ('MyMetric-AutoScalingGroup' in val['Name']):
                return 'Metric'

df['Instance_Name'] = df.ResourceId.apply(update_col)
df.Instance_Name.fillna(value='Other', inplace=True)
0
On

You could do this by tagging the instances ( which arguably is the aws standard way of grouping). You need to enable the tags in billing console..cost allocation tags?

Then you will have a column for each tag