@orangejellyfish/serverless-config-merge
v0.2.0
Published
An opinionated command-line utility to merge [Serverless Framework][sls] configuration files. Move common configuration into smaller, maintainable individual files and import them prior to deployment.
Downloads
5
Readme
serverless-config-merge
An opinionated command-line utility to merge Serverless Framework configuration files. Move common configuration into smaller, maintainable individual files and import them prior to deployment.
service: example-service
provider:
$<<: ${file(provider-defaults.yml)}
region: eu-west-1
Installation
Install as a dev dependency to your Serverless Framework project with npm. This is preferred to a global install to allow you to have control over the version of the tool on a per-project basis.
npm install --save-dev @orangejellyfish/serverless-config-merge
Usage
Move common configuration into YAML files. For example, a common "provider"
config might include the provider name and region in provider-defaults.yml
:
name: aws
region: eu-west-1
Reference a file with a special key. The key is $<<
by default, inspired by
the YAML merge key proposal. The value must be a Serverless Framework
"file" variable, or an array of them. If a key appears in a file that is merged
in and also in the source, the value in the source takes precedence:
service: example-service
provider:
$<<: ${file(provider-defaults.yml)} # Merge in the defaults
region: eu-west-2 # Override the default from the merged file
plugins:
$<<:
- ${file(plugin-defaults-1.yml)} # Merge in multiple files
- ${file(plugin-defaults-2.yml)}
Run serverless-config-merge
(or the alias sls-config-merge
) prior to your
deployment. For example:
MERGED_CONFIG_FILE=serverless-merged.yml
npx serverless-config-merge -o $MERGED_CONFIG_FILE
sls deploy --config $MERGED_CONFIG_FILE
rm $MERGED_CONFIG_FILE
Options
-i
- input file, defaults toserverless.yml
-o
- output file, defaults toserverless-merge.yml
-k
- merge key, defaults to$<<
Design choices
Designed as a standalone executable to run prior to deployment because the Severless Framework plugin system does not provide an early enough hook to merge all relevant properties. For example, the serverless-merge-config plugin is unable to merge the
provider.name
property because it's presence is validated by the framework too early.Writes a new config file alongside your existing Serverless Framework config file. It would have been preferable to write this file to a hidden directory such as
.serverless
but that would require rewriting any other paths in the file. As it stands, you'll have to add this file to.gitignore
or delete it post-deployment, as shown in the example above.The new config file is written as JSON rather than YAML, simply because the Serverless Framework supports both and since the output is already a JavaScript object it's slightly easier to output it as JSON.
Only supports Serverless Framework configuration files written in YAML. If your configuration file is written in JSON you can use the same idea with minor tweaks - pull requests welcome!