好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

python+pandas通过boto3分析aws费用

首先通过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) 
统计这周aws费用并排序
 #按列求和保留小数点后3位
result['this_week_total_cost'] = result.sum(axis=1).round(3)
result.sort_values("this_week_total_cost") 

查看更多关于python+pandas通过boto3分析aws费用的详细内容...

  阅读:22次