python-3.x - 使用 boto3 获取 EBS 快照定价
问题描述
如何使用 Boto3 获取 AWS EBS 快照定价
>>> import boto3
>>> aws_pricing_region = "us-east-1"
>>> pricing_auth = boto3.client('pricing', region_name=aws_pricing_region)
>>> response = pricing.describe_services()
我在 Module / Pricing API 中找不到 EBS 服务
解决方案
我试图为你找到这些,但它们似乎隐藏得很好。这是我想出的:
#!/usr/bin/env python3
import json
import boto3
def main():
pricing = boto3.client("pricing", region_name="us-east-1")
ebs_pricing = pricing.get_products(
ServiceCode="AmazonEC2",
Filters=[
{
"Type": "TERM_MATCH",
"Field": "usagetype",
# You'll need to get the correct region code here
# EUC1 = eu-central-1 = Frankfurt
"Value": "EUC1-EBS:SnapshotUsage"
}
]
)
pricing_info = json.loads(ebs_pricing["PriceList"][0])
print(json.dumps(pricing_info, indent=4))
if __name__ == "__main__":
main()
这将返回:
{
"product": {
"productFamily": "Storage Snapshot",
"attributes": {
"storageMedia": "Amazon S3",
"servicecode": "AmazonEC2",
"usagetype": "EUC1-EBS:SnapshotUsage",
"locationType": "AWS Region",
"location": "EU (Frankfurt)",
"servicename": "Amazon Elastic Compute Cloud",
"operation": ""
},
"sku": "42HPMPRPNWRJYGZM"
},
"serviceCode": "AmazonEC2",
"terms": {
"OnDemand": {
"42HPMPRPNWRJYGZM.JRTCKXETXF": {
"priceDimensions": {
"42HPMPRPNWRJYGZM.JRTCKXETXF.6YS6EN2CT7": {
"unit": "GB-Mo",
"endRange": "Inf",
"description": "$0.054 per GB-Month of snapshot data stored - EU (Frankfurt)",
"appliesTo": [],
"rateCode": "42HPMPRPNWRJYGZM.JRTCKXETXF.6YS6EN2CT7",
"beginRange": "0",
"pricePerUnit": {
"USD": "0.0540000000"
}
}
},
"sku": "42HPMPRPNWRJYGZM",
"effectiveDate": "2021-03-01T00:00:00Z",
"offerTermCode": "JRTCKXETXF",
"termAttributes": {}
}
}
},
"version": "20210305201619",
"publicationDate": "2021-03-05T20:16:19Z"
}
要获取所有属性值,您可以执行以下操作:aws pricing get-attribute-values --service-code AmazonEC2 --attribute-name usagetype
- 但有很多!
$ aws pricing get-attribute-values --service-code AmazonEC2 \
--attribute-name usagetype | grep SnapshotUsage
"Value": "AFS1-EBS:SnapshotUsage.outposts"
"Value": "AFS1-EBS:SnapshotUsage"
"Value": "APE1-EBS:SnapshotUsage.outposts"
"Value": "APE1-EBS:SnapshotUsage"
"Value": "APN1-EBS:SnapshotUsage.outposts"
"Value": "APN1-EBS:SnapshotUsage"
"Value": "APN2-EBS:SnapshotUsage.outposts"
"Value": "APN2-EBS:SnapshotUsage"
"Value": "APN3-EBS:SnapshotUsage"
"Value": "APS1-EBS:SnapshotUsage.outposts"
"Value": "APS1-EBS:SnapshotUsage"
"Value": "APS2-EBS:SnapshotUsage.outposts"
"Value": "APS2-EBS:SnapshotUsage"
"Value": "APS3-EBS:SnapshotUsage.outposts"
"Value": "APS3-EBS:SnapshotUsage"
"Value": "CAN1-EBS:SnapshotUsage.outposts"
"Value": "CAN1-EBS:SnapshotUsage"
"Value": "EBS:SnapshotUsageUnderBilling"
"Value": "EBS:SnapshotUsage"
"Value": "EU-EBS:SnapshotUsage.outposts"
"Value": "EU-EBS:SnapshotUsage"
"Value": "EUC1-EBS:SnapshotUsage.outposts"
"Value": "EUC1-EBS:SnapshotUsage"
"Value": "EUN1-EBS:SnapshotUsage.outposts"
"Value": "EUN1-EBS:SnapshotUsage"
"Value": "EUS1-EBS:SnapshotUsage.outposts"
"Value": "EUS1-EBS:SnapshotUsage"
"Value": "EUW2-EBS:SnapshotUsage.outposts"
"Value": "EUW2-EBS:SnapshotUsage"
"Value": "EUW3-EBS:SnapshotUsage.outposts"
"Value": "EUW3-EBS:SnapshotUsage"
"Value": "LAX1-EBS:SnapshotUsage"
"Value": "MES1-EBS:SnapshotUsage.outposts"
"Value": "MES1-EBS:SnapshotUsage"
"Value": "SAE1-EBS:SnapshotUsage.outposts"
"Value": "SAE1-EBS:SnapshotUsage"
"Value": "UGE1-EBS:SnapshotUsage"
"Value": "UGW1-EBS:SnapshotUsage"
"Value": "USE1-EBS:SnapshotUsage.outposts"
"Value": "USE2-EBS:SnapshotUsage.outposts"
"Value": "USE2-EBS:SnapshotUsage"
"Value": "USW1-EBS:SnapshotUsage.outposts"
"Value": "USW1-EBS:SnapshotUsage"
"Value": "USW2-EBS:SnapshotUsage.outposts"
"Value": "USW2-EBS:SnapshotUsage"
推荐阅读
- css - 如何根据路由在组件中使用不同的类名?
- stream - 无法构建 Bitfinex Java 客户端 - 没有得到任何响应
- c# - Xamarin Forms Shell ItemTemplate 样式
- angular - 解析器不返回 Firestore 的数据以在 Angular 中加载组件
- mysql - 以相反的方式按字符串查找正则表达式模式
- java - 如何使用Java通过Andriod上的url数组**顺序**下载多个图像
- angular - 如何在 ionic 5 中使用 base64 播放视频
- node.js - 续集“ignoreDuplicate:true”增加primaryKey?
- python - 循环URL,分组json结果
- firebase-cloud-messaging - 注册应用后如何继续配置 FCM?