serverless-plugin-canary-deployments
Advanced tools
Comparing version 0.6.0 to 0.7.0
@@ -0,1 +1,4 @@ | ||
# 0.7.0 (09.09.2021) | ||
- Generate a Deployment Group Name in the format of ${stackName}-${logicalId} to avoid a circular dependency when used with the aws-alerts plugin #135 | ||
# 0.6.0 (31.03.2021) | ||
@@ -2,0 +5,0 @@ - Add config validator #102 |
@@ -127,3 +127,3 @@ { | ||
{ | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/${HelloLambdaFunctionDeploymentGroup}" | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup" | ||
} | ||
@@ -567,2 +567,3 @@ ] | ||
}, | ||
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup", | ||
"DeploymentStyle": { | ||
@@ -569,0 +570,0 @@ "DeploymentType": "BLUE_GREEN", |
@@ -187,3 +187,3 @@ { | ||
{ | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/${HelloLambdaFunctionDeploymentGroup}" | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup" | ||
} | ||
@@ -875,2 +875,3 @@ ] | ||
}, | ||
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup", | ||
"DeploymentStyle": { | ||
@@ -877,0 +878,0 @@ "DeploymentType": "BLUE_GREEN", |
@@ -197,3 +197,3 @@ { | ||
{ | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/${HelloLambdaFunctionDeploymentGroup}" | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup" | ||
} | ||
@@ -972,2 +972,3 @@ ] | ||
}, | ||
"DeploymentGroupName": "canary-deployments-test-dev-AuthorizeLambdaFunctionDeploymentGroup", | ||
"DeploymentStyle": { | ||
@@ -1032,2 +1033,3 @@ "DeploymentType": "BLUE_GREEN", | ||
}, | ||
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup", | ||
"DeploymentStyle": { | ||
@@ -1034,0 +1036,0 @@ "DeploymentType": "BLUE_GREEN", |
@@ -556,2 +556,3 @@ { | ||
}, | ||
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup", | ||
"DeploymentStyle": { | ||
@@ -558,0 +559,0 @@ "DeploymentType": "BLUE_GREEN", |
@@ -113,6 +113,6 @@ { | ||
{ | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/${HelloLambdaFunctionDeploymentGroup}" | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup" | ||
}, | ||
{ | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/${GoodbyeLambdaFunctionDeploymentGroup}" | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/canary-deployments-test-dev-GoodbyeLambdaFunctionDeploymentGroup" | ||
} | ||
@@ -342,2 +342,3 @@ ] | ||
}, | ||
"DeploymentGroupName": "canary-deployments-test-dev-GoodbyeLambdaFunctionDeploymentGroup", | ||
"DeploymentStyle": { | ||
@@ -405,2 +406,3 @@ "DeploymentType": "BLUE_GREEN", | ||
}, | ||
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup", | ||
"DeploymentStyle": { | ||
@@ -407,0 +409,0 @@ "DeploymentType": "BLUE_GREEN", |
@@ -422,2 +422,3 @@ { | ||
}, | ||
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup", | ||
"DeploymentStyle": { | ||
@@ -424,0 +425,0 @@ "DeploymentType": "BLUE_GREEN", |
@@ -127,3 +127,3 @@ { | ||
{ | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/${HelloLambdaFunctionDeploymentGroup}" | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup" | ||
} | ||
@@ -500,2 +500,3 @@ ] | ||
}, | ||
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup", | ||
"DeploymentStyle": { | ||
@@ -502,0 +503,0 @@ "DeploymentType": "BLUE_GREEN", |
@@ -127,3 +127,3 @@ { | ||
{ | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/${HelloLambdaFunctionDeploymentGroup}" | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup" | ||
} | ||
@@ -582,2 +582,3 @@ ] | ||
}, | ||
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup", | ||
"DeploymentStyle": { | ||
@@ -584,0 +585,0 @@ "DeploymentType": "BLUE_GREEN", |
@@ -110,3 +110,3 @@ { | ||
{ | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/${HelloLambdaFunctionDeploymentGroup}" | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup" | ||
} | ||
@@ -366,2 +366,3 @@ ] | ||
}, | ||
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup", | ||
"DeploymentStyle": { | ||
@@ -368,0 +369,0 @@ "DeploymentType": "BLUE_GREEN", |
@@ -112,3 +112,3 @@ { | ||
{ | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/${HelloLambdaFunctionDeploymentGroup}" | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup" | ||
} | ||
@@ -359,2 +359,3 @@ ] | ||
}, | ||
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup", | ||
"DeploymentStyle": { | ||
@@ -361,0 +362,0 @@ "DeploymentType": "BLUE_GREEN", |
@@ -91,3 +91,3 @@ { | ||
{ | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/${BelloLambdaFunctionDeploymentGroup}" | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/canary-deployments-test-dev-BelloLambdaFunctionDeploymentGroup" | ||
} | ||
@@ -289,2 +289,3 @@ ] | ||
}, | ||
"DeploymentGroupName": "canary-deployments-test-dev-BelloLambdaFunctionDeploymentGroup", | ||
"DeploymentStyle": { | ||
@@ -291,0 +292,0 @@ "DeploymentType": "BLUE_GREEN", |
@@ -142,3 +142,3 @@ { | ||
{ | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/${HelloLambdaFunctionDeploymentGroup}" | ||
"Fn::Sub": "arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${CanarydeploymentstestdevDeploymentApplication}/canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup" | ||
} | ||
@@ -785,2 +785,3 @@ ] | ||
}, | ||
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup", | ||
"DeploymentStyle": { | ||
@@ -787,0 +788,0 @@ "DeploymentType": "BLUE_GREEN", |
@@ -12,3 +12,3 @@ /* eslint-disable no-template-curly-in-string */ | ||
function buildFnDeploymentGroup ({ codeDeployAppName, codeDeployRoleArn, deploymentSettings = {} }) { | ||
function buildFnDeploymentGroup ({ codeDeployAppName, codeDeployGroupName, codeDeployRoleArn, deploymentSettings = {} }) { | ||
const deploymentGroup = { | ||
@@ -28,2 +28,3 @@ Type: 'AWS::CodeDeploy::DeploymentGroup', | ||
}, | ||
DeploymentGroupName: codeDeployGroupName, | ||
DeploymentConfigName: { | ||
@@ -30,0 +31,0 @@ 'Fn::Sub': [ |
@@ -21,2 +21,3 @@ /* eslint-disable no-template-curly-in-string */ | ||
const codeDeployAppName = 'MyCDApp' | ||
const codeDeployGroupName = 'canary-deployments-test-dev-FirstLambdaFunctionDeploymentGroup' | ||
const baseDeploymentGroup = { | ||
@@ -28,2 +29,3 @@ Type: 'AWS::CodeDeploy::DeploymentGroup', | ||
}, | ||
DeploymentGroupName: '', | ||
AutoRollbackConfiguration: { | ||
@@ -67,6 +69,7 @@ Enabled: true, | ||
_.set('Properties.ApplicationName', { Ref: codeDeployAppName }), | ||
_.set('Properties.DeploymentGroupName', codeDeployGroupName), | ||
_.set('Properties.AlarmConfiguration', expectedAlarms), | ||
_.set('Properties.DeploymentConfigName.Fn::Sub[1].ConfigName', deploymentSettings.type) | ||
)(baseDeploymentGroup) | ||
const actual = CodeDeploy.buildFnDeploymentGroup({ codeDeployAppName, deploymentSettings }) | ||
const actual = CodeDeploy.buildFnDeploymentGroup({ codeDeployAppName, codeDeployGroupName, deploymentSettings }) | ||
expect(actual).to.deep.equal(expected) | ||
@@ -80,5 +83,6 @@ }) | ||
_.set('Properties.ApplicationName', { Ref: codeDeployAppName }), | ||
_.set('Properties.DeploymentGroupName', codeDeployGroupName), | ||
_.set('Properties.DeploymentConfigName.Fn::Sub[1].ConfigName', deploymentSettings.type) | ||
)(baseDeploymentGroup) | ||
const actual = CodeDeploy.buildFnDeploymentGroup({ codeDeployAppName, deploymentSettings }) | ||
const actual = CodeDeploy.buildFnDeploymentGroup({ codeDeployAppName, codeDeployGroupName, deploymentSettings }) | ||
expect(actual).to.deep.equal(expected) | ||
@@ -96,6 +100,7 @@ }) | ||
_.set('Properties.ApplicationName', { Ref: codeDeployAppName }), | ||
_.set('Properties.DeploymentGroupName', codeDeployGroupName), | ||
_.set('Properties.DeploymentConfigName.Fn::Sub[1].ConfigName', deploymentSettings.type) | ||
)(baseDeploymentGroup) | ||
const actual = CodeDeploy.buildFnDeploymentGroup({ | ||
codeDeployAppName, codeDeployRoleArn, deploymentSettings | ||
codeDeployAppName, codeDeployGroupName, codeDeployRoleArn, deploymentSettings | ||
}) | ||
@@ -120,2 +125,3 @@ expect(actual).to.deep.equal(expected) | ||
_.set('Properties.ApplicationName', { Ref: codeDeployAppName }), | ||
_.set('Properties.DeploymentGroupName', codeDeployGroupName), | ||
_.set('Properties.DeploymentConfigName.Fn::Sub[1].ConfigName', deploymentSettings.type), | ||
@@ -127,3 +133,4 @@ _.set('Properties.TriggerConfigurations', deploymentSettings.triggerConfigurations) | ||
deploymentSettings, | ||
codeDeployAppName | ||
codeDeployAppName, | ||
codeDeployGroupName | ||
}) | ||
@@ -130,0 +137,0 @@ |
@@ -49,3 +49,3 @@ const _ = require('lodash/fp') | ||
Resource: deploymentGroups.map(deploymentGroup => ({ | ||
'Fn::Sub': `arn:\${AWS::Partition}:codedeploy:\${AWS::Region}:\${AWS::AccountId}:deploymentgroup:\${${codeDeployAppName}}/\${${deploymentGroup}}` | ||
'Fn::Sub': `arn:\${AWS::Partition}:codedeploy:\${AWS::Region}:\${AWS::AccountId}:deploymentgroup:\${${codeDeployAppName}}/${deploymentGroup}` | ||
})) | ||
@@ -52,0 +52,0 @@ }) |
@@ -141,3 +141,3 @@ const { expect } = require('chai') | ||
// eslint-disable-next-line no-template-curly-in-string | ||
{ 'Fn::Sub': 'arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServiceDeploymentApplication}/${FirstLambdaFunctionDeploymentGroup}' } | ||
{ 'Fn::Sub': 'arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServiceDeploymentApplication}/canary-deployments-test-dev-FirstLambdaFunctionDeploymentGroup' } | ||
] | ||
@@ -151,3 +151,3 @@ } | ||
} | ||
const deploymentGroups = ['FirstLambdaFunctionDeploymentGroup'] | ||
const deploymentGroups = ['canary-deployments-test-dev-FirstLambdaFunctionDeploymentGroup'] | ||
const actual = Iam.buildExecutionRoleWithCodeDeploy(input, codeDeployAppName, deploymentGroups) | ||
@@ -182,5 +182,5 @@ expect(actual).to.deep.equal(expected) | ||
// eslint-disable-next-line no-template-curly-in-string | ||
{ 'Fn::Sub': 'arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServiceDeploymentApplication}/${FirstLambdaFunctionDeploymentGroup}' }, | ||
{ 'Fn::Sub': 'arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServiceDeploymentApplication}/canary-deployments-test-dev-FirstLambdaFunctionDeploymentGroup' }, | ||
// eslint-disable-next-line no-template-curly-in-string | ||
{ 'Fn::Sub': 'arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServiceDeploymentApplication}/${SecondLambdaFunctionDeploymentGroup}' } | ||
{ 'Fn::Sub': 'arn:${AWS::Partition}:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServiceDeploymentApplication}/canary-deployments-test-dev-SecondLambdaFunctionDeploymentGroup' } | ||
] | ||
@@ -194,3 +194,3 @@ } | ||
} | ||
const deploymentGroups = ['FirstLambdaFunctionDeploymentGroup', 'SecondLambdaFunctionDeploymentGroup'] | ||
const deploymentGroups = ['canary-deployments-test-dev-FirstLambdaFunctionDeploymentGroup', 'canary-deployments-test-dev-SecondLambdaFunctionDeploymentGroup'] | ||
const actual = Iam.buildExecutionRoleWithCodeDeploy(input, codeDeployAppName, deploymentGroups) | ||
@@ -223,3 +223,3 @@ expect(actual).to.deep.equal(expected) | ||
const expected = JSON.parse(JSON.stringify(input)) | ||
const deploymentGroups = ['FirstLambdaFunctionDeploymentGroup'] | ||
const deploymentGroups = ['canary-deployments-test-dev-FirstLambdaFunctionDeploymentGroup'] | ||
const actual = Iam.buildExecutionRoleWithCodeDeploy(input, codeDeployAppName, deploymentGroups) | ||
@@ -226,0 +226,0 @@ expect(actual).to.deep.equal(expected) |
@@ -6,3 +6,3 @@ { | ||
}, | ||
"version": "0.6.0", | ||
"version": "0.7.0", | ||
"description": "A Serverless plugin to implement canary deployment of Lambda functions", | ||
@@ -9,0 +9,0 @@ "main": "serverless-plugin-canary-deployments.js", |
@@ -74,4 +74,4 @@ const _ = require('lodash/fp') | ||
// Checking if the template has trigger configurations. | ||
for (var resource of functionsResources) { | ||
for (var key of Object.keys(resource)) { | ||
for (const resource of functionsResources) { | ||
for (const key of Object.keys(resource)) { | ||
if (resource[key].Type === 'AWS::CodeDeploy::DeploymentGroup') { | ||
@@ -109,3 +109,4 @@ if (resource[key].Properties.TriggerConfigurations) { | ||
this.getFunctionName.bind(this), | ||
this.getFunctionDeploymentGroupId.bind(this) | ||
this.getFunctionDeploymentGroupId.bind(this), | ||
this.getDeploymentGroupName.bind(this) | ||
) | ||
@@ -157,4 +158,6 @@ const deploymentGroups = _.pipe( | ||
const logicalName = this.getFunctionDeploymentGroupId(functionName) | ||
const codeDeployGroupName = this.getDeploymentGroupName(logicalName) | ||
const params = { | ||
codeDeployAppName: this.codeDeployAppName, | ||
codeDeployGroupName, | ||
codeDeployRoleArn: deploymentSettings.codeDeployRole, | ||
@@ -192,2 +195,6 @@ deploymentSettings | ||
getDeploymentGroupName (deploymentGroupLogicalId) { | ||
return `${this.naming.getStackName()}-${deploymentGroupLogicalId}` | ||
} | ||
getFunctionName (slsFunctionName) { | ||
@@ -194,0 +201,0 @@ return slsFunctionName ? this.naming.getLambdaLogicalId(slsFunctionName) : null |
517082
18147