写点什么

利用 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:311574
用户头像

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

关注

评论

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

Rust从0到1-基础概念-控制流

rust 控制流

Redis 如何应对并发访问

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

kylin基本概念和原理

潮湿了我押韵的心情

带你全面认识CMMI V2.0(四)——管理 赋能

IPD产品研发管理

项目管理 CMMI

JVM 诊断之 jstat 工具使用

hepingfly

Java JVM jvm调优 jstat

BI大数据分析系统开发,助力企业数字化转型

13828808769

区块链 区块链+ #区块链#

从两个模型带你了解DAOS 分布式异步对象存储

华为云开发者联盟

开源 对象存储 存储 分布式异步对象存储 NVM

加码技术破圈创新,蚂蚁金融科技助力各行各业转型升级

Lily

ECMAScript 2018(ES9)新特性简介

程序那些事

JavaScript ecmascript 程序那些事 es9

Kubernetes v1.21 新特性预览

倪朋飞

Kubernetes 云原生

APP 防重放实现

草原狼

安全 API 防重放

搭建 Mac 系统下的 C++开发环境

Jack—Li

有趣!一行代码居然无法获取请求的完整URL

Gopher指北

HTTP Go 语言

centos7docker安装

happlyfox

Docker 学习 3月日更

NA(Nirvana) Chain主打应用而生NA公链NAC公链

区块链第一资讯

爱奇艺大数据生态的实时化建设

Apache Flink

flink 实时计算

用 Go + WebSocket 快速实现一个 chat 服务

万俊峰Kevin

websocket go-zero Go 语言

BOE(京东方)首度披露“千亿级西南战略” 全面布局物联生态

爱极客侠

面向复杂度架构设计的思考

Simon

架构实战营

AI 事件驱动场景 Serverless 实践

Serverless Devs

Kubernetes 云原生 #Serverless

腾讯游戏实时计算应用平台建设实践

Apache Flink

flink

CountDownLatch:别浪,等人齐再团!

王磊

Java 多线程

浅论指针(三)

Integer

c 指针

源码分析:Redisson分布式锁过程分析

程序员架构进阶

redis 源码分析 分布式锁 28天写作 3月日更

Python OpenCV 之像素的加减法,取经之旅第 15 天

梦想橡皮擦

3月日更

区块链推动知识产权数字化,区块链在知识产权中的价值体现

13828808769

区块链+ #区块链#

SpringCloud技术专题-Hystrix以及FeginClient异常

码界西柚

SpringCloud Fegin

C++中结构体的定义

Jack—Li

CSP-J/S必备知识——文件输入输出

Jack—Li

订单和产品的多对多表关系在crudapi系统零代码实现

crudapi

API crud crudapi 一对多 多对一

如何处理分析Flink作业反压的问题?

华为云开发者联盟

实时计算 DWS Flink作业 反压 Sink

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