oprah
Version:
Package to deploy parameters to AWS
53 lines (43 loc) • 1.21 kB
JavaScript
const get = require('lodash/get');
const { getSsmClient } = require('./get-ssm-client');
const makeUpdateSecret = ({ getLatestVersion, onComplete }) => async ({
key,
value
}) => {
const ssm = getSsmClient();
const params = {
Name: key,
Type: 'SecureString',
Value: value,
Overwrite: true,
KeyId: 'alias/aws/ssm'
};
const latestValue = await getLatestVersion(key);
if (latestValue === value) {
return Promise.resolve();
}
return ssm
.putParameter(params)
.promise()
.then(res => ({
name: key,
value,
version: get(res, 'Version')
}))
.then(onComplete);
};
const makeUpdateSecrets = ({
getLatestVersion,
getAllParametersByNames
}) => async ({ parameters, onComplete = () => Promise.resolve() }) => {
const parameterNames = Object.keys(parameters);
await getAllParametersByNames({ parameterNames }); // to cache dataloader;
const updateSecrets = makeUpdateSecret({ getLatestVersion, onComplete });
const updaters = Object.entries(parameters).map(([key, value]) => () =>
updateSecrets({ key, value })
);
return Promise.all(updaters.map(updater => updater()));
};
module.exports = {
makeUpdateSecrets
};