0.0.4 • Published 8 years ago

lambda-config v0.0.4

Weekly downloads
15
License
-
Repository
-
Last release
8 years ago

Usage

Contents of your config file, for example config.json:

{
  "appSettings": {
    "DBConfig": {
      "user": { "_encryptedTextBlob_": "AQECAHhEJQBbQ8N+ .... some b64 encoded encrypted text blob" },
      "password": { "_encryptedTextBlob_": "AQECAHhEJQBbQ8N+ .... some b64 encoded encrypted text blob" },
      "server": "some-server",
      "database": "some-database"
    }
  }
}

// or to minimise rountrips to KMS, better encrypt whole section
{
  "appSettings": {
    "DBConfig": {
      "_encryptedTextBlob_": "AQECAHhEJQBbQ8N+ .... some b64 encoded encrypted text blob" }
      "server": "some-server",
      "database": "some-database"
    }
  }
}

Strings must be encrypted using AWS Key Management Service and your lambda execution role should have kms:Decrypt permissions to use the key. Store config.json locally and include it in your lambda package, or upload it to a public hosting service like AWS S3. Load config.json as follows:

var cfg = require('lambda-config');
cfg.loadFromFile("local-path-or-url-to-config.json", function (err, config) {
	if (err) {
        console.log(err, err.stack);   // an error occurred
    }
	else {
		console.log(config);
	}
}, "your-aws-region");

Note that if your KMS encryption key is in the same region as the lambda you don't need to pass the region since process.env['AWS_DEFAULT_REGION'] will be used. If they are in different regions and you don't pass region parameter, key will be looked for in us-east-1 region.

You can also load configuration json from another source file. For example, you can have file rootConfig.json with the following contents:

{
  "appSettings": {
    "_loadFrom_": "./config.json"
  }
}

// and then use it same way as above:
var cfg = require('lambda-config');
cfg.loadFromFile("local-path-or-url-to-rootConfig.json", function (err, config) {
	...
});

// in this case, config object should have the following structure
{
	"appSettings": {
		"DBConfig": {
			"user": "some-decrypted-username",
			"password": "some-decrypted-password",
			"server": "some-server",
			"database": "some-database"
		}
	}
}

You can also use the loadFromString method with configuration json string:

var cfg = require('lambda-config');
cfg.loadFromString("some-configuration-json-string", function (err, config) {
	...
});

or call loadFromObject:

var cfgSource = { _loadFrom_: "./path-to-file" }
cfg.loadFromObject(cfgSource, function (err, config) {
	...
});

If you have mixed section with _loadFrom_ or _encryptedTextBlob_ and regular fields, all will be merged together in a resulting object:

// userConfig.json
{
  "user": "some-user",
  "password": "some-password"
}

// rootConfig.json
{
  "appSettings": {
    "_loadFrom_": "./userConfig.json",
	"server": "some-server"
  }
}

// calling loadFromFile with "./rootConfig.json" as a parameter will return the following
{
  "appSettings": {
    "user": "some-user",
	"password": "some-password",
	"server": "some-server"
  }
}

Note that you may need to flatten your dependencies folder before publishing to AWS Lambda to avoid the path character limit.

0.0.4

8 years ago

0.0.3

8 years ago

0.0.2

8 years ago

0.0.1

8 years ago