Skip to content

Commit

Permalink
feat: generate deployment group name (#135)
Browse files Browse the repository at this point in the history
* feat: generate deployment group name

* fix: correct test deploymentGroup
  • Loading branch information
samchungy committed Sep 9, 2021
1 parent 01667ef commit 1b70114
Show file tree
Hide file tree
Showing 19 changed files with 11,891 additions and 737 deletions.
12 changes: 6 additions & 6 deletions example/hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ const aws = require('aws-sdk')
const codedeploy = new aws.CodeDeploy({ apiVersion: '2014-10-06' })

module.exports.pre = (event, context, callback) => {
var deploymentId = event.DeploymentId
var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId
const deploymentId = event.DeploymentId
const lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId

console.log('Check some stuff before shifting traffic...')

var params = {
const params = {
deploymentId: deploymentId,
lifecycleEventHookExecutionId: lifecycleEventHookExecutionId,
status: 'Succeeded' // status can be 'Succeeded' or 'Failed'
Expand All @@ -19,12 +19,12 @@ module.exports.pre = (event, context, callback) => {
}

module.exports.post = (event, context, callback) => {
var deploymentId = event.DeploymentId
var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId
const deploymentId = event.DeploymentId
const lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId

console.log('Check some stuff after shifting traffic...')

var params = {
const params = {
deploymentId: deploymentId,
lifecycleEventHookExecutionId: lifecycleEventHookExecutionId,
status: 'Succeeded' // status can be 'Succeeded' or 'Failed'
Expand Down
3 changes: 2 additions & 1 deletion fixtures/1.output.json
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@
"Effect": "Allow",
"Resource": [
{
"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"
}
]
}
Expand Down Expand Up @@ -563,6 +563,7 @@
}
]
},
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup",
"DeploymentStyle": {
"DeploymentType": "BLUE_GREEN",
"DeploymentOption": "WITH_TRAFFIC_CONTROL"
Expand Down
3 changes: 2 additions & 1 deletion fixtures/10.output.v2-websocket.json
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@
"Effect": "Allow",
"Resource": [
{
"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"
}
]
}
Expand Down Expand Up @@ -871,6 +871,7 @@
}
]
},
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup",
"DeploymentStyle": {
"DeploymentType": "BLUE_GREEN",
"DeploymentOption": "WITH_TRAFFIC_CONTROL"
Expand Down
4 changes: 3 additions & 1 deletion fixtures/11.output.v2-websocket-authorizer.json
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@
"Effect": "Allow",
"Resource": [
{
"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"
}
]
}
Expand Down Expand Up @@ -968,6 +968,7 @@
}
]
},
"DeploymentGroupName": "canary-deployments-test-dev-AuthorizeLambdaFunctionDeploymentGroup",
"DeploymentStyle": {
"DeploymentType": "BLUE_GREEN",
"DeploymentOption": "WITH_TRAFFIC_CONTROL"
Expand Down Expand Up @@ -1027,6 +1028,7 @@
}
]
},
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup",
"DeploymentStyle": {
"DeploymentType": "BLUE_GREEN",
"DeploymentOption": "WITH_TRAFFIC_CONTROL"
Expand Down
1 change: 1 addition & 0 deletions fixtures/12.output-with-permissions-boundary.json
Original file line number Diff line number Diff line change
Expand Up @@ -553,6 +553,7 @@
}
]
},
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup",
"DeploymentStyle": {
"DeploymentType": "BLUE_GREEN",
"DeploymentOption": "WITH_TRAFFIC_CONTROL"
Expand Down
6 changes: 4 additions & 2 deletions fixtures/13.output.multiple-function-hooks.json
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,10 @@
"Effect": "Allow",
"Resource": [
{
"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"
}
]
}
Expand Down Expand Up @@ -338,6 +338,7 @@
}
]
},
"DeploymentGroupName": "canary-deployments-test-dev-GoodbyeLambdaFunctionDeploymentGroup",
"DeploymentStyle": {
"DeploymentType": "BLUE_GREEN",
"DeploymentOption": "WITH_TRAFFIC_CONTROL"
Expand Down Expand Up @@ -400,6 +401,7 @@
}
]
},
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup",
"DeploymentStyle": {
"DeploymentType": "BLUE_GREEN",
"DeploymentOption": "WITH_TRAFFIC_CONTROL"
Expand Down
1 change: 1 addition & 0 deletions fixtures/2.output.without-hooks.json
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,7 @@
}
]
},
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup",
"DeploymentStyle": {
"DeploymentType": "BLUE_GREEN",
"DeploymentOption": "WITH_TRAFFIC_CONTROL"
Expand Down
3 changes: 2 additions & 1 deletion fixtures/3.output.with-existing-codedeploy-role.json
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@
"Effect": "Allow",
"Resource": [
{
"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"
}
]
}
Expand Down Expand Up @@ -496,6 +496,7 @@
}
]
},
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup",
"DeploymentStyle": {
"DeploymentType": "BLUE_GREEN",
"DeploymentOption": "WITH_TRAFFIC_CONTROL"
Expand Down
3 changes: 2 additions & 1 deletion fixtures/5.output.with-trigger.json
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@
"Effect": "Allow",
"Resource": [
{
"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"
}
]
}
Expand Down Expand Up @@ -578,6 +578,7 @@
}
]
},
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup",
"DeploymentStyle": {
"DeploymentType": "BLUE_GREEN",
"DeploymentOption": "WITH_TRAFFIC_CONTROL"
Expand Down
3 changes: 2 additions & 1 deletion fixtures/6.output.cloudwatch-events-trigger.json
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@
"Effect": "Allow",
"Resource": [
{
"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"
}
]
}
Expand Down Expand Up @@ -362,6 +362,7 @@
}
]
},
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup",
"DeploymentStyle": {
"DeploymentType": "BLUE_GREEN",
"DeploymentOption": "WITH_TRAFFIC_CONTROL"
Expand Down
3 changes: 2 additions & 1 deletion fixtures/7.output.cloudwatch-logs-trigger.json
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@
"Effect": "Allow",
"Resource": [
{
"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"
}
]
}
Expand Down Expand Up @@ -355,6 +355,7 @@
}
]
},
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup",
"DeploymentStyle": {
"DeploymentType": "BLUE_GREEN",
"DeploymentOption": "WITH_TRAFFIC_CONTROL"
Expand Down
3 changes: 2 additions & 1 deletion fixtures/8.output.sns-subscriptions-trigger.json
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
"Effect": "Allow",
"Resource": [
{
"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"
}
]
}
Expand Down Expand Up @@ -285,6 +285,7 @@
}
]
},
"DeploymentGroupName": "canary-deployments-test-dev-BelloLambdaFunctionDeploymentGroup",
"DeploymentStyle": {
"DeploymentType": "BLUE_GREEN",
"DeploymentOption": "WITH_TRAFFIC_CONTROL"
Expand Down
3 changes: 2 additions & 1 deletion fixtures/9.output.iot-topic-rule.json
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@
"Effect": "Allow",
"Resource": [
{
"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"
}
]
}
Expand Down Expand Up @@ -781,6 +781,7 @@
}
]
},
"DeploymentGroupName": "canary-deployments-test-dev-HelloLambdaFunctionDeploymentGroup",
"DeploymentStyle": {
"DeploymentType": "BLUE_GREEN",
"DeploymentOption": "WITH_TRAFFIC_CONTROL"
Expand Down
3 changes: 2 additions & 1 deletion lib/CfTemplateGenerators/CodeDeploy.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ function buildApplication () {
}
}

