diff --git a/examples/blue-green-container-deployment-example/src/blue-green-container-deployment-stack.ts b/examples/blue-green-container-deployment-example/src/blue-green-container-deployment-stack.ts
index ec32b5b93..47be2d583 100644
--- a/examples/blue-green-container-deployment-example/src/blue-green-container-deployment-stack.ts
+++ b/examples/blue-green-container-deployment-example/src/blue-green-container-deployment-stack.ts
@@ -4,7 +4,7 @@ import { CodeBuildAction, CodeCommitSourceAction, CodeDeployEcsDeployAction } fr
import { Vpc, Port } from '@aws-cdk/aws-ec2';
import { Cluster } from '@aws-cdk/aws-ecs';
import { ApplicationLoadBalancer, ApplicationTargetGroup, TargetType } from '@aws-cdk/aws-elasticloadbalancingv2';
-import { Construct, Stack, StackProps } from '@aws-cdk/core';
+import { Construct, Duration, Stack, StackProps } from '@aws-cdk/core';
import { EcsService, DummyTaskDefinition, EcsDeploymentGroup, PushImageProject } from '@cloudcomponents/cdk-blue-green-container-deployment';
import { ImageRepository } from '@cloudcomponents/cdk-container-registry';
@@ -67,6 +67,7 @@ export class BlueGreenContainerDeploymentStack extends Stack {
desiredCount: 2,
taskDefinition,
prodTargetGroup,
+ testTargetGroup,
});
ecsService.connections.allowFrom(loadBalancer, Port.tcp(80));
@@ -76,10 +77,10 @@ export class BlueGreenContainerDeploymentStack extends Stack {
applicationName: 'blue-green-application',
deploymentGroupName: 'blue-green-deployment-group',
ecsServices: [ecsService],
- targetGroupNames: [prodTargetGroup.targetGroupName, testTargetGroup.targetGroupName],
+ targetGroups: [prodTargetGroup, testTargetGroup],
prodTrafficListener: prodListener,
testTrafficListener: testListener,
- terminationWaitTimeInMinutes: 100,
+ terminationWaitTime: Duration.minutes(100),
});
// @see files: ./blue-green-repository for example content
diff --git a/packages/cdk-blue-green-container-deployment/API.md b/packages/cdk-blue-green-container-deployment/API.md
index 12aa7a197..054040491 100644
--- a/packages/cdk-blue-green-container-deployment/API.md
+++ b/packages/cdk-blue-green-container-deployment/API.md
@@ -177,12 +177,12 @@ new EcsDeploymentGroup(scope: Construct, id: string, props: EcsDeploymentGroupPr
* **deploymentGroupName** (string) *No description*
* **ecsServices** (Array<[IEcsService](#cloudcomponents-cdk-blue-green-container-deployment-iecsservice)>) *No description*
* **prodTrafficListener** ([TrafficListener](#cloudcomponents-cdk-blue-green-container-deployment-trafficlistener)) *No description*
- * **targetGroupNames** (Array) *No description*
+ * **targetGroups** (Array<[ApplicationTargetGroup](#aws-cdk-aws-elasticloadbalancingv2-applicationtargetgroup)>) *No description*
* **testTrafficListener** ([TrafficListener](#cloudcomponents-cdk-blue-green-container-deployment-trafficlistener)) *No description*
* **applicationName** (string) *No description* __*Optional*__
* **autoRollbackOnEvents** (Array<[RollbackEvent](#cloudcomponents-cdk-blue-green-container-deployment-rollbackevent)>) The event type or types that trigger a rollback. __*Optional*__
* **deploymentConfig** ([IEcsDeploymentConfig](#cloudcomponents-cdk-blue-green-container-deployment-iecsdeploymentconfig)) *No description* __*Optional*__
- * **terminationWaitTimeInMinutes** (number) the number of minutes before deleting the original (blue) task set. __*Default*__: 60
+ * **terminationWaitTime** ([Duration](#aws-cdk-core-duration)) the number of minutes before deleting the original (blue) task set. __*Default*__: 60 minutes
@@ -221,6 +221,7 @@ new EcsService(scope: Construct, id: string, props: EcsServiceProps)
* **prodTargetGroup** ([ITargetGroup](#aws-cdk-aws-elasticloadbalancingv2-itargetgroup)) *No description*
* **serviceName** (string) *No description*
* **taskDefinition** ([DummyTaskDefinition](#cloudcomponents-cdk-blue-green-container-deployment-dummytaskdefinition)) *No description*
+ * **testTargetGroup** ([ITargetGroup](#aws-cdk-aws-elasticloadbalancingv2-itargetgroup)) *No description*
* **circuitBreaker** ([DeploymentCircuitBreaker](#aws-cdk-aws-ecs-deploymentcircuitbreaker)) Whether to enable the deployment circuit breaker. __*Default*__: disabled
* **containerPort** (number) *No description* __*Optional*__
* **desiredCount** (number) *No description* __*Optional*__
@@ -317,12 +318,12 @@ Name | Type | Description
**deploymentGroupName** | string |
**ecsServices** | Array<[IEcsService](#cloudcomponents-cdk-blue-green-container-deployment-iecsservice)> |
**prodTrafficListener** | [TrafficListener](#cloudcomponents-cdk-blue-green-container-deployment-trafficlistener) |
-**targetGroupNames** | Array |
+**targetGroups** | Array<[ApplicationTargetGroup](#aws-cdk-aws-elasticloadbalancingv2-applicationtargetgroup)> |
**testTrafficListener** | [TrafficListener](#cloudcomponents-cdk-blue-green-container-deployment-trafficlistener) |
**applicationName**? | string | __*Optional*__
**autoRollbackOnEvents**? | Array<[RollbackEvent](#cloudcomponents-cdk-blue-green-container-deployment-rollbackevent)> | The event type or types that trigger a rollback.
__*Optional*__
**deploymentConfig**? | [IEcsDeploymentConfig](#cloudcomponents-cdk-blue-green-container-deployment-iecsdeploymentconfig) | __*Optional*__
-**terminationWaitTimeInMinutes**? | number | the number of minutes before deleting the original (blue) task set.
__*Default*__: 60
+**terminationWaitTime**? | [Duration](#aws-cdk-core-duration) | the number of minutes before deleting the original (blue) task set.
__*Default*__: 60 minutes
@@ -339,6 +340,7 @@ Name | Type | Description
**prodTargetGroup** | [ITargetGroup](#aws-cdk-aws-elasticloadbalancingv2-itargetgroup) |
**serviceName** | string |
**taskDefinition** | [DummyTaskDefinition](#cloudcomponents-cdk-blue-green-container-deployment-dummytaskdefinition) |
+**testTargetGroup** | [ITargetGroup](#aws-cdk-aws-elasticloadbalancingv2-itargetgroup) |
**circuitBreaker**? | [DeploymentCircuitBreaker](#aws-cdk-aws-ecs-deploymentcircuitbreaker) | Whether to enable the deployment circuit breaker.
__*Default*__: disabled
**containerPort**? | number | __*Optional*__
**desiredCount**? | number | __*Optional*__
diff --git a/packages/cdk-blue-green-container-deployment/lambda-file-sizes.json b/packages/cdk-blue-green-container-deployment/lambda-file-sizes.json
index 6e7d33e9b..5fc34da0a 100644
--- a/packages/cdk-blue-green-container-deployment/lambda-file-sizes.json
+++ b/packages/cdk-blue-green-container-deployment/lambda-file-sizes.json
@@ -1 +1 @@
-[{"timestamp":1631683651094,"files":[{"filename":"dummy-task-definition/index.js","previous":1728,"size":1728,"diff":0},{"filename":"ecs-deployment-group/index.js","previous":2182,"size":2182,"diff":0},{"filename":"ecs-service/index.js","previous":2152,"size":2138,"diff":-14}]},{"timestamp":1629825530770,"files":[{"filename":"dummy-task-definition/index.js","previous":1728,"size":1728,"diff":0},{"filename":"ecs-deployment-group/index.js","previous":2171,"size":2182,"diff":11},{"filename":"ecs-service/index.js","previous":2152,"size":2152,"diff":0}]},{"timestamp":1629823812165,"files":[{"filename":"dummy-task-definition/index.js","previous":1728,"size":1728,"diff":0},{"filename":"ecs-deployment-group/index.js","previous":2123,"size":2171,"diff":48},{"filename":"ecs-service/index.js","previous":2152,"size":2152,"diff":0}]},{"timestamp":1627652613714,"files":[{"filename":"dummy-task-definition/index.js","previous":1726,"size":1728,"diff":2},{"filename":"ecs-deployment-group/index.js","previous":2123,"size":2123,"diff":0},{"filename":"ecs-service/index.js","previous":2081,"size":2152,"diff":71}]},{"timestamp":1609276390870,"files":[{"filename":"dummy-task-definition/index.js","previous":1712,"size":1726,"diff":14},{"filename":"ecs-deployment-group/index.js","previous":2123,"size":2123,"diff":0},{"filename":"ecs-service/index.js","previous":2081,"size":2081,"diff":0}]},{"timestamp":1606329521054,"files":[{"filename":"dummy-task-definition/index.js","previous":1706,"size":1712,"diff":6},{"filename":"ecs-deployment-group/index.js","previous":2116,"size":2123,"diff":7},{"filename":"ecs-service/index.js","previous":2073,"size":2081,"diff":8}]},{"timestamp":1596457247342,"files":[{"filename":"dummy-task-definition/index.js","previous":1756,"size":1706,"diff":-50},{"filename":"ecs-deployment-group/index.js","previous":2116,"size":2116,"diff":0},{"filename":"ecs-service/index.js","previous":2073,"size":2073,"diff":0}]},{"timestamp":1596454924871,"files":[{"filename":"dummy-task-definition/index.js","previous":4964,"size":1756,"diff":-3208},{"filename":"ecs-deployment-group/index.js","previous":6103,"size":2116,"diff":-3987},{"filename":"ecs-service/index.js","previous":6141,"size":2073,"diff":-4068}]},{"timestamp":1596407637937,"files":[{"filename":"blue-green-service/__entrypoint__.js","previous":6760,"size":0,"diff":-6760},{"filename":"blue-green-service/index.js","previous":3368,"size":0,"diff":-3368},{"filename":"dummy-task-definition/__entrypoint__.js","previous":6760,"size":0,"diff":-6760},{"filename":"dummy-task-definition/index.js","previous":1963,"size":4964,"diff":3001},{"filename":"ecs-deployment-group/__entrypoint__.js","previous":6760,"size":0,"diff":-6760},{"filename":"ecs-deployment-group/index.js","previous":2292,"size":6103,"diff":3811},{"filename":"ecs-service/__entrypoint__.js","previous":6760,"size":0,"diff":-6760},{"filename":"ecs-service/index.js","previous":2312,"size":6141,"diff":3829}]}]
+[{"timestamp":1634467601943,"files":[{"filename":"ecs-deployment-group/index.js","previous":144792,"size":144825,"diff":33},{"filename":"ecs-service/index.js","previous":2133,"size":144797,"diff":142664}]},{"timestamp":1634411334117,"files":[{"filename":"dummy-task-definition/index.js","previous":1728,"size":0,"diff":-1728},{"filename":"ecs-deployment-group/index.js","previous":2182,"size":144792,"diff":142610},{"filename":"ecs-service/index.js","previous":2138,"size":2133,"diff":-5}]},{"timestamp":1631683651094,"files":[{"filename":"dummy-task-definition/index.js","previous":1728,"size":1728,"diff":0},{"filename":"ecs-deployment-group/index.js","previous":2182,"size":2182,"diff":0},{"filename":"ecs-service/index.js","previous":2152,"size":2138,"diff":-14}]},{"timestamp":1629825530770,"files":[{"filename":"dummy-task-definition/index.js","previous":1728,"size":1728,"diff":0},{"filename":"ecs-deployment-group/index.js","previous":2171,"size":2182,"diff":11},{"filename":"ecs-service/index.js","previous":2152,"size":2152,"diff":0}]},{"timestamp":1629823812165,"files":[{"filename":"dummy-task-definition/index.js","previous":1728,"size":1728,"diff":0},{"filename":"ecs-deployment-group/index.js","previous":2123,"size":2171,"diff":48},{"filename":"ecs-service/index.js","previous":2152,"size":2152,"diff":0}]},{"timestamp":1627652613714,"files":[{"filename":"dummy-task-definition/index.js","previous":1726,"size":1728,"diff":2},{"filename":"ecs-deployment-group/index.js","previous":2123,"size":2123,"diff":0},{"filename":"ecs-service/index.js","previous":2081,"size":2152,"diff":71}]},{"timestamp":1609276390870,"files":[{"filename":"dummy-task-definition/index.js","previous":1712,"size":1726,"diff":14},{"filename":"ecs-deployment-group/index.js","previous":2123,"size":2123,"diff":0},{"filename":"ecs-service/index.js","previous":2081,"size":2081,"diff":0}]},{"timestamp":1606329521054,"files":[{"filename":"dummy-task-definition/index.js","previous":1706,"size":1712,"diff":6},{"filename":"ecs-deployment-group/index.js","previous":2116,"size":2123,"diff":7},{"filename":"ecs-service/index.js","previous":2073,"size":2081,"diff":8}]},{"timestamp":1596457247342,"files":[{"filename":"dummy-task-definition/index.js","previous":1756,"size":1706,"diff":-50},{"filename":"ecs-deployment-group/index.js","previous":2116,"size":2116,"diff":0},{"filename":"ecs-service/index.js","previous":2073,"size":2073,"diff":0}]},{"timestamp":1596454924871,"files":[{"filename":"dummy-task-definition/index.js","previous":4964,"size":1756,"diff":-3208},{"filename":"ecs-deployment-group/index.js","previous":6103,"size":2116,"diff":-3987},{"filename":"ecs-service/index.js","previous":6141,"size":2073,"diff":-4068}]},{"timestamp":1596407637937,"files":[{"filename":"blue-green-service/__entrypoint__.js","previous":6760,"size":0,"diff":-6760},{"filename":"blue-green-service/index.js","previous":3368,"size":0,"diff":-3368},{"filename":"dummy-task-definition/__entrypoint__.js","previous":6760,"size":0,"diff":-6760},{"filename":"dummy-task-definition/index.js","previous":1963,"size":4964,"diff":3001},{"filename":"ecs-deployment-group/__entrypoint__.js","previous":6760,"size":0,"diff":-6760},{"filename":"ecs-deployment-group/index.js","previous":2292,"size":6103,"diff":3811},{"filename":"ecs-service/__entrypoint__.js","previous":6760,"size":0,"diff":-6760},{"filename":"ecs-service/index.js","previous":2312,"size":6141,"diff":3829}]}]
diff --git a/packages/cdk-blue-green-container-deployment/package.json b/packages/cdk-blue-green-container-deployment/package.json
index 52702c0cf..ef3a838cf 100644
--- a/packages/cdk-blue-green-container-deployment/package.json
+++ b/packages/cdk-blue-green-container-deployment/package.json
@@ -63,27 +63,32 @@
"peerDependencies": {
"@aws-cdk/aws-codebuild": "^1.127.0",
"@aws-cdk/aws-codedeploy": "^1.127.0",
+ "@aws-cdk/custom-resources": "^1.127.0",
"@aws-cdk/aws-ec2": "^1.127.0",
"@aws-cdk/aws-ecr": "^1.127.0",
"@aws-cdk/aws-ecs": "^1.127.0",
"@aws-cdk/aws-elasticloadbalancingv2": "^1.127.0",
"@aws-cdk/aws-iam": "^1.127.0",
+ "@aws-cdk/aws-lambda": "^1.127.0",
"@aws-cdk/core": "^1.127.0",
"constructs": "^3.2.0"
},
"dependencies": {
"@aws-cdk/aws-codebuild": "^1.127.0",
"@aws-cdk/aws-codedeploy": "^1.127.0",
+ "@aws-cdk/custom-resources": "^1.127.0",
"@aws-cdk/aws-ec2": "^1.127.0",
"@aws-cdk/aws-ecr": "^1.127.0",
"@aws-cdk/aws-ecs": "^1.127.0",
"@aws-cdk/aws-elasticloadbalancingv2": "^1.127.0",
"@aws-cdk/aws-iam": "^1.127.0",
+ "@aws-cdk/aws-lambda": "^1.127.0",
"@aws-cdk/core": "^1.127.0"
},
"devDependencies": {
"@aws-cdk/assert": "^1.127.0",
"aws-sdk": "^2.1004.0",
+ "custom-resource-helper": "^1.0.15",
"jest-cdk-snapshot": "^1.4.2"
},
"externals": [
diff --git a/packages/cdk-blue-green-container-deployment/src/__tests__/__snapshots__/dummy-task-definition.test.ts.snap b/packages/cdk-blue-green-container-deployment/src/__tests__/__snapshots__/dummy-task-definition.test.ts.snap
new file mode 100644
index 000000000..f74c7188f
--- /dev/null
+++ b/packages/cdk-blue-green-container-deployment/src/__tests__/__snapshots__/dummy-task-definition.test.ts.snap
@@ -0,0 +1,156 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`default setup 1`] = `
+Object {
+ "Parameters": Any