Skip to content
Python library for AWS pricing.
Branch: master
Clone or download
bnak migrate awspricing to use AWS price list query API via boto3(#39)
* migrate awspricing to use AWS price list query API via boto3
Latest commit 9278146 May 3, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
awspricing migrate awspricing to use AWS price list query API via boto3(#39) May 2, 2019
tests migrate awspricing to use AWS price list query API via boto3(#39) May 2, 2019
.gitignore Only depend on typing in python 2 (#17) Jun 18, 2018
.travis.yml
CHANGELOG.md migrate awspricing to use AWS price list query API via boto3(#39) May 2, 2019
CODE_OF_CONDUCT.md Initial commit Feb 10, 2017
CONTRIBUTING.md
LICENSE Initial commit Feb 10, 2017
Makefile migrate awspricing to use AWS price list query API via boto3(#39) May 2, 2019
README.rst migrate awspricing to use AWS price list query API via boto3(#39) May 2, 2019
mypy-requirements.txt Fix pre-existing mypy errors (#20) Jul 11, 2018
setup.cfg Add extra filter options to reserved_* ec2 offer functions (#4) Mar 8, 2017
setup.py migrate awspricing to use AWS price list query API via boto3(#39) May 2, 2019
test-requirements.txt migrate awspricing to use AWS price list query API via boto3(#39) May 2, 2019

README.rst

awspricing

A Python library for working with the AWS Price List Query API.

As of version 2.0.0, awspricing uses boto3 Price List Query API. This requires Price List Query API IAM roles: https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-permissions-ref.html#example-policy-pe-api

Versions before 2.0.0 utilized AWS Price Offer files.

Features:

  • Service-specific helpers (only EC2 and RDS thus far)
  • Local caching support

Installation

$ pip install awspricing

Usage

import awspricing

ec2_offer = awspricing.offer('AmazonEC2')

ec2_offer.search_skus(
  instance_type='c4.large',
  location='US East (N. Virginia)',
  operating_system='Linux',
)  # {'4C7N4APU9GEUZ6H6', 'MBQPYDJSY3BY84BH', 'MDKVAJXMJGZFDJUE'}

ec2_offer.reserved_hourly(
  'c4.xlarge',
  operating_system='Linux',
  lease_contract_length='3yr',
  offering_class='convertible',
  purchase_option='Partial Upfront',
  region='us-east-1'
)  # 0.10845205479452055

rds_offer = awspricing.offer('AmazonRDS')

rds_offer.search_skus(
  instance_type='db.m4.large',
  location='US East (N. Virginia)',
  database_engine='MySQL',
  license_model='No license required',
  deployment_option='Multi-AZ'
) # {'QPZNR6MYN432XTPU'}

rds_offer.ondemand_hourly(
  'db.m4.large',
  'MySQL',
  license_model='No license required',
  deployment_option='Multi-AZ',
  region='us-east-1'
) # 0.35

Note : AWS provides the pricing list in json format with no warranty of format change. If a format change by AWS causes a breaking change; the below mitigation can be used at the cost of "stale" pricing.

import awspricing

# For finding EC2 price list versions see script below or download https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/index.json
ec2_offer_old = awspricing.offer('AmazonEC2', version='some_other_version')

# For finding RDS price list versions see script below or download https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonRDS/index.json
rds_offer_old = awspricing.offer('AmazonRDS', version='some_other_version')
$ # EC2
$ curl https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/index.json | python -m json.tool

$ # RDS
$ curl https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonRDS/index.json | python -m json.tool

Configuration

Cache

Cache can be configured via the following environment variables:

AWSPRICING_USE_CACHE: Whether to use a simple file-based cache. Valid values are 0|1. Defaults to 0 (false).

AWSPRICING_CACHE_PATH: Prefix to write cache files. Defaults to /tmp/awspricing.

AWSPRICING_CACHE_MINUTES: Number of minutes to keep cache for. Defaults to 1440 (1 day).

Developing

Environment setup

Run the following commands (preferably in a virtualenv) to setup your environment:

Running unit tests

Simply run make test after environment setup to run unit tests.

Running mypy (type checker)

The following commands can be used to run type checks. Note that a python3 interpreter is required for mypy.

pip install mypy
make test_mypy
You can’t perform that action at this time.