@cludden/ssm-config
v1.0.3
Published
a node.js package that pulls configuration from aws ssm parameter store
Downloads
1,144
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
- Clone it (
git clone [email protected]:cludden/ssm-config.git
) - Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes using conventional changelog standards (
git commit -m 'feat(my-new-feature): Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Ensure linting/security/tests are all passing
- 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