Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: construct library for ECS #1041

Closed
wants to merge 113 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
113 commits
Select commit Hold shift + click to select a range
939452c
Ignore swp files
SoManyHs Aug 23, 2018
7302a2f
Add ECS lib and example
SoManyHs Aug 23, 2018
4c7127a
Add service and task def constructs
SoManyHs Aug 24, 2018
98749ec
WIP adding VPC/ASG
SoManyHs Aug 24, 2018
6d0942f
Refactor ECS demo
Aug 24, 2018
bddfe56
Add more props on Service
SoManyHs Aug 24, 2018
3574611
Add TODO for AMI IDs
SoManyHs Sep 6, 2018
a63c377
Weird hack?
SoManyHs Sep 7, 2018
b00e0dd
Update example to instantiate service separately
SoManyHs Sep 7, 2018
80ba2e4
WIP Add Container Definitions
SoManyHs Sep 12, 2018
0980f52
WIP Add other Task Def properties
SoManyHs Sep 14, 2018
8648540
Merge remote-tracking branch 'official/master' into ecs-demo
Sep 28, 2018
2d53d89
Indentation 4 -> 2
Sep 28, 2018
dbdab86
Fix type errors
Sep 28, 2018
ee6b427
Use SSM parameter for ECS Optimized AMI
SoManyHs Sep 28, 2018
2b16dad
Move containerdefinition to its own file
Sep 28, 2018
16a92c0
Merge branch 'ecs-demo' of github.com:SoManyHs/aws-cdk into ecs-demo
Sep 28, 2018
ae881c2
Turning ContainerDefinition into a construct
Sep 28, 2018
0672e6a
Add enum for placement constraints
SoManyHs Oct 1, 2018
4f93a5b
Rename fleet to autoScalingGroup
SoManyHs Oct 1, 2018
9b61b89
Qualify "PlacementConstraintType" usage with package name
Oct 1, 2018
98bf81b
ECR can return itself as container image
Oct 1, 2018
ae1d525
Automatically generate execution and task roles
Oct 1, 2018
23072a9
Make taskRole public
Oct 1, 2018
e5cc7f2
Remove shellCommand from healthCheck
SoManyHs Oct 1, 2018
047eed8
Rename toContainerDefinitionJson to renderContainerDefinition
SoManyHs Oct 1, 2018
65d3f79
Some work on Service
Oct 1, 2018
11541d3
Merge branch 'ecs-demo' of github.com:SoManyHs/aws-cdk into ecs-demo
Oct 1, 2018
fb17532
Separate Fargate and ECS clusters
SoManyHs Oct 1, 2018
be8cb86
Separate ECS and Fargate Service
SoManyHs Oct 1, 2018
b8cce3a
Separate ECS/Fargate TaskDefinition
SoManyHs Oct 1, 2018
2741608
Fix lint errors
SoManyHs Oct 1, 2018
a901912
Fix lint errors
SoManyHs Oct 1, 2018
a91bda7
Merge branch 'ecs-demo' of github.com:SoManyHs/aws-cdk into ecs-demo
Oct 2, 2018
51adff5
Fix bugs in service and task def
SoManyHs Oct 2, 2018
70ae682
Fix AMI ID getter for ECS clusters
SoManyHs Oct 2, 2018
298e0a7
Add Capabilities in Linux Parameters on ContainerDefs
SoManyHs Oct 2, 2018
1541edd
Add Capabilities in Linux Parameters on ContainerDefs
SoManyHs Oct 2, 2018
a154d09
Add default arg to SSMProvider.getString
SoManyHs Oct 2, 2018
4b46685
Add Devices to LinuxParameters
SoManyHs Oct 2, 2018
9875c6e
Add Tmpfs to LinuxParameters
SoManyHs Oct 2, 2018
1044d1c
Update ecs demo with full Linux Parameters example
SoManyHs Oct 2, 2018
e7f8000
Rename renderLogDriver
SoManyHs Oct 2, 2018
e7f7b7d
Do most of Service
Oct 2, 2018
dda869d
Merge branch 'ecs-demo' of github.com:SoManyHs/aws-cdk into ecs-demo
Oct 2, 2018
97083dc
Add Ulimits
SoManyHs Oct 2, 2018
a3e3615
Fix log driver
SoManyHs Oct 2, 2018
b913f0e
Make add* functions consistently plural
SoManyHs Oct 2, 2018
fd21c0d
Make load balancers respect network mode
Oct 2, 2018
3b4695c
Merge branch 'ecs-demo' of github.com:SoManyHs/aws-cdk into ecs-demo
Oct 2, 2018
187f62b
Make add* functions consistently plural
SoManyHs Oct 2, 2018
6912e3f
Add portMappings to ContainerDefinition
SoManyHs Oct 2, 2018
2bf2d57
Missing semicolons
SoManyHs Oct 2, 2018
f477d8d
Add MountPoints to ContainerDefinition
SoManyHs Oct 2, 2018
b947f51
Change 'addContainer' to take the props and return ContainerDefinition.
Oct 2, 2018
ab83d35
Merge branch 'ecs-demo' of github.com:SoManyHs/aws-cdk into ecs-demo
Oct 2, 2018
30cb925
Add VolumesFrom to ContainerDefinition
SoManyHs Oct 2, 2018
c64e184
Add fargate example for demo purposes
SoManyHs Oct 3, 2018
566aac3
Remove Service Role, fix DesiredCount default, make task memory defin…
Oct 3, 2018
96e3105
Merge branch 'ecs-demo' of github.com:SoManyHs/aws-cdk into ecs-demo
Oct 3, 2018
48cd8d4
Starting on port mapping defaults
Oct 3, 2018
e311293
Add validation on port mappings with tests
SoManyHs Oct 3, 2018
4ffed09
Implement ingressPort method
SoManyHs Oct 3, 2018
97d3db3
Make ALB listener ACTUALLY default to 'true'
Oct 4, 2018
4f9b548
Add dependency on listener
SoManyHs Oct 4, 2018
e8aa186
Integ test for Fargate service
SoManyHs Oct 4, 2018
eb4a562
Merge branch 'ecs-demo' of github.com:SoManyHs/aws-cdk into ecs-demo
Oct 4, 2018
e06a3ec
Add VolumesFrom to ContainerDefinition
SoManyHs Oct 2, 2018
95b8d84
Add fargate example for demo purposes
SoManyHs Oct 3, 2018
5595707
Starting on port mapping defaults
Oct 3, 2018
a1b78f4
Make ALB listener ACTUALLY default to 'true'
Oct 4, 2018
6f08406
Add validation on port mappings with tests
SoManyHs Oct 3, 2018
5312362
Implement ingressPort method
SoManyHs Oct 3, 2018
6f42026
Add dependency on listener
SoManyHs Oct 4, 2018
1983858
Integ test for Fargate service
SoManyHs Oct 4, 2018
4ea6b8b
hello-cdk-fargate example works
SoManyHs Oct 4, 2018
e34d515
Add lazy evaluation of network configuration property
SoManyHs Oct 4, 2018
bf90c27
Add LoadBalancedFargateService L3 construct
SoManyHs Oct 4, 2018
ffbad9f
Start LoadBalancedFargateServiceApplet
SoManyHs Oct 4, 2018
d1b22bd
Application AutoScaling WIP
Oct 4, 2018
7840634
Merge branch 'ecs-demo' of github.com:SoManyHs/aws-cdk into ecs-demo
Oct 4, 2018
d1ec640
Make declarative example work
Oct 4, 2018
36e1ba2
Add import exports to Cluster
SoManyHs Oct 5, 2018
178898f
Fix portMappings/ingressPort
SoManyHs Oct 5, 2018
b73bdad
Clean up fargate integ test
SoManyHs Oct 5, 2018
049557e
Add integ test for load balanced service in bridge mode
SoManyHs Oct 5, 2018
2295ef2
Add integ test for awsvpc network mode on EcsCluster
SoManyHs Oct 5, 2018
f34c23c
Fix ingress/containerPort on LBs
SoManyHs Oct 5, 2018
c491a1d
Cleanup example
SoManyHs Oct 5, 2018
430f81e
Add cloudwatch metrics
SoManyHs Oct 5, 2018
dca6972
Bridge mode works with host port specified
SoManyHs Oct 5, 2018
cf528d6
Merge remote-tracking branch 'origin/master' into ecs-demo
Oct 12, 2018
ef51786
Fix libs to be in line with latest API changes from master
Oct 12, 2018
c3b543a
Merge remote-tracking branch 'origin/master' into ecs-demo
Oct 15, 2018
64b6d06
Fix build errors
Oct 17, 2018
af5a2a4
Merge remote-tracking branch 'origin/master' into ecs-demo
Oct 17, 2018
51097fd
Fix ingressPort/containerPort tests
SoManyHs Oct 22, 2018
7b19dd2
Add LoadBalancedEcsService L3 Construct
SoManyHs Oct 22, 2018
9bea6be
Add ability to specify cluster size
SoManyHs Oct 24, 2018
4ab455c
Merge remote-tracking branch 'origin/master' into ecs-demo
Oct 26, 2018
be9f447
feat(aws-ecs): add Task AutoScaling to Service
Oct 26, 2018
2eab513
Add unit tests for EcsCluster
SoManyHs Oct 26, 2018
57857a9
Merge branch 'master' into ecs-demo
SoManyHs Oct 29, 2018
4cf23fc
Unit tests for Cluster
SoManyHs Oct 29, 2018
37d3c4e
Set volumes on TaskDefinition
SoManyHs Oct 30, 2018
1ad3669
Clarify doc string for memoryLimit and memoryReservation
SoManyHs Oct 30, 2018
78d2a49
WIP Unit tests on EcsTaskDefinition
SoManyHs Oct 30, 2018
ca61a74
WIP Unit tests for EcsService
SoManyHs Oct 30, 2018
98345b3
WIP Unit tests for FargateService
SoManyHs Oct 30, 2018
35ebd9c
WIP unit tests Fargate Task Definition
SoManyHs Oct 30, 2018
09a182a
Merge branch 'huijbers/autoscaling' into ecs-demo
Oct 30, 2018
2fd2e7c
Add docs and readme and a couple of tests
Oct 30, 2018
9825127
Unit test for error case on service creation
SoManyHs Oct 30, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
WIP Unit tests on EcsTaskDefinition
TaskExecutionRole not being set -- lazy evaluation of executionRole on
TaskDef not working on private call to generateExecutionRole?

