@cludden/ssm-config

a node.js package that pulls configuration from aws ssm parameter store

Stats

stars 🌟issues ⚠️updated 🛠created 🐣size 🏋️‍♀️
61Feb 26, 2018Dec 23, 2017Minified + gzip package size for @cludden/ssm-config in KB

Readme

ssm-config

a node.js library for building configuration objects using parameters from AWS SSM Parameter Store. Useful for lambda functions using the node.js runtime.

Features

  • supports all ssm parameter types, including encrypted parameters with type SecureString
  • supports custom validation/parsing allowing for defaults and type coercion
  • supports composing complex configuration using multiple ssm parameters

Installing

# install via NPM
$ npm install --save @cludden/ssm-config

Getting Started

Define some parameters in SSM:

$ aws ssm put-parameter --type String --name /my-app/log/level --value debug
$ aws ssm put-parameter --type String --name /my-app/db --value {"user":"foo","port":3306}
$ aws ssm put-parameter --type SecureString --name /my-app/db/password --value s3cr3t
$ aws ssm put-parameter --type String --name /shared/number --value 11

Build a config object:

import AWS from 'aws-sdk';
import ssmConfig from '@cludden/ssm-config';

const prefix = '/my-app';
const ssm = new AWS.SSM();

const config = await ssmConfig({ prefix, ssm });
console.log(config);
/*
{
  db: {
    user: "foo",
    password: "s3cr3t",
    port: 3306,
  },
  log: {
    level: "debug",
  }
}
*/

With custom validation logic:

import AWS from 'aws-sdk';
import { expect } from 'chai';
import loadConfig from '@cludden/ssm-config';

const prefix = ['/my-app', '/shared'];
const ssm = new AWS.SSM();

function validate(c) {
    if (!Object.prototype.hasOwnProperty.call(c, 'number')) {
        throw new Error('missing required property "number"');
    }
    c.number = parseInt(c.number, 10);
    if (isNaN(c.number) || c.number < 10) {
        throw new Error('"number" must be greater than or equal to 10');
    }
}

const config = await loadConfig({ prefix, ssm, validate });
console.log(config);
/*
{
  db: {
    user: "foo",
    password: "s3cr3t",
    port: 3306,
  },
  log: {
    level: "debug",
  },
  number: 11,
}
*/

Contributing

  1. Clone it (git clone git@github.com:cludden/ssm-config.git)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes using conventional changelog standards (git commit -m 'feat(my-new-feature): Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Ensure linting/security/tests are all passing
  6. Create new Pull Request

Testing

Prerequisites:

# run test suite and generate code coverage
$ docker-compose run ssm-config

# run linter
$ docker-compose run ssm-config npm run lint

# run security scan
$ docker-compose run ssm-config npm run sec

License

Licensed under the MIT License

Copyright (c) 2017 Chris Ludden

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.