1. 首先通过boto3 调用CostExplorer接口拿到数据具体代码如下:
import boto3
import datetime
from datetime import timedelta
now = datetime.datetime.now()
#本周第一天和最后一天
this_week_start = now - timedelta(days=1+now.weekday())
this_week_end = now + timedelta(days=5-now.weekday())
#生成client
client = boto3.client('ce')
response = client.get_cost_and_usage(
        TimePeriod={
            'Start': this_week_star.strftime('%Y-%m-%d'),
            'End': this_week_end.strftime('%Y-%m-%d')
        },
        Granularity='DAILY',
        Metrics=['BlendedCost'],
        GroupBy=[
            {'Type': 'DIMENSION', 'Key': 'SERVICE'}
        ]
    )

2.根据返回的按天的数据合并成DataFrame

import pandas as pd
#生成空的pd含AWS Resource一列
result = pd.DataFrame(columns=['AWS Resource'])
#生成df
for project in response["ResultsByTime"]:
    resources = []
		costs = []
		for obj in project['Groups']:
		    resources.append(obj['Keys'][0])
				costs.append(float(obj['Metrics']['BlendedCost']['Amount']))
		dataset = {
            'AWS Resource': resources,
            project['TimePeriod']['Start']: costs
        }
		df = pd.DataFrame.from_dict(dataset)
	#合并df并替换NA
		result = pd.merge(result, df, how='outer', on='AWS Resource').fillna(0)
  1. 统计这周aws费用并排序
#按列求和保留小数点后3位
result['this_week_total_cost'] = result.sum(axis=1).round(3)
result.sort_values("this_week_total_cost")