Also weird issue with importing aws-iam
SoManyHs committed Oct 30, 2018
commit 78d2a49597fe7dd687b628d95f61fa3ec0fd2adc
209 changes: 209 additions & 0 deletions packages/@aws-cdk/aws-ecs/test/ecs/test.ecs-task-definition.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
import { expect, haveResource } from '@aws-cdk/assert';
import { Protocol } from '@aws-cdk/aws-ec2';
// import iam = require('@aws-cdk/aws-iam'); // importing this is throwing a really weird error in line 11?
import cdk = require('@aws-cdk/cdk');
import { Test } from 'nodeunit';
import ecs = require('../../lib');

export = {
"When creating an ECS TaskDefinition": {
"with only required properties set, it correctly sets default properties"(test: Test) {
// GIVEN
const stack = new cdk.Stack();
new ecs.EcsTaskDefinition(stack, 'EcsTaskDef');

// THEN
expect(stack).to(haveResource("AWS::ECS::TaskDefinition", {
Family: "EcsTaskDef",
ContainerDefinitions: [],
PlacementConstraints: [],
Volumes: [],
NetworkMode: ecs.NetworkMode.Bridge,
RequiresCompatibilities: [ecs.Compatibilities.Ec2]
}));

// test error if no container defs?
test.done();
},

"correctly sets network mode"(test: Test) {
// GIVEN
const stack = new cdk.Stack();
new ecs.EcsTaskDefinition(stack, 'EcsTaskDef', {
networkMode: ecs.NetworkMode.AwsVpc
});

// THEN
expect(stack).to(haveResource("AWS::ECS::TaskDefinition", {
NetworkMode: ecs.NetworkMode.AwsVpc,
}));

test.done();
},

"correctly sets containers"(test: Test) {
// GIVEN
const stack = new cdk.Stack();

const taskDefinition = new ecs.EcsTaskDefinition(stack, 'EcsTaskDef');

const container = taskDefinition.addContainer("web", {
image: ecs.DockerHub.image("amazon/amazon-ecs-sample"),
memoryLimitMiB: 512 // add validation?
});

// TODO test other containerDefinition methods
container.addPortMappings({
containerPort: 3000
});

// THEN
expect(stack).to(haveResource("AWS::ECS::TaskDefinition", {
Family: "EcsTaskDef",
ContainerDefinitions: [{
Essential: true,
Memory: 512,
Image: "amazon/amazon-ecs-sample",
Links: [],
LinuxParameters: {
Capabilities: {
Add: [],
Drop: []
},
Devices: [],
Tmpfs: []
},
MountPoints: [],
Name: "web",
PortMappings: [{
ContainerPort: 3000,
HostPort: 0,
Protocol: Protocol.Tcp
}],
Ulimits: [],
VolumesFrom: []
}],
}));

test.done();
},

"correctly sets volumes"(test: Test) {
// GIVEN
const stack = new cdk.Stack();
const volume = {
host: {
sourcePath: "/tmp/cache",
},
name: "scratch"
};

// Adding volumes via props is a bit clunky
const taskDefinition = new ecs.EcsTaskDefinition(stack, 'EcsTaskDef', {
volumes: [volume]
});

const container = taskDefinition.addContainer("web", {
image: ecs.DockerHub.image("amazon/amazon-ecs-sample"),
memoryLimitMiB: 512
});

// this needs to be a better API -- should auto-add volumes
container.addMountPoints({
containerPath: "./cache",
readOnly: true,
sourceVolume: "scratch",
});

// THEN
expect(stack).to(haveResource("AWS::ECS::TaskDefinition", {
Family: "EcsTaskDef",
ContainerDefinitions: [{
MountPoints: [
{
ContainerPath: "./cache",
ReadOnly: true,
SourceVolume: "scratch"
}
]
}],
Volumes: [{
Host: {
SourcePath: "/tmp/cache"
},
Name: "scratch"
}]
}));

test.done();
},

"correctly sets placement constraints"(test: Test) {
// GIVEN
const stack = new cdk.Stack();
const taskDefinition = new ecs.EcsTaskDefinition(stack, 'EcsTaskDef', {
placementConstraints: [{
expression: "attribute:ecs.instance-type =~ t2.*",
type: ecs.PlacementConstraintType.MemberOf
}]
});

taskDefinition.addContainer("web", {
image: ecs.DockerHub.image("amazon/amazon-ecs-sample")
});

// THEN
expect(stack).to(haveResource("AWS::ECS::TaskDefinition", {
PlacementConstraints: [
{
Expression: "attribute:ecs.instance-type =~ t2.*",
Type: "memberOf"
}
]
}));

test.done();
},

// "correctly sets taskRole"(test: Test) {
// // GIVEN
// const stack = new cdk.Stack();
// const taskDefinition = new ecs.EcsTaskDefinition(stack, 'EcsTaskDef', {
// taskRole: new iam.Role(this, 'TaskRole', {
// assumedBy: new iam.ServicePrincipal('ecs-tasks.amazonaws.com'),
// })
// });

// taskDefinition.addContainer("web", {
// image: ecs.DockerHub.image("amazon/amazon-ecs-sample"),
// memoryLimitMiB: 512
// });

// // THEN
// expect(stack).to(haveResource("AWS::ECS::TaskDefinition", {
// TaskRole: "roleArn"
// }));

// test.done();
// },

// "correctly sets taskExecutionRole if containerDef uses ECR"(test: Test) {
// // GIVEN
// const stack = new cdk.Stack();
// const taskDefinition = new ecs.EcsTaskDefinition(stack, 'EcsTaskDef', {});
// const container = taskDefinition.addContainer("web", {
// image: ecs.DockerHub.image("amazon/amazon-ecs-sample"),
// memoryLimitMiB: 512 // add validation?
// });

// container.useEcrImage();

// // THEN
// expect(stack).to(haveResource("AWS::ECS::TaskDefinition", {
// TaskExecutionRole: "roleArn"
// }));

// test.done();
// },
}
};