a node.js package that pulls configuration from aws ssm parameter store
npm install @cludden/ssm-confignode.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
shell
install via NPM
$ npm install --save @cludden/ssm-config
`Getting Started
Define some parameters in SSM:
`shell
$ 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:
`javascript
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:
`javascript
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)
1. Create your feature branch (git checkout -b my-new-feature)
1. Commit your changes using conventional changelog standards (git commit -m 'feat(my-new-feature): Add some feature')
1. Push to the branch (git push origin my-new-feature)
1. Ensure linting/security/tests are all passing
1. Create new Pull RequestTesting
Prerequisites:
- Docker & Compose)`shell
run test suite and generate code coverage
$ docker-compose run ssm-configrun linter
$ docker-compose run ssm-config npm run lintrun security scan
$ docker-compose run ssm-config npm run sec
``Copyright (c) 2017 Chris Ludden