serverless-gradual-traffic-shifting
Version:
A Serverless plugin to implement gradual deployment of Lambda functions
42 lines (36 loc) • 1.19 kB
JavaScript
const _ = require('lodash/fp');
function buildAlias({ alias, functionName, functionVersion, versionWeight, liveVersion }) {
const lambdaAlias = {
Type: 'AWS::Lambda::Alias',
Properties: {
FunctionVersion: { 'Fn::GetAtt': [functionVersion, 'Version'] },
FunctionName: { Ref: functionName },
Name: alias
}
};
if (versionWeight) {
const routingConfig = {
AdditionalVersionWeights: [
{
FunctionVersion: liveVersion,
FunctionWeight: 1 - versionWeight
}]
};
Object.assign(lambdaAlias.Properties, { RoutingConfig: routingConfig });
}
return lambdaAlias;
}
function replacePermissionFunctionWithAlias(lambdaPermission, functionAlias) {
const newPermission = _.set('Properties.FunctionName', { Ref: functionAlias }, lambdaPermission);
return newPermission;
}
function replaceEventMappingFunctionWithAlias(eventSourceMapping, functionAlias) {
const newMapping = _.set('Properties.FunctionName', { Ref: functionAlias }, eventSourceMapping);
return newMapping;
}
const Lambda = {
buildAlias,
replacePermissionFunctionWithAlias,
replaceEventMappingFunctionWithAlias
};
module.exports = Lambda;