首先通过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)#按列求和保留小数点后3位
result[‘this_week_total_cost‘] = result.sum(axis=1).round(3)
result.sort_values("this_week_total_cost")原文:https://blog.51cto.com/aegis8/2534562