diff --git a/packages/@aws-cdk/aws-ecs-patterns/lib/base/application-load-balanced-service-base.ts b/packages/@aws-cdk/aws-ecs-patterns/lib/base/application-load-balanced-service-base.ts index 3ddbfd71bff7e..605bc9db0f103 100644 --- a/packages/@aws-cdk/aws-ecs-patterns/lib/base/application-load-balanced-service-base.ts +++ b/packages/@aws-cdk/aws-ecs-patterns/lib/base/application-load-balanced-service-base.ts @@ -203,6 +203,13 @@ export interface ApplicationLoadBalancedTaskImageOptions { * @default 80 */ readonly containerPort?: number; + + /** + * The name of a family that this task definition is registered to. A family groups multiple versions of a task definition. + * + * @default - Automatically generated name. + */ + readonly family?: string; } /** diff --git a/packages/@aws-cdk/aws-ecs-patterns/lib/base/network-load-balanced-service-base.ts b/packages/@aws-cdk/aws-ecs-patterns/lib/base/network-load-balanced-service-base.ts index 0757bf9117e3e..d3a92f867168a 100644 --- a/packages/@aws-cdk/aws-ecs-patterns/lib/base/network-load-balanced-service-base.ts +++ b/packages/@aws-cdk/aws-ecs-patterns/lib/base/network-load-balanced-service-base.ts @@ -181,6 +181,13 @@ export interface NetworkLoadBalancedTaskImageOptions { * @default 80 */ readonly containerPort?: number; + + /** + * The name of a family that this task definition is registered to. A family groups multiple versions of a task definition. + * + * @default - Automatically generated name. + */ + readonly family?: string; } /** diff --git a/packages/@aws-cdk/aws-ecs-patterns/lib/ecs/application-load-balanced-ecs-service.ts b/packages/@aws-cdk/aws-ecs-patterns/lib/ecs/application-load-balanced-ecs-service.ts index 38e03326f9b26..d29fe3fb2778e 100644 --- a/packages/@aws-cdk/aws-ecs-patterns/lib/ecs/application-load-balanced-ecs-service.ts +++ b/packages/@aws-cdk/aws-ecs-patterns/lib/ecs/application-load-balanced-ecs-service.ts @@ -92,7 +92,8 @@ export class ApplicationLoadBalancedEc2Service extends ApplicationLoadBalancedSe const taskImageOptions = props.taskImageOptions; this.taskDefinition = new Ec2TaskDefinition(this, 'TaskDef', { executionRole: taskImageOptions.executionRole, - taskRole: taskImageOptions.taskRole + taskRole: taskImageOptions.taskRole, + family: taskImageOptions.family, }); // Create log driver if logging is enabled diff --git a/packages/@aws-cdk/aws-ecs-patterns/lib/ecs/network-load-balanced-ecs-service.ts b/packages/@aws-cdk/aws-ecs-patterns/lib/ecs/network-load-balanced-ecs-service.ts index 2415ede78a4e1..9f699c334198c 100644 --- a/packages/@aws-cdk/aws-ecs-patterns/lib/ecs/network-load-balanced-ecs-service.ts +++ b/packages/@aws-cdk/aws-ecs-patterns/lib/ecs/network-load-balanced-ecs-service.ts @@ -90,7 +90,8 @@ export class NetworkLoadBalancedEc2Service extends NetworkLoadBalancedServiceBas const taskImageOptions = props.taskImageOptions; this.taskDefinition = new Ec2TaskDefinition(this, 'TaskDef', { executionRole: taskImageOptions.executionRole, - taskRole: taskImageOptions.taskRole + taskRole: taskImageOptions.taskRole, + family: taskImageOptions.family, }); // Create log driver if logging is enabled diff --git a/packages/@aws-cdk/aws-ecs-patterns/lib/fargate/application-load-balanced-fargate-service.ts b/packages/@aws-cdk/aws-ecs-patterns/lib/fargate/application-load-balanced-fargate-service.ts index 5f38ee8ede9e5..bb6ef7133396c 100644 --- a/packages/@aws-cdk/aws-ecs-patterns/lib/fargate/application-load-balanced-fargate-service.ts +++ b/packages/@aws-cdk/aws-ecs-patterns/lib/fargate/application-load-balanced-fargate-service.ts @@ -103,7 +103,8 @@ export class ApplicationLoadBalancedFargateService extends ApplicationLoadBalanc memoryLimitMiB: props.memoryLimitMiB, cpu: props.cpu, executionRole: taskImageOptions.executionRole, - taskRole: taskImageOptions.taskRole + taskRole: taskImageOptions.taskRole, + family: taskImageOptions.family, }); // Create log driver if logging is enabled diff --git a/packages/@aws-cdk/aws-ecs-patterns/lib/fargate/network-load-balanced-fargate-service.ts b/packages/@aws-cdk/aws-ecs-patterns/lib/fargate/network-load-balanced-fargate-service.ts index 9579de0382654..634392df497d5 100644 --- a/packages/@aws-cdk/aws-ecs-patterns/lib/fargate/network-load-balanced-fargate-service.ts +++ b/packages/@aws-cdk/aws-ecs-patterns/lib/fargate/network-load-balanced-fargate-service.ts @@ -99,7 +99,8 @@ export class NetworkLoadBalancedFargateService extends NetworkLoadBalancedServic memoryLimitMiB: props.memoryLimitMiB, cpu: props.cpu, executionRole: taskImageOptions.executionRole, - taskRole: taskImageOptions.taskRole + taskRole: taskImageOptions.taskRole, + family: taskImageOptions.family, }); // Create log driver if logging is enabled diff --git a/packages/@aws-cdk/aws-ecs-patterns/test/fargate/test.load-balanced-fargate-service.ts b/packages/@aws-cdk/aws-ecs-patterns/test/fargate/test.load-balanced-fargate-service.ts index 0990f7728e250..e723a0f1c6959 100644 --- a/packages/@aws-cdk/aws-ecs-patterns/test/fargate/test.load-balanced-fargate-service.ts +++ b/packages/@aws-cdk/aws-ecs-patterns/test/fargate/test.load-balanced-fargate-service.ts @@ -1,4 +1,4 @@ -import { expect, haveResourceLike, SynthUtils } from '@aws-cdk/assert'; +import { expect, haveResource, haveResourceLike, SynthUtils } from '@aws-cdk/assert'; import ec2 = require('@aws-cdk/aws-ec2'); import ecs = require('@aws-cdk/aws-ecs'); import iam = require('@aws-cdk/aws-iam'); @@ -202,4 +202,57 @@ export = { test.done(); }, + 'test load balanced service with family defined'(test: Test) { + // GIVEN + const stack = new cdk.Stack(); + const vpc = new ec2.Vpc(stack, 'VPC'); + const cluster = new ecs.Cluster(stack, 'Cluster', { vpc }); + cluster.addCapacity('DefaultAutoScalingGroup', { instanceType: new ec2.InstanceType('t2.micro') }); + + // WHEN + new ecsPatterns.ApplicationLoadBalancedFargateService(stack, 'Service', { + cluster, + taskImageOptions: { + image: ecs.ContainerImage.fromRegistry("/aws/aws-example-app"), + enableLogging: false, + environment: { + TEST_ENVIRONMENT_VARIABLE1: "test environment variable 1 value", + TEST_ENVIRONMENT_VARIABLE2: "test environment variable 2 value" + }, + family: "fargate-task-family", + }, + desiredCount: 2, + memoryLimitMiB: 512, + serviceName: "fargate-test-service", + }); + + // THEN + expect(stack).to(haveResource("AWS::ECS::Service", { + DesiredCount: 2, + LaunchType: "FARGATE", + ServiceName: "fargate-test-service" + })); + + expect(stack).to(haveResourceLike('AWS::ECS::TaskDefinition', { + ContainerDefinitions: [ + { + Environment: [ + { + Name: "TEST_ENVIRONMENT_VARIABLE1", + Value: "test environment variable 1 value" + }, + { + Name: "TEST_ENVIRONMENT_VARIABLE2", + Value: "test environment variable 2 value" + } + ], + Image: "/aws/aws-example-app", + } + ], + Family: "fargate-task-family" + })); + + test.done(); + }, + };