写点什么

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

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

关注

评论

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

java零基础入门-String

喵手

Java 7月月更

mysql进阶(二)你真的了解索引吗?

No Silver Bullet

索引 MySQL 数据库 7月月更

YLearn因果学习开源项目「贡献者计划」精彩来袭!

九章云极DataCanvas

AI 开发者 因果学习 YLearn

从预测到决策,九章云极DataCanvas推出YLearn因果学习开源项目

九章云极DataCanvas

人工智能 YLearn 开源工具包 因果推断

这一次带你透彻解析RocketMQ消息中间件

Java永远的神

Java 程序员 面试 RocketMQ 消息中间件

uWebSockets.js 遇见 Http3

devpoint

JavaScript websocket HTTP3.0 7月月更

简述Serverless原理及运用

南城FE

Serverless 前端 7月月更

面试官:小伙子你来说下缓存穿透、缓存雪崩、缓存击穿

Java永远的神

Java redis 程序员 面试 程序人生

数据治理实战篇!选择什么样的工具让数据治理落地更简单

雨果

数据治理

用什么承受全部的数据-RDD、DataFrame还是Dataset

怀瑾握瑜的嘉与嘉

spark 7月月更

【古月21讲】ROS入门系列(1)——ROS命令工具的使用及创建工作空间和功能包

秃头小苏

ROS 7月月更

【愚公系列】2022年7月 Go教学课程 011-字符串类型

愚公搬代码

7月月更

LeetCode-112. 路径总和(java)

bug菌

Leet Code 7月月更

博云入选Gartner中国云管理工具市场指南代表厂商

BoCloud博云

云原生 Gartner 云管理平台 云管理

2022最新面试八股文,共计12w字,200多页,16个Java技术栈

Java全栈架构师

Java spring 程序员 面试 程序人生

你玩过轻量系统软总线应用吗?

OpenHarmony开发者

OpenHarmony

Ceph Swift 实践运用(四)

Lansonli

云原生 Ceph 7月月更

直播带货系统源码(开源系统版)——如何搭建测试呢?

开源直播系统源码

软件开发 直播源码 语音直播源码 连麦直播

不知道这4种缓存模式,你可能并不是真的懂缓存

Java永远的神

Java 缓存 程序员 面试 后端

Python爬虫挺刑的,去VX公众某位置,平台登录加密参数扣取

梦想橡皮擦

Python 爬虫 python 爬虫 7月月更

语音驱动嘴型与面部动画生成的现状和趋势

行者AI

算法 人工智能’

助力人工智能迈向新阶段,YLearn因果学习开源项目重磅发布!

九章云极DataCanvas

人工智能 开源项目 因果学习 YLearn

电商订单支付时防止重复支付的原理

程序员小毕

Java 程序员 面试 程序人生 后端

两数之和 II - 输入有序数组

面试官问

LeetCode 两数之和

团队管理之git提交规范:commit记录那点事儿

南极一块修炼千年的大冰块

7月月更

首届京东科技合作伙伴大会召开,博云携手京东科技共创产业数字化新增长

BoCloud博云

容器 云原生 PaaS

什么是微软 Edge 浏览器 Tracking Prevention 的 Org Relationship Mitigation 策略

汪子熙

JavaScript html 前端开发 web开发 7月月更

XGRIDS三维重建服务,构建云上数字孪生世界

阿里云弹性计算

容器 3D渲染 弹性计算 GPU算力

Android 自动化测试

沃德

android 程序员 7月月更

【C语言】进阶指针seven

謓泽

7月月更

Wallys/WiFi6 MiniPCIe Module 2T2R 2×2.4GHz 2x5GHz MT7915 MT7975

wallys-wifi6

IPQ4019 IPQ6010 ipq6018 QCN9074 MT7975

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