首页 > 解决方案 > 使用 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 服务

标签: python-3.xamazon-web-servicesboto3amazon-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"

推荐阅读