Nice Philanthropist Metalhead
    Have ideas to improve npm?Join in the discussion! »

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

    Keywords

    none

    Install

    npm i @mapbox/price-pigeon

    DownloadsWeekly Downloads

    18

    Version

    1.2.3

    License

    BSD-2-Clause

    Last publish

    Collaborators

    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar