@mapbox/price-pigeon

Fetch AWS OnDemand prices for easy import into other modules

Stats

StarsIssuesVersionUpdatedCreatedSize
@mapbox/price-pigeon
111.2.34 years ago5 years agoMinified + gzip package size for @mapbox/price-pigeon in KB

Readme

CircleCI

price-pigeon

illustration by Joseph Wilkins

Price Pigeon

The answer to inconsistent spot price bids.

Uses the AWS Price List API to generate a mapping of OnDemand prices by instance type. This mapping can be used during instance creation to make accurate spot bid prices.

*Note: The price supplied is the highest OnDemand price for that instance type across the following regions:

    {
        'US East (N. Virginia)': 'us-east-1',
        'US West (N. California)': 'us-west-1',
        'US West (Oregon)': 'us-west-2',
        'Asia Pacific (Sydney)': 'ap-southeast-2',
        'EU (Ireland)': 'eu-west-1',
    };

Using Price Pigeon

  • install price-pigeon and add to your package.json:

    npm install @mapbox/price-pigeon --save
    
  • [Optional] Update the price map to use the most recent OnDemand prices:

    cd node_modules/price-pigeon
    npm run price-pigeon-update
    
  • Add your InstanceType to the template Parameters if it isn't there already. The template will use a function that refers to InstanceType to get the correct price. Here's an example: ``` 'Parameters' : { 'InstanceType' : { 'Description' : 'Type of spot instance to launch', 'Type' : 'String', 'Default' : 'm3.xlarge', /* This is the type of instance you're launching */ 'AllowedValues' : ['m3.xlarge', 'r3.large'] } }

- Include the price map directly in your CloudFormation `template.js` (check out `price-pigeon/examples/` for a sample template):

// require the price-mapping function var priceMapper = require('@mapbox/price-pigeon').priceMapper; // get a price map with 50% off prices var priceMap = priceMapper(0.5); // If you want to use the actual price, you don't need to supply a ratio: priceMap = priceMapper();

// Don't forget to add the rest of your template to this stub! module.exports = { 'AWSTemplateFormatVersion' : '2010-09-09', 'Description' : 'price pigeon', 'Mappings' : { 'Prices' : priceMap }, 'Resources' : { 'LaunchConfiguration' : { 'Properties' : { 'SpotPrice' : { 'Fn::FindInMap' : ['Prices', {'Ref' : 'InstanceType'}, 'price'] } } } }, 'Parameters' : { 'InstanceType' : { 'Description' : 'Type of spot instance to launch', 'Type' : 'String', 'Default' : 'm3.xlarge', 'AllowedValues' : ['m3.xlarge', 'r3.xlarge'] } } };


If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.