如何用Boto3获取EC2实例历史按需价格?及相关疑问咨询
AWS EC2按需价格历史获取与价格替代可行性分析
一、获取按需价格历史的可行方案
AWS没有像describe_spot_price_history那样直接返回按需价格历史的专用API,但有两种相对简便的实现方式:
1. 使用AWS Price List API
通过boto3调用该API可获取公开的定价变更记录,需自行解析时间范围筛选近3个月的数据:
import boto3 client = boto3.client('pricing', region_name='us-east-1') response = client.get_products( ServiceCode='AmazonEC2', Filters=[ {'Type': 'TERM_MATCH', 'Field': 'instanceType', 'Value': 'm4.large'}, {'Type': 'TERM_MATCH', 'Field': 'operatingSystem', 'Value': 'Linux'}, {'Type': 'TERM_MATCH', 'Field': 'tenancy', 'Value': 'VPC'}, {'Type': 'TERM_MATCH', 'Field': 'preInstalledSw', 'Value': 'NA'}, {'Type': 'TERM_MATCH', 'Field': 'capacitystatus', 'Value': 'Used'} ], FormatVersion='aws_v1' )
返回结果包含定价生效时间,可据此提取目标时间范围内的历史价格。
2. 使用Cost Explorer API
若账号拥有Cost Explorer权限,可通过该API获取基于实际使用记录的历史支出,再结合使用量计算单位价格:
import boto3 client = boto3.client('ce', region_name='us-east-1') response = client.get_cost_and_usage( TimePeriod={ 'Start': '2024-01-01', 'End': '2024-04-01' }, Granularity='MONTHLY', Metrics=['AmortizedCost'], GroupBy=[ {'Type': 'DIMENSION', 'Key': 'INSTANCE_TYPE'}, {'Type': 'DIMENSION', 'Key': 'OPERATING_SYSTEM'} ], Filter={ 'And': [ {'Dimensions': {'Key': 'INSTANCE_TYPE', 'Values': ['m4.large']}}, {'Dimensions': {'Key': 'OPERATING_SYSTEM', 'Values': ['Linux']}}, {'Dimensions': {'Key': 'USAGE_TYPE_GROUP', 'Values': ['EC2-BoxUsage']}} ] } )
二、用当前按需价格替代过去3个月价格的可行性
- 价格稳定性:EC2按需价格波动极小,AWS仅会在推出新一代实例(如m5替代m4)或进行区域性调整时变更价格,这类操作频率极低,通常数月甚至一年才会发生一次。
- 可行性判断:若目标实例类型(如m4.large)近3个月无官方价格调整,用当前价格替代历史价格完全可行,误差可忽略。若存疑,可先通过Price List API查询该实例的定价变更记录,确认期间是否有价格变动。
内容的提问来源于stack exchange,提问作者Dime
相关产品推荐
相关产品推荐

