Skip to content

Commit bc233fa

Browse files
jogoldElad Ben-Israel
authored andcommitted
feat(ecs): support secret environment variables (#2994)
Add support for runtime secrets in containers by adding a union class to treat secret environment variable values whether they are pulled from a SSM parameter or a AWS Secrets secret. https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html Closes #1478
1 parent 6c0bf4a commit bc233fa

19 files changed

+231
-30
lines changed

packages/@aws-cdk/aws-ecs-patterns/lib/base/load-balanced-service-base.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ export interface LoadBalancedServiceBaseProps {
6767
*/
6868
readonly environment?: { [key: string]: string };
6969

70+
/**
71+
* Secret environment variables to pass to the container
72+
*
73+
* @default - No secret environment variables.
74+
*/
75+
readonly secrets?: { [key: string]: ecs.Secret };
76+
7077
/**
7178
* Whether to create an AWS log driver
7279
*

packages/@aws-cdk/aws-ecs-patterns/lib/base/queue-processing-service-base.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,20 @@ export interface QueueProcessingServiceBaseProps {
4141
/**
4242
* The environment variables to pass to the container.
4343
*
44+
* The variable `QUEUE_NAME` with value `queue.queueName` will
45+
* always be passed.
46+
*
4447
* @default 'QUEUE_NAME: queue.queueName'
4548
*/
4649
readonly environment?: { [key: string]: string };
4750

51+
/**
52+
* Secret environment variables to pass to the container
53+
*
54+
* @default - No secret environment variables.
55+
*/
56+
readonly secrets?: { [key: string]: ecs.Secret };
57+
4858
/**
4959
* A queue for which to process items from.
5060
*
@@ -89,18 +99,27 @@ export abstract class QueueProcessingServiceBase extends cdk.Construct {
8999
* Environment variables that will include the queue name
90100
*/
91101
public readonly environment: { [key: string]: string };
102+
103+
/**
104+
* Secret environment variables
105+
*/
106+
public readonly secrets?: { [key: string]: ecs.Secret };
107+
92108
/**
93109
* The minimum number of tasks to run
94110
*/
95111
public readonly desiredCount: number;
112+
96113
/**
97114
* The maximum number of instances for autoscaling to scale up to
98115
*/
99116
public readonly maxCapacity: number;
117+
100118
/**
101119
* The scaling interval for autoscaling based off an SQS Queue size
102120
*/
103121
public readonly scalingSteps: autoscaling.ScalingInterval[];
122+
104123
/**
105124
* The AwsLogDriver to use for logging if logging is enabled.
106125
*/
@@ -122,6 +141,7 @@ export abstract class QueueProcessingServiceBase extends cdk.Construct {
122141

123142
// Add the queue name to environment variables
124143
this.environment = { ...(props.environment || {}), QUEUE_NAME: this.sqsQueue.queueName };
144+
this.secrets = props.secrets;
125145

126146
// Determine the desired task count (minimum) and maximum scaling capacity
127147
this.desiredCount = props.desiredTaskCount || 1;

packages/@aws-cdk/aws-ecs-patterns/lib/base/scheduled-task-base.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,13 @@ export interface ScheduledTaskBaseProps {
4444
* @default none
4545
*/
4646
readonly environment?: { [key: string]: string };
47+
48+
/**
49+
* Secret environment variables to pass to the container
50+
*
51+
* @default - No secret environment variables.
52+
*/
53+
readonly secrets?: { [key: string]: ecs.Secret };
4754
}
4855

4956
/**

packages/@aws-cdk/aws-ecs-patterns/lib/ecs/load-balanced-ecs-service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export class LoadBalancedEc2Service extends LoadBalancedServiceBase {
5353
memoryLimitMiB: props.memoryLimitMiB,
5454
memoryReservationMiB: props.memoryReservationMiB,
5555
environment: props.environment,
56+
secrets: props.secrets,
5657
logging: this.logDriver,
5758
});
5859

packages/@aws-cdk/aws-ecs-patterns/lib/ecs/queue-processing-ecs-service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export class QueueProcessingEc2Service extends QueueProcessingServiceBase {
6262
cpu: props.cpu,
6363
command: props.command,
6464
environment: this.environment,
65+
secrets: this.secrets,
6566
logging: this.logDriver
6667
});
6768

packages/@aws-cdk/aws-ecs-patterns/lib/ecs/scheduled-ecs-task.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export class ScheduledEc2Task extends ScheduledTaskBase {
5353
cpu: props.cpu,
5454
command: props.command,
5555
environment: props.environment,
56+
secrets: props.secrets,
5657
logging: this.createAWSLogDriver(this.node.id)
5758
});
5859

packages/@aws-cdk/aws-ecs-patterns/lib/fargate/load-balanced-fargate-service.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ export class LoadBalancedFargateService extends LoadBalancedServiceBase {
9898
const container = taskDefinition.addContainer(containerName, {
9999
image: props.image,
100100
logging: this.logDriver,
101-
environment: props.environment
101+
environment: props.environment,
102+
secrets: props.secrets,
102103
});
103104

104105
container.addPortMappings({

packages/@aws-cdk/aws-ecs-patterns/lib/fargate/queue-processing-fargate-service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ export class QueueProcessingFargateService extends QueueProcessingServiceBase {
6565
image: props.image,
6666
command: props.command,
6767
environment: this.environment,
68+
secrets: this.secrets,
6869
logging: this.logDriver
6970
});
7071

packages/@aws-cdk/aws-ecs-patterns/lib/fargate/scheduled-fargate-task.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export class ScheduledFargateTask extends ScheduledTaskBase {
4848
image: props.image,
4949
command: props.command,
5050
environment: props.environment,
51+
secrets: props.secrets,
5152
logging: this.createAWSLogDriver(this.node.id)
5253
});
5354

packages/@aws-cdk/aws-ecs-patterns/test/ec2/integ.scheduled-ecs-task.lit.expected.json

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -665,11 +665,7 @@
665665
"Cpu": 1,
666666
"Environment": [
667667
{
668-
"Name": "name",
669-
"Value": "TRIGGER"
670-
},
671-
{
672-
"Name": "value",
668+
"Name": "TRIGGER",
673669
"Value": "CloudWatch Events"
674670
}
675671
],

0 commit comments

Comments
 (0)