Neurotic and Probably Misinformed

    @cludden/ssm-config

    1.0.3 • Public • Published

    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

    Keywords

    none

    Install

    npm i @cludden/ssm-config

    DownloadsWeekly Downloads

    206

    Version

    1.0.3

    License

    MIT

    Unpacked Size

    21.4 kB

    Total Files

    8

    Last publish

    Collaborators

    • cludden