写点什么

利用 AWS Price List API 生成中国区的 EC2 价格表

  • 2019-09-29
  • 本文字数:2819 字

    阅读完需:约 9 分钟

利用AWS Price List API生成中国区的EC2 价格表

需求背景

企业客户在上云的实践过程中,一般都要经历系统迁移入云和云上运维优化这两个重要的阶段,且云上的优化是需要定期不停的做下去的,以达到持续降低成本、优化资源的使用率,以最小的成本、最大的资源利用率来保证业务系统稳定的运行,并能够根据业务系统的实际使用量来分配资源(减低配置或者扩容)。


我们将分以下五个部分,介绍如何使用 AWS API 自动化的进行机型选择:


1.利用AWS Price List API生成中国区的EC2 价格表


2.在迁移项目中,如何自动选择最经济的EC2


3.如何进行EC2优化,进一步优化成本


4.如何为SAP应用选择合适的EC2


5.如何整合RI续购日期


本文先介绍第一部分:利用 AWS Price List API 生成中国区的 EC2 价格表

方案概述

为了选择合适的 EC2 机型,第一步要做的就是了解不同机型的配置以及价格,通常我们会去访问 AWS 中国区的网页(https://www.amazonaws.cn/en/ec2/pricing/ ),来查找相关的信息。如果你访问过这个网页,你就会发现,找到你需要的信息是一件多么繁琐的事情。如果你要了解 EC2 不同机型的配置,你需要访问 On-Demand instances 的价格,因为在 Reserved Instance 网页中没有机型的配置信息。如果你要比较满足一定配置要求(vCPU,Memory)的不同服务器的一年 All Upfront Reserve Instance 价格,你就需要来回查看不同网页中的信息,非常费事。这时你也许会想,如果这些信息都保存在一张 EXCEL 表格中,那用起来该多方便啊!


下面就介绍一种利用 AWS Price List API 生成你需要的价格表的方法。这里我们首先会用到 Lyft 公司开发的 awspricing Python Library(https://github.com/lyft/awspricing ),但是这个 Python Library 只能查询海外的 EC2 价格和 RDS 价格,为了使其能够查询国内的价格,我做了一些改动,使其成为中国版的 awspricing Python Library ,下载地址是:https://github.com/shaneliuyx/awscnprice


安装方法很简单:


1.git clone https://github.com/shaneliuyx/awscnprice.git


2.cd awscnprice


3.执行如下命令:


$ python setup.py biuld
$ python setup.py install
复制代码


现在你就可以正常使用了。

生成 EC2 价格表

我编写了一个名为 get_ec2_info.py 的程序,只要给出输出文件的名字,就可以得到 EC2 配置和价格的信息。


#使用中国版的 awspricing Python Library


import awscnpricing#接下来设置环境变量:
#AWSPRICING_USE_CACHE设置为1,使用Cache文件
os.environ['AWSPRICING_USE_CACHE'] = "1"#Cache文件的位置:
os.environ['AWSPRICING_CACHE_PATH'] = "/tmp/awscnpricing"#Cache文件的有效期:24小时
os.environ['AWSPRICING_CACHE_MINUTES'] = "1440"
复制代码


如果你一天多次查询价格,使用 Cache 文件会大大加快速度,价格文件大约有 18MB,如果每次都从网上下载,速度还是比较慢的。


#设置需要得到的价格表信息:
offering_class = 'standard'
此处设置为standard,得到的是标准Reserved Instance的价格,如果设置成convertible,则可以得到可变RI的价格。
#设置输出文件名:
output = 'cn_ec2_standard_price.xlsx'
复制代码


下面一段检查缓存文件是否存在,如果不存在,就从网上下载:


ec2_offer_code = 'AmazonEC2'
ec2_offer = awscnpricing.offer(ec2_offer_code)
ec2_file_path = os.getenv('AWSPRICING_CACHE_PATH')
ec2_file_name = 'offer_{}_current'.format(ec2_offer_code)
ec2_cache_file = os.path.join(ec2_file_path, ec2_file_name)
if os.path.exists(ec2_cache_file):
with open(ec2_cache_file, 'r') as load_f:
ec2offer = json.load(load_f)
else:
offers = requests.get(
'https://pricing.cn-north-1.amazonaws.com.cn/offers/v1.0/cn/index.json'
)
ec2_offer_path = offers.json()['offers']['AmazonEC2']['currentVersionUrl']
ec2offer = requests.get(
'https://pricing.cn-north-1.amazonaws.com.cn%s' % ec2_offer_path
).json()
复制代码


这个程序主要生成 1 年和 3 年 RI 的价格(包含 All Upfront、Partial Upfront, No Upfront)以及 On-Demand EC2 的价格,包含 China (Beijing)和 China (Ningxia)两个 Region。


PerchaseOption = ['All Upfront', 'Partial Upfront', 'No Upfront']
LeaseContractLength = ['1yr', '3yr']
for sku, data in ec2offer['products'].items():
if data['productFamily'] != 'Compute Instance':
# skip anything that's not an EC2 Instance
continue
ec2_type = data['attributes']['instanceType']

ec2_os = data['attributes']['operatingSystem']

site = data['attributes']['location']
ec2_region = ""
if site == "China (Beijing)":
ec2_region = "cn-north-1"
if site == "China (Ningxia)":
ec2_region = "cn-northwest-1"
复制代码


使用如下 API 得到 RI 的价格(a_price)和 On-Demand Instance(o_price)的价格。如果某类型的价格不存在,则价格显示为 0



for yr in LeaseContractLength:
for p_option in PerchaseOption:
try:
a_price = ec2_offer.reserved_upfront(
ec2_type,
operating_system=ec2_os,
lease_contract_length=yr,
tenancy=data['attributes']['tenancy'],
license_model=data['attributes']['licenseModel'],
preinstalled_software=data['attributes']['preInstalledSw'],
offering_class=offering_class,
purchase_option=p_option,
region=ec2_region,
capacity_status=data['attributes']['capacitystatus']
) except:
a_price = "0"
try:
o_price = ec2_offer.ondemand_hourly(
ec2_type,
operating_system=ec2_os,
tenancy=data['attributes']['tenancy'],
preinstalled_software=data['attributes']['preInstalledSw'],
license_model=data['attributes']['licenseModel'],
region=ec2_region,
capacity_status=data['attributes']['capacitystatus']
)
except:
o_price = "0"
复制代码


最后生成的表格是这样的:



完整的 Python 程序可以在此处下载:


https://github.com/shaneliuyx/awscnprice/blob/master/examples/get_ec2_info.py


如果想详细了解 AWS Price List API,请参考如下网址的内容:


https://aws.amazon.com/blogs/aws/new-aws-price-list-api/


————


如何自动化的选择和优化 EC2 系列(一)利用 AWS Price List API 生成中国区的 EC2 价格表(本博文)


如何自动化的选择和优化 EC2 系列(二)在迁移项目中,如何自动选择最经济的 EC2


如何自动化的选择和优化 EC2 系列(三)如何进行 EC2 优化,进一步优化成本


如何自动化的选择和优化 EC2 系列(四)如何为 SAP 应用选择合适的 EC2


如何自动化的选择和优化 EC2 系列(五)如何整合 RI 续购日期


作者介绍:


刘育新


AWS ProServe 团队高级顾问,长期从事企业客户入云解决方案的制定和项目的实施工作。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/how-to-use-aws-price-list-api-ec2price/


2019-09-29 16:311585
用户头像

发布了 1908 篇内容, 共 147.2 次阅读, 收获喜欢 81 次。

关注

评论

发布
暂无评论
发现更多内容

神经网络攻防:01.模型到底是什么?

P小二

神经网络 网络安全 AIPwn AI安全 P小二

跨云迁移过程中的数据同步及一致性校验实践(一)

UCloud技术

迁移 数据传输 数据库迁移 数据迁移

跨云迁移过程中的数据同步及一致性校验实践(二)

UCloud技术

迁移 数据传输 数据库迁移 数据迁移

“蚂蚁牙黑”太火,想玩就用ModelArts做一个

华为云开发者联盟

AI 动画 modelarts 图像

Java 中各种DTO,POJO 等的概念

少平

Spring中的事务使用注意事项

少平

spring

公安合成作战系统!智慧警务情指行一体化建设解决方案

源中瑞-龙先生

公安合成作战系统开发 产品解决方案 情指行一体化 公安

产品训练营 - 第五周 - 作业

邹小胖

产品经理训练营

Mac 下配置 Intellij IDEA + Tomcat 出现权限问题的解决办法

少平

tomcat

SARIF:DevSecOps工具与平台交互的桥梁

华为云开发者联盟

安全 DevSecOps SARIF 自动化平台 OASIS

一场由fork引发的超时,让我们重新探讨了Redis的抖动问题

华为云开发者联盟

数据库 redis 华为云 GaussDB fork

入选SIGMOD2021的时间序列多周期检测通用框架RobustPeriod如何支撑阿里业务场景?

阿里云大数据AI技术

人工智能 数据库 大数据

vivo 官网资源包适配多场景的应用

vivo互联网技术

低代码 无服务器云函数

FindBugs:Java 静态代码检查

少平

代码审查

阿里巴巴Druid,轻松实现MySQL数据库加密!

王磊

Java springboot Druid

产品训练营-第五周作业

羽室

ETL工具—Taskctl 如何搭建配置作业类型的管理

敏捷调度TASKCTL

大数据 kettle 运维自动化 海豚调度 ETL

开工第一周,有哪些助你弯道超车的好书?

博文视点Broadview

重磅!京东云自研第四代云主机发布;曝国外物理学家开发出用于量子计算机的汇编语言

京东科技开发者

微软 开发者 量子计算机 谷歌

隧道建设手段结合科技能有多强大?盾构机可视化让工程化繁为简

一只数据鲸鱼

物联网 数据可视化 3D可视化 盾构机 隧道工程

关于 Synchronized 的一个点,网上99%的文章都错了

yes

Java JVM

数据产品经理实战-用户运营体系搭建

第519区

算法 数据产品 数据运营

云计算带来的变革将如何在2021年加速创新

云计算

一个15年的架构师谈“如何成为一名优秀的解决方案架构师”

华为云开发者联盟

架构 软件 架构师 华为云

华为AR&VR黑科技:以“自由视角”360度尽展舞台唯美

华为云开发者联盟

华为 算法 视频 AR&VR 全息显示

左手画条龙右手画彩虹——认知负荷理论

Justin

心理学 28天写作 游戏设计

小心你的个人信息——GitHub 热点速览 v.21.09

HelloGitHub

GitHub 开源 终端工具 社交

工作日志3-1

技术骨干

Linux入门篇 —— 手把手教你 Linux 三种网络配置方法

若尘

Linux 网络

字节跳动力推的OKR,是未来企业发展的标配吗?

ToB行业头条

Elasticsearch Search Options 搜索参数

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

利用AWS Price List API生成中国区的EC2 价格表_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章