@mapbox/price-pigeon

1.2.3 • Public • Published

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']
    }
  }
};

Readme

Keywords

none

Package Sidebar

Install

npm i @mapbox/price-pigeon

Weekly Downloads

2

Version

1.2.3

License

BSD-2-Clause

Last publish

Collaborators

  • mbx-npm-ci-production
  • mbx-npm-ci-staging
  • mbx-npm-advanced-actions-production
  • mbx-npm-advanced-actions-staging
  • mbx-npm-09-production
  • mbx-npm-08-production
  • mbx-npm-07-production
  • mbx-npm-06-production
  • mbx-npm-05-production
  • mbx-npm-04-production
  • mbx-npm-03-production
  • mbx-npm-02-production
  • mbx-npm-01-production
  • mbx-npm-02-staging
  • mapbox-npm-01
  • mapbox-npm-02
  • mapbox-npm-07
  • mapbox-npm-03
  • mapbox-npm-04
  • mapbox-npm-09
  • mapbox-npm-05
  • mapbox-npm-06
  • mapbox-npm-08
  • mapbox-npm-advanced-actions
  • mapbox-npm-ci
  • mapbox-npm
  • mapbox-admin
  • mapbox-machine-user