写点什么

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

发布了 1855 篇内容, 共 122.0 次阅读, 收获喜欢 79 次。

关注

评论

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

华为云弹性负载均衡ELB,如何保障服务器不瘫痪?

科技说

华为云桌面,助力企业智慧办公

科技之光

【JavaWeb】Java Web三大组件之Filter过滤器

No8g攻城狮

javaWeb #web

【JVM规范】第二章-JVM结构

四月

Java JVM

Fastjson的反序列化漏洞复现

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

时序数据库 TDengine 签约华锐技术,助力行情数据处理分析

TDengine

数据库 tdengine 时序数据库

NFTScan 2022 年度总结

NFT Research

NFT 数据基础设施

有奖评测 | Serverless 应用引擎 SAE 征集令开启

阿里巴巴云原生

阿里云 Serverless 云原生

Web3 聚合平台 AIDAMETA,圣诞BNB 大放送

股市老人

“灵、简、畅、安”,就选华为云桌面

科技之光

华为全球加速GA带给你稳定的网络体验!

清欢科技

华为云全球加速GA,为现代企业跨国办公保驾护航

清欢科技

2022年混过的那些SAP项目

SAP虾客

wms 2022年 SAP-QM

使用NineData实现企业级数据库备份, 数据备份告别“拆盲盒” ?

NineData

sql 数据恢复 多云架构 数据管理工具 数据备份

微服务洞察,让微服务更透明

阿里巴巴云原生

阿里云 微服务 云原生

未来智安入围《2022年度中国数字安全能力图谱》威胁检测与响应领域能力者

未来智安XDR SEC

国内首家!博睿数据获信通院AIOps能力成熟度模型优秀评级

博睿数据

智能运维 博睿数据 Swift AI K可观测性 荣誉奖项

【前端】JS(javascript)中this的几种用法实例详解

No8g攻城狮

JavaScript js

刨根问底系列之grpc-java入门

零点999

华为云桌面为建筑行业BIM落地实施提供有力支撑

科技之光

架构实战营 3-6 消息队列架构详设随堂练习

西山薄凉

「架构实战营」

华为云连接CC——多场景构建数据网,助力企业享受高质量办公体验

IT科技苏辞

软件测试丨一文搞定 Postman 接口自动化测试

测试人

软件测试 Postman 自动化测试 接口测试 测试开发

大势所趋_ 华为云企业交换机ESW助力智慧医院转型

科技说

基于声网 Flat 实现“成语解谜”的 Web 小游戏

声网

JavaScript 开源 Web 互动白板

怎么搭建自己的小型渲染农场?个人渲染农场配置

Renderbus瑞云渲染农场

渲染农场 搭建渲染农场

华为云弹性负载均衡服务,如何助企业应付流量压力

科技说

主数据的3大特征、4个超越和3个二八原则

用友BIP

HTTP响应首部字段

穿过生命散发芬芳

HTTP 12月月更

《数字经济全景白皮书》中国产业数字化趋势报告2023

易观分析

产业数字化 报告

从非洲到全球,看华为云连接CC如何助力出海企业更好发展

IT科技苏辞

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