Skip to content

Commit 66eb86f

Browse files
authored
Merge pull request #139 from Verimatrix/dummy-task-def-updates
fix: Support update hook for DummyTaskDefinition (resolves #140)
2 parents 872b55f + 8eee0e9 commit 66eb86f

2 files changed

Lines changed: 54 additions & 34 deletions

File tree

packages/cdk-blue-green-container-deployment/src/__tests__/__snapshots__/dummy-task-definition.test.ts.snap

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,21 @@ Object {
116116
"Arn",
117117
],
118118
},
119+
"Update": Object {
120+
"Fn::Join": Array [
121+
"",
122+
Array [
123+
"{\\"service\\":\\"ECS\\",\\"action\\":\\"registerTaskDefinition\\",\\"parameters\\":{\\"requiresCompatibilities\\":[\\"FARGATE\\"],\\"family\\":\\"c86e1e5d419d3c124c7e40411b7e7805f91621e162\\",\\"executionRoleArn\\":\\"",
124+
Object {
125+
"Fn::GetAtt": Array [
126+
"DummyTaskDefinitionExecutionRole715DBD43",
127+
"Arn",
128+
],
129+
},
130+
"\\",\\"networkMode\\":\\"awsvpc\\",\\"cpu\\":\\"256\\",\\"memory\\":\\"512\\",\\"containerDefinitions\\":[{\\"name\\":\\"sample-website\\",\\"image\\":\\"image\\",\\"portMappings\\":[{\\"hostPort\\":80,\\"protocol\\":\\"tcp\\",\\"containerPort\\":80}]}]},\\"physicalResourceId\\":{\\"responsePath\\":\\"taskDefinition.taskDefinitionArn\\"}}",
131+
],
132+
],
133+
},
119134
},
120135
"Type": "Custom::DummyTaskDefinition",
121136
"UpdateReplacePolicy": "Delete",

packages/cdk-blue-green-container-deployment/src/dummy-task-definition.ts

Lines changed: 39 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { NetworkMode } from '@aws-cdk/aws-ecs';
22
import { Role, ServicePrincipal, ManagedPolicy, PolicyStatement, Effect, IRole } from '@aws-cdk/aws-iam';
33
import { Construct } from '@aws-cdk/core';
4-
import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId, PhysicalResourceIdReference } from '@aws-cdk/custom-resources';
4+
import { AwsCustomResource, AwsCustomResourcePolicy, AwsSdkCall, PhysicalResourceId, PhysicalResourceIdReference } from '@aws-cdk/custom-resources';
55

66
export interface IDummyTaskDefinition {
77
readonly executionRole: IRole;
@@ -63,41 +63,46 @@ export class DummyTaskDefinition extends Construct implements IDummyTaskDefiniti
6363
this.containerName = props.containerName ?? 'sample-website';
6464
this.containerPort = props.containerPort ?? 80;
6565

66-
const taskDefinition = new AwsCustomResource(this, 'DummyTaskDefinition', {
67-
resourceType: 'Custom::DummyTaskDefinition',
68-
onCreate: {
69-
service: 'ECS',
70-
action: 'registerTaskDefinition',
71-
parameters: {
72-
requiresCompatibilities: ['FARGATE'],
73-
family: this.family,
74-
executionRoleArn: this.executionRole.roleArn,
75-
networkMode: NetworkMode.AWS_VPC,
76-
cpu: '256',
77-
memory: '512',
78-
containerDefinitions: [
79-
{
80-
name: this.containerName,
81-
image: props.image,
82-
portMappings: [
83-
{
84-
hostPort: this.containerPort,
85-
protocol: 'tcp',
86-
containerPort: this.containerPort,
87-
},
88-
],
89-
},
90-
],
91-
},
92-
physicalResourceId: PhysicalResourceId.fromResponse('taskDefinition.taskDefinitionArn'),
66+
const registerTaskDefinition: AwsSdkCall = {
67+
service: 'ECS',
68+
action: 'registerTaskDefinition',
69+
parameters: {
70+
requiresCompatibilities: ['FARGATE'],
71+
family: this.family,
72+
executionRoleArn: this.executionRole.roleArn,
73+
networkMode: NetworkMode.AWS_VPC,
74+
cpu: '256',
75+
memory: '512',
76+
containerDefinitions: [
77+
{
78+
name: this.containerName,
79+
image: props.image,
80+
portMappings: [
81+
{
82+
hostPort: this.containerPort,
83+
protocol: 'tcp',
84+
containerPort: this.containerPort,
85+
},
86+
],
87+
},
88+
],
9389
},
94-
onDelete: {
95-
service: 'ECS',
96-
action: 'deregisterTaskDefinition',
97-
parameters: {
98-
taskDefinition: new PhysicalResourceIdReference(),
99-
},
90+
physicalResourceId: PhysicalResourceId.fromResponse('taskDefinition.taskDefinitionArn'),
91+
};
92+
93+
const deregisterTaskDefinition: AwsSdkCall = {
94+
service: 'ECS',
95+
action: 'deregisterTaskDefinition',
96+
parameters: {
97+
taskDefinition: new PhysicalResourceIdReference(),
10098
},
99+
};
100+
101+
const taskDefinition = new AwsCustomResource(this, 'DummyTaskDefinition', {
102+
resourceType: 'Custom::DummyTaskDefinition',
103+
onCreate: registerTaskDefinition,
104+
onUpdate: registerTaskDefinition,
105+
onDelete: deregisterTaskDefinition,
101106
policy: AwsCustomResourcePolicy.fromStatements([
102107
new PolicyStatement({
103108
effect: Effect.ALLOW,

0 commit comments

Comments
 (0)