diff --git a/packages/@aws-cdk/aws-ecs/lib/container-definition.ts b/packages/@aws-cdk/aws-ecs/lib/container-definition.ts index 478ff70763f05..13bb3fb321616 100644 --- a/packages/@aws-cdk/aws-ecs/lib/container-definition.ts +++ b/packages/@aws-cdk/aws-ecs/lib/container-definition.ts @@ -59,7 +59,7 @@ export interface ContainerDefinitionProps { * * @default No labels */ - dockerLabels?: {[key: string]: string }; + dockerLabels?: { [key: string]: string }; /** * A list of custom labels for SELinux and AppArmor multi-level security systems. @@ -81,7 +81,7 @@ export interface ContainerDefinitionProps { * * @default No environment variables */ - environment?: {[key: string]: string}; + environment?: { [key: string]: string }; /** * Indicates whether the task stops if this container fails. @@ -101,7 +101,7 @@ export interface ContainerDefinitionProps { * * @default No extra hosts */ - extraHosts?: {[name: string]: string}; + extraHosts?: { [name: string]: string }; /** * Container health check. @@ -434,7 +434,7 @@ export interface HealthCheck { timeout?: number; } -function renderKV(env: {[key: string]: string}, keyName: string, valueName: string): any { +function renderKV(env: { [key: string]: string }, keyName: string, valueName: string): any { const ret = []; for (const [key, value] of Object.entries(env)) { ret.push({ [keyName]: key, [valueName]: value }); @@ -577,16 +577,16 @@ function renderPortMapping(pm: PortMapping): CfnTaskDefinition.PortMappingProper } export interface ScratchSpace { - containerPath: string, - readOnly: boolean, - sourcePath: string - name: string, + containerPath: string, + readOnly: boolean, + sourcePath: string + name: string, } export interface MountPoint { - containerPath: string, - readOnly: boolean, - sourceVolume: string, + containerPath: string, + readOnly: boolean, + sourceVolume: string, } function renderMountPoint(mp: MountPoint): CfnTaskDefinition.MountPointProperty { diff --git a/packages/@aws-cdk/aws-ecs/lib/load-balanced-ecs-service.ts b/packages/@aws-cdk/aws-ecs/lib/load-balanced-ecs-service.ts index bbf9c2e01b4c5..8f227b4fe564a 100644 --- a/packages/@aws-cdk/aws-ecs/lib/load-balanced-ecs-service.ts +++ b/packages/@aws-cdk/aws-ecs/lib/load-balanced-ecs-service.ts @@ -61,6 +61,13 @@ export interface LoadBalancedEc2ServiceProps { * @default 1 */ desiredCount?: number; + + /** + * Environment variables to pass to the container + * + * @default No environment variables + */ + environment?: { [key: string]: string }; } /** @@ -80,6 +87,7 @@ export class LoadBalancedEc2Service extends cdk.Construct { const container = taskDefinition.addContainer('web', { image: props.image, memoryLimitMiB: props.memoryLimitMiB, + environment: props.environment, }); container.addPortMappings({ diff --git a/packages/@aws-cdk/aws-ecs/lib/load-balanced-fargate-service-applet.ts b/packages/@aws-cdk/aws-ecs/lib/load-balanced-fargate-service-applet.ts index ca019b69f93f9..17a93d266e823 100644 --- a/packages/@aws-cdk/aws-ecs/lib/load-balanced-fargate-service-applet.ts +++ b/packages/@aws-cdk/aws-ecs/lib/load-balanced-fargate-service-applet.ts @@ -95,6 +95,13 @@ export interface LoadBalancedFargateServiceAppletProps extends cdk.StackProps { * Setting this option will set the load balancer port to 443. */ certificate?: string; + + /** + * Environment variables to pass to the container + * + * @default No environment variables + */ + environment?: { [key: string]: string }; } /** @@ -127,6 +134,7 @@ export class LoadBalancedFargateServiceApplet extends cdk.Stack { publicTasks: props.publicTasks, image: ContainerImage.fromDockerHub(props.image), desiredCount: props.desiredCount, + environment: props.environment, certificate, domainName: props.domainName, domainZone diff --git a/packages/@aws-cdk/aws-ecs/lib/load-balanced-fargate-service.ts b/packages/@aws-cdk/aws-ecs/lib/load-balanced-fargate-service.ts index c90ff69435add..3124544781387 100644 --- a/packages/@aws-cdk/aws-ecs/lib/load-balanced-fargate-service.ts +++ b/packages/@aws-cdk/aws-ecs/lib/load-balanced-fargate-service.ts @@ -108,6 +108,14 @@ export interface LoadBalancedFargateServiceProps { * @default true */ createLogs?: boolean; + + /** + * Environment variables to pass to the container + * + * @default No environment variables + */ + environment?: { [key: string]: string }; + } /** @@ -132,7 +140,8 @@ export class LoadBalancedFargateService extends cdk.Construct { const container = taskDefinition.addContainer('web', { image: props.image, - logging: optIn ? this.createAWSLogDriver(this.node.id) : undefined + logging: optIn ? this.createAWSLogDriver(this.node.id) : undefined, + environment: props.environment }); container.addPortMappings({ diff --git a/packages/@aws-cdk/aws-ecs/test/test.container-definition.ts b/packages/@aws-cdk/aws-ecs/test/test.container-definition.ts index f2e585cd67b77..393613d1aa9ab 100644 --- a/packages/@aws-cdk/aws-ecs/test/test.container-definition.ts +++ b/packages/@aws-cdk/aws-ecs/test/test.container-definition.ts @@ -253,6 +253,37 @@ export = { }, }, + 'can add environment variables to the container definition'(test: Test) { + // GIVEN + const stack = new cdk.Stack(); + const taskDefinition = new ecs.Ec2TaskDefinition(stack, 'TaskDef'); + + // WHEN + taskDefinition.addContainer('cont', { + image: ecs.ContainerImage.fromDockerHub('test'), + memoryLimitMiB: 1024, + environment: { + TEST_ENVIRONMENT_VARIABLE: "test environment variable value" + } + }); + + // THEN + // THEN + expect(stack).to(haveResourceLike('AWS::ECS::TaskDefinition', { + ContainerDefinitions: [ + { + Environment: [{ + Name: "TEST_ENVIRONMENT_VARIABLE", + Value: "test environment variable value" + }] + } + ] + })); + + test.done(); + + }, + 'can add AWS logging to container definition'(test: Test) { // GIVEN const stack = new cdk.Stack(); @@ -285,9 +316,9 @@ export = { PolicyDocument: { Statement: [ { - Action: [ "logs:CreateLogStream", "logs:PutLogEvents" ], + Action: ["logs:CreateLogStream", "logs:PutLogEvents"], Effect: "Allow", - Resource: { "Fn::GetAtt": [ "LoggingLogGroupC6B8E20B", "Arn" ] } + Resource: { "Fn::GetAtt": ["LoggingLogGroupC6B8E20B", "Arn"] } } ], Version: "2012-10-17" diff --git a/packages/@aws-cdk/aws-ecs/test/test.l3s.ts b/packages/@aws-cdk/aws-ecs/test/test.l3s.ts index df6d3957837a8..70413e120e296 100644 --- a/packages/@aws-cdk/aws-ecs/test/test.l3s.ts +++ b/packages/@aws-cdk/aws-ecs/test/test.l3s.ts @@ -19,7 +19,11 @@ export = { cluster, memoryLimitMiB: 1024, image: ecs.ContainerImage.fromDockerHub('test'), - desiredCount: 2 + desiredCount: 2, + environment: { + TEST_ENVIRONMENT_VARIABLE1: "test environment variable 1 value", + TEST_ENVIRONMENT_VARIABLE2: "test environment variable 2 value" + } }); // THEN - stack containers a load balancer and a service @@ -30,6 +34,23 @@ export = { LaunchType: "EC2", })); + 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" + } + ], + } + ] + })); + test.done(); }, @@ -43,7 +64,11 @@ export = { new ecs.LoadBalancedFargateService(stack, 'Service', { cluster, image: ecs.ContainerImage.fromDockerHub('test'), - desiredCount: 2 + desiredCount: 2, + environment: { + TEST_ENVIRONMENT_VARIABLE1: "test environment variable 1 value", + TEST_ENVIRONMENT_VARIABLE2: "test environment variable 2 value" + } }); // THEN - stack contains a load balancer and a service @@ -51,6 +76,16 @@ export = { 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" + } + ], LogConfiguration: { LogDriver: "awslogs", Options: { @@ -86,13 +121,27 @@ export = { cluster, image: ecs.ContainerImage.fromDockerHub('test'), desiredCount: 2, - createLogs: false + createLogs: false, + environment: { + TEST_ENVIRONMENT_VARIABLE1: "test environment variable 1 value", + TEST_ENVIRONMENT_VARIABLE2: "test environment variable 2 value" + } }); // THEN - stack contains a load balancer and a service expect(stack).notTo(haveResource('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" + } + ], LogConfiguration: { LogDriver: "awslogs", Options: { @@ -145,8 +194,8 @@ export = { }, Type: 'A', AliasTarget: { - HostedZoneId: { 'Fn::GetAtt': [ 'ServiceLBE9A1ADBC', 'CanonicalHostedZoneID' ] }, - DNSName: { 'Fn::GetAtt': [ 'ServiceLBE9A1ADBC', 'DNSName' ] }, + HostedZoneId: { 'Fn::GetAtt': ['ServiceLBE9A1ADBC', 'CanonicalHostedZoneID'] }, + DNSName: { 'Fn::GetAtt': ['ServiceLBE9A1ADBC', 'DNSName'] }, } })); @@ -176,7 +225,11 @@ export = { const app = new cdk.App(); const stack = new ecs.LoadBalancedFargateServiceApplet(app, 'Service', { image: 'test', - desiredCount: 2 + desiredCount: 2, + environment: { + TEST_ENVIRONMENT_VARIABLE1: "test environment variable 1 value", + TEST_ENVIRONMENT_VARIABLE2: "test environment variable 2 value" + } }); // THEN - stack contains a load balancer and a service @@ -187,6 +240,23 @@ export = { LaunchType: "FARGATE", })); + 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" + } + ], + } + ] + })); + test.done(); }, @@ -221,8 +291,8 @@ export = { HostedZoneId: "/hostedzone/DUMMY", Type: 'A', AliasTarget: { - HostedZoneId: { 'Fn::GetAtt': [ 'FargateServiceLBB353E155', 'CanonicalHostedZoneID' ] }, - DNSName: { 'Fn::GetAtt': [ 'FargateServiceLBB353E155', 'DNSName' ] }, + HostedZoneId: { 'Fn::GetAtt': ['FargateServiceLBB353E155', 'CanonicalHostedZoneID'] }, + DNSName: { 'Fn::GetAtt': ['FargateServiceLBB353E155', 'DNSName'] }, } }));