function buildFnDeploymentGroup ({ codeDeployAppName, codeDeployRoleArn, deploymentSettings = {} }) {
function buildFnDeploymentGroup ({ codeDeployAppName, codeDeployGroupName, codeDeployRoleArn, deploymentSettings = {} }) {
const deploymentGroup = {
Type: 'AWS::CodeDeploy::DeploymentGroup',
Properties: {
Expand All @@ -24,6 +24,7 @@ function buildFnDeploymentGroup ({ codeDeployAppName, codeDeployRoleArn, deploym
'DEPLOYMENT_STOP_ON_REQUEST'
]
},
DeploymentGroupName: codeDeployGroupName,
DeploymentConfigName: {
'Fn::Sub': [
'CodeDeployDefault.Lambda${ConfigName}',
Expand Down
15 changes: 11 additions & 4 deletions lib/CfTemplateGenerators/CodeDeploy.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,14 @@ describe('CodeDeploy', () => {

describe('.buildFnDeploymentGroup', () => {
const codeDeployAppName = 'MyCDApp'
const codeDeployGroupName = 'canary-deployments-test-dev-FirstLambdaFunctionDeploymentGroup'
const baseDeploymentGroup = {
Type: 'AWS::CodeDeploy::DeploymentGroup',
Properties: {
ApplicationName: {
Ref: ''
},
DeploymentGroupName: '',
AutoRollbackConfiguration: {
Enabled: true,
Events: [
Expand Down Expand Up @@ -62,10 +64,11 @@ describe('CodeDeploy', () => {
}
const expected = _.pipe(
_.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)
})

Expand All @@ -74,9 +77,10 @@ describe('CodeDeploy', () => {
const deploymentSettings = { type: 'Linear10PercentEvery1Minute' }
const expected = _.pipe(
_.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)
})
})
Expand All @@ -89,10 +93,11 @@ describe('CodeDeploy', () => {
const expected = _.pipe(
_.set('Properties.ServiceRoleArn', codeDeployRoleArn),
_.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
})
expect(actual).to.deep.equal(expected)
})
Expand All @@ -112,13 +117,15 @@ describe('CodeDeploy', () => {
}
const expected = _.pipe(
_.set('Properties.ApplicationName', { Ref: codeDeployAppName }),
_.set('Properties.DeploymentGroupName', codeDeployGroupName),
_.set('Properties.DeploymentConfigName.Fn::Sub[1].ConfigName', deploymentSettings.type),
_.set('Properties.TriggerConfigurations', deploymentSettings.triggerConfigurations)
)(baseDeploymentGroup)

const actual = CodeDeploy.buildFnDeploymentGroup({
deploymentSettings,
codeDeployAppName
codeDeployAppName,
codeDeployGroupName
})

expect(actual).to.deep.equal(expected)
Expand Down
2 changes: 1 addition & 1 deletion lib/CfTemplateGenerators/Iam.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ function buildExecutionRoleWithCodeDeploy (inputRole, codeDeployAppName, deploym
Action: ['codedeploy:PutLifecycleEventHookExecutionStatus'],
Effect: 'Allow',
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}`
}))
})

Expand Down
12 changes: 6 additions & 6 deletions lib/CfTemplateGenerators/Iam.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ describe('Iam', () => {
Effect: 'Allow',
Resource: [
// 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' }
]
}
]
Expand All @@ -147,7 +147,7 @@ describe('Iam', () => {
]
}
}
const deploymentGroups = ['FirstLambdaFunctionDeploymentGroup']
const deploymentGroups = ['canary-deployments-test-dev-FirstLambdaFunctionDeploymentGroup']
const actual = Iam.buildExecutionRoleWithCodeDeploy(input, codeDeployAppName, deploymentGroups)
expect(actual).to.deep.equal(expected)
expect(actual).not.to.deep.equal(input)
Expand Down Expand Up @@ -177,9 +177,9 @@ describe('Iam', () => {
Effect: 'Allow',
Resource: [
// 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' }
]
}
]
Expand All @@ -188,7 +188,7 @@ describe('Iam', () => {
]
}
}
const deploymentGroups = ['FirstLambdaFunctionDeploymentGroup', 'SecondLambdaFunctionDeploymentGroup']
const deploymentGroups = ['canary-deployments-test-dev-FirstLambdaFunctionDeploymentGroup', 'canary-deployments-test-dev-SecondLambdaFunctionDeploymentGroup']
const actual = Iam.buildExecutionRoleWithCodeDeploy(input, codeDeployAppName, deploymentGroups)
expect(actual).to.deep.equal(expected)
expect(actual).not.to.deep.equal(input)
Expand Down Expand Up @@ -216,7 +216,7 @@ describe('Iam', () => {
}
}
const expected = JSON.parse(JSON.stringify(input))
const deploymentGroups = ['FirstLambdaFunctionDeploymentGroup']
const deploymentGroups = ['canary-deployments-test-dev-FirstLambdaFunctionDeploymentGroup']
const actual = Iam.buildExecutionRoleWithCodeDeploy(input, codeDeployAppName, deploymentGroups)
expect(actual).to.deep.equal(expected)
})
Expand Down
Loading

0 comments on commit 1b70114

Please sign in to comment.