This folder contains the tests for the modules in this repo.
Running the tests locally
Note #1: Many of these tests create real resources in an AWS account. That means they cost money to run, especially
if you don't clean up after yourself. Please be considerate of the resources you create and take extra care to clean
everything up when you're done!
Note #2: Never hit CTRL + C or cancel a build once tests are running or the cleanup tasks won't run!
Note #3: We set -timeout 45m on all tests not because they necessarily take 45 minutes, but because Go has a
default test timeout of 10 minutes, after which it does a SIGQUIT, preventing the tests from properly cleaning up
after themselves. Therefore, we set a timeout of 45 minutes to make sure all tests have enough time to finish and
cleanup.
Add your AWS credentials as environment variables: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
For some of the tests, you also need to set the GITHUB_OAUTH_TOKEN environment variable to a valid GitHub
auth token with "repo" access. You can generate one here: https://github.com/settings/tokens
Setup
Download Go dependencies using dep:
cdtest
dep ensure
Run all the tests
cdtest
go test -v -timeout 45m -parallel 128
Run a specific test
To run a specific test called TestFoo:
cdtest
go test -v -timeout 45m -parallel 128 -run TestFoo
TODO
Add tests for the following:
Using the ecs-service module without an ELB
Deploying a new version of an ECS Task
Different settings for the deployment_maximum_percent and deployment_minimum_healthy_percent variables
Deploying multiple apps in the same cluster
Deploying multiple services with the same ELB
Questions? Ask away.
We're here to talk about our services, answer any questions, give advice, or just to chat.
{"treedata":{"name":"root","toggled":true,"children":[{"name":".circleci","children":[{"name":"config.yml","path":".circleci/config.yml","sha":"eb1e7e23ec3ef7106b62a3c7ef5dcbb02b8c1534"}]},{"name":".gitignore","path":".gitignore","sha":"cd65450bcaeda0f80c95d09a33442c16474e7f51"},{"name":".pre-commit-config.yaml","path":".pre-commit-config.yaml","sha":"71195b5cefdf89443b15adbdfdc7735b11833a37"},{"name":"CODEOWNERS","path":"CODEOWNERS","sha":"ecbeaab263c59e955b621268f161059633041e3d"},{"name":"LICENSE.txt","path":"LICENSE.txt","sha":"f4e3d9bd4717a044ed31ad847a300eee74371a78"},{"name":"README.adoc","path":"README.adoc","sha":"77af879e5e6f25292cc9d27df778fc93dc4b1f3a"},{"name":"_docs","children":[{"name":"ecs-architecture.png","path":"_docs/ecs-architecture.png","sha":"7caa9342bfc7ff5c74f26626a9831f22e914ff8e"},{"name":"ecs-fargate-service-icon.png","path":"_docs/ecs-fargate-service-icon.png","sha":"b8825b62a8b9170889c747320e1c79a9298c9bcb"},{"name":"ecs-icon.png","path":"_docs/ecs-icon.png","sha":"8ffdf43575d96d27ceced3d492871fa12403140e"},{"name":"ecs-service-architecture.png","path":"_docs/ecs-service-architecture.png","sha":"1bef2e6b95cb016b8e2c0219679d2d2d3ddd1769"},{"name":"ecs-service-icon.png","path":"_docs/ecs-service-icon.png","sha":"30947a9dcd3612d12ab42f40095b81a13fbaaff4"}]},{"name":"core-concepts.md","path":"core-concepts.md","sha":"816b25e1b3df74a01f2f564447c10b5ea5f5dd55"},{"name":"examples","children":[{"name":"deploy-ecs-task","children":[{"name":"README.md","path":"examples/deploy-ecs-task/README.md","sha":"5de7a89dc7a156f82c016fed690214711943bff6"},{"name":"containers","children":[{"name":"container-definitions.json","path":"examples/deploy-ecs-task/containers/container-definitions.json","sha":"1de2f83af666b622739f89debacc7c7faed35a08"}]},{"name":"main.tf","path":"examples/deploy-ecs-task/main.tf","sha":"1fada692987b1cb609c5afa32628ebf07827fac7"},{"name":"outputs.tf","path":"examples/deploy-ecs-task/outputs.tf","sha":"85a778d238b0c9114b80dc532258bf447b5adcd6"},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/deploy-ecs-task/user-data/user-data.sh","sha":"7b474fe788eb9581b91f5f58b0cc09d4201a2013"}]},{"name":"vars.tf","path":"examples/deploy-ecs-task/vars.tf","sha":"70a5be0fe5f10906076763b1ec4df79dccf68c34"}]},{"name":"docker-daemon-service","children":[{"name":"containers","children":[{"name":"datadog-agent-ecs.json","path":"examples/docker-daemon-service/containers/datadog-agent-ecs.json","sha":"2ca20904deaabee35357192e95f8bf6a04fc41b3"}]},{"name":"main.tf","path":"examples/docker-daemon-service/main.tf","sha":"b5c60c7840582dfd1c2b53234b346873bff70022"},{"name":"outputs.tf","path":"examples/docker-daemon-service/outputs.tf","sha":"2a294a1174fdc88601ebe62f9ab3dd4faf2d89fd"},{"name":"vars.tf","path":"examples/docker-daemon-service/vars.tf","sha":"5d47a110c100ec3764dedc79226912d467094614"}]},{"name":"docker-fargate-service-with-alb","children":[{"name":"README.md","path":"examples/docker-fargate-service-with-alb/README.md","sha":"e8754bd39b109b5b181f52596fbddef00302ea15"},{"name":"containers","children":[{"name":"container-definition.json","path":"examples/docker-fargate-service-with-alb/containers/container-definition.json","sha":"9091667150daa61c453f31975da897f735812c7c"}]},{"name":"main.tf","path":"examples/docker-fargate-service-with-alb/main.tf","sha":"cda120c6afd41cf67bfe3d654022665183879bba"},{"name":"outputs.tf","path":"examples/docker-fargate-service-with-alb/outputs.tf","sha":"f6b5bea9f779eaaa2b792f363657e7ba326b605e"},{"name":"vars.tf","path":"examples/docker-fargate-service-with-alb/vars.tf","sha":"89c1dfc0c0e8fdb60c432fde45bfae216e75df36"}]},{"name":"docker-fargate-service-with-efs-volume","children":[{"name":"README.md","path":"examples/docker-fargate-service-with-efs-volume/README.md","sha":"ad85406d663a5f4429cf568ba13c781c6c0090fc"},{"name":"containers","children":[{"name":"container-definition.json","path":"examples/docker-fargate-service-with-efs-volume/containers/container-definition.json","sha":"0b6cb6d9e9ab8eec112e6120b6eb4def8c94ef35"}]},{"name":"main.tf","path":"examples/docker-fargate-service-with-efs-volume/main.tf","sha":"54c9984d19a346a0ce9f736bd616a2c50c9ea0bc"},{"name":"outputs.tf","path":"examples/docker-fargate-service-with-efs-volume/outputs.tf","sha":"2a10149cd88dc1b73415185c4aaa3ade4bf879bb"},{"name":"vars.tf","path":"examples/docker-fargate-service-with-efs-volume/vars.tf","sha":"04a1222e45ec89ba378a22725e3a2166e453cd0c"}]},{"name":"docker-fargate-service-with-nlb","children":[{"name":"README.md","path":"examples/docker-fargate-service-with-nlb/README.md","sha":"d064e28aebebd7606143feb8e46584f8667c9136"},{"name":"containers","children":[{"name":"container-definition.json","path":"examples/docker-fargate-service-with-nlb/containers/container-definition.json","sha":"083fca39166d4b8f243e66cb96f6aa9fad72cbe6"}]},{"name":"main.tf","path":"examples/docker-fargate-service-with-nlb/main.tf","sha":"cbfb4bfa56116b1a627e5fe59f58db31a0b6b220"},{"name":"outputs.tf","path":"examples/docker-fargate-service-with-nlb/outputs.tf","sha":"b70fb7144134f7a12470711953437ff94aca37d0"},{"name":"vars.tf","path":"examples/docker-fargate-service-with-nlb/vars.tf","sha":"45dc7bf8f56844fba980cd650cf47d6f990b8415"}]},{"name":"docker-fargate-service-without-lb","children":[{"name":"README.md","path":"examples/docker-fargate-service-without-lb/README.md","sha":"fb5e52151d29936dd194ef319fc8f3dda277b26c"},{"name":"containers","children":[{"name":"container-definition.json","path":"examples/docker-fargate-service-without-lb/containers/container-definition.json","sha":"205833de7c0eabb367be2b16406cd12455d8e94e"}]},{"name":"main.tf","path":"examples/docker-fargate-service-without-lb/main.tf","sha":"b24e051929f544c8cba728021f1e46031b1a51b4"},{"name":"outputs.tf","path":"examples/docker-fargate-service-without-lb/outputs.tf","sha":"2a10149cd88dc1b73415185c4aaa3ade4bf879bb"},{"name":"vars.tf","path":"examples/docker-fargate-service-without-lb/vars.tf","sha":"85e201158ab1883911a48c3e03911299ec4b4ded"}]},{"name":"docker-fargate-spot-service-with-alb","children":[{"name":"README.md","path":"examples/docker-fargate-spot-service-with-alb/README.md","sha":"e1911050a7716c9148817d390d640e53a4e979c2"},{"name":"containers","children":[{"name":"container-definition.json","path":"examples/docker-fargate-spot-service-with-alb/containers/container-definition.json","sha":"9091667150daa61c453f31975da897f735812c7c"}]},{"name":"main.tf","path":"examples/docker-fargate-spot-service-with-alb/main.tf","sha":"d4f076f6213eaa33903980aaa4801da718863b73"},{"name":"outputs.tf","path":"examples/docker-fargate-spot-service-with-alb/outputs.tf","sha":"f6b5bea9f779eaaa2b792f363657e7ba326b605e"},{"name":"vars.tf","path":"examples/docker-fargate-spot-service-with-alb/vars.tf","sha":"550fc692ea4011f37ab500fdb4113eccfe4b2182"}]},{"name":"docker-service-with-alb-and-nlb","children":[{"name":"README.md","path":"examples/docker-service-with-alb-and-nlb/README.md","sha":"d8515f6083fb03e819d8bbf570396b500c128983"},{"name":"main.tf","path":"examples/docker-service-with-alb-and-nlb/main.tf","sha":"e1b3b7238b616f8003a9d34ea954dc07c2980edb"},{"name":"outputs.tf","path":"examples/docker-service-with-alb-and-nlb/outputs.tf","sha":"ef9a609942f94398422cc64cc257889bbcb485f8"},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/docker-service-with-alb-and-nlb/user-data/user-data.sh","sha":"5ed91084021a44a3678872771365e574ef7f40c9"}]},{"name":"vars.tf","path":"examples/docker-service-with-alb-and-nlb/vars.tf","sha":"267da866be06fca9cc5c12429a3ddb14841e2850"}]},{"name":"docker-service-with-alb-autoscaling","children":[{"name":"README.md","path":"examples/docker-service-with-alb-autoscaling/README.md","sha":"8ef7623bdc0058639976fed36e2540763aafac95"},{"name":"containers","children":[{"name":"container-definition.json","path":"examples/docker-service-with-alb-autoscaling/containers/container-definition.json","sha":"4e28c983a3050ab7a18fd3e9d9ac4730bd9b285e"}]},{"name":"main.tf","path":"examples/docker-service-with-alb-autoscaling/main.tf","sha":"94732c5393e9924b60c9aa77e593fdc9c988266f"},{"name":"outputs.tf","path":"examples/docker-service-with-alb-autoscaling/outputs.tf","sha":"2d96077e349d62d3e60a0eea34529ceb33e4da52"},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/docker-service-with-alb-autoscaling/user-data/user-data.sh","sha":"5ed91084021a44a3678872771365e574ef7f40c9"}]},{"name":"vars.tf","path":"examples/docker-service-with-alb-autoscaling/vars.tf","sha":"b5da959dff86c3b9bcec29b01b294d889dbf1d1a"}]},{"name":"docker-service-with-alb-canary","children":[{"name":"README.md","path":"examples/docker-service-with-alb-canary/README.md","sha":"d0036aaa886915db2ba8976fd7e21486f111e11c"},{"name":"containers","children":[{"name":"container-definition.json","path":"examples/docker-service-with-alb-canary/containers/container-definition.json","sha":"4e28c983a3050ab7a18fd3e9d9ac4730bd9b285e"}]},{"name":"main.tf","path":"examples/docker-service-with-alb-canary/main.tf","sha":"2bcdebfcaf42a8b2c2ab1d13d993d4a0975434e9"},{"name":"outputs.tf","path":"examples/docker-service-with-alb-canary/outputs.tf","sha":"2d96077e349d62d3e60a0eea34529ceb33e4da52"},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/docker-service-with-alb-canary/user-data/user-data.sh","sha":"5ed91084021a44a3678872771365e574ef7f40c9"}]},{"name":"vars.tf","path":"examples/docker-service-with-alb-canary/vars.tf","sha":"66d5e62ef077265a81611f242c0f434667484d25"}]},{"name":"docker-service-with-alb","children":[{"name":"README.md","path":"examples/docker-service-with-alb/README.md","sha":"589149955be5732eb79a478aed058fc632dc371c"},{"name":"containers","children":[{"name":"container-definition.json","path":"examples/docker-service-with-alb/containers/container-definition.json","sha":"4a3a2851994cdf389b9a3a9a0bb324981f0d4d59"}]},{"name":"main.tf","path":"examples/docker-service-with-alb/main.tf","sha":"6f96e7108811442b0719ac3cc94a7cece3da5b53"},{"name":"outputs.tf","path":"examples/docker-service-with-alb/outputs.tf","sha":"5ca6edc9e60ae3bfb6ef13003fe8236ebbb39821"},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/docker-service-with-alb/user-data/user-data.sh","sha":"5ed91084021a44a3678872771365e574ef7f40c9"}]},{"name":"vars.tf","path":"examples/docker-service-with-alb/vars.tf","sha":"8b9b459c2c1f27cefe0beeca63dc1022729239ac"}]},{"name":"docker-service-with-autoscaling","children":[{"name":"README.md","path":"examples/docker-service-with-autoscaling/README.md","sha":"a57a30c7214f71ffc08650301d46a2ea973aa1ba"},{"name":"containers","children":[{"name":"container-definition.json","path":"examples/docker-service-with-autoscaling/containers/container-definition.json","sha":"ddcd10cc00465f84a8ce9eb7d937f1cc648bfa7b"}]},{"name":"main.tf","path":"examples/docker-service-with-autoscaling/main.tf","sha":"75bc4c5e3f914b2b4306da35c4c149e87637767f"},{"name":"outputs.tf","path":"examples/docker-service-with-autoscaling/outputs.tf","sha":"c30e145beded6bc152c3e290c6230b31cb89ff71"},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/docker-service-with-autoscaling/user-data/user-data.sh","sha":"5ed91084021a44a3678872771365e574ef7f40c9"}]},{"name":"vars.tf","path":"examples/docker-service-with-autoscaling/vars.tf","sha":"241c6c462b329433f28ca06ae6bbde09577b3b8e"}]},{"name":"docker-service-with-canary-deployment","children":[{"name":"README.md","path":"examples/docker-service-with-canary-deployment/README.md","sha":"2eeccfce1d53f5bc3b12fffaa830538a78400cd7"},{"name":"containers","children":[{"name":"container-definition.json","path":"examples/docker-service-with-canary-deployment/containers/container-definition.json","sha":"ddcd10cc00465f84a8ce9eb7d937f1cc648bfa7b"}]},{"name":"main.tf","path":"examples/docker-service-with-canary-deployment/main.tf","sha":"17ee55cc265dbc1f955867655fe892f2837067cf"},{"name":"outputs.tf","path":"examples/docker-service-with-canary-deployment/outputs.tf","sha":"c30e145beded6bc152c3e290c6230b31cb89ff71"},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/docker-service-with-canary-deployment/user-data/user-data.sh","sha":"5ed91084021a44a3678872771365e574ef7f40c9"}]},{"name":"vars.tf","path":"examples/docker-service-with-canary-deployment/vars.tf","sha":"dbdb54a0d7c12b021ca4c37a2b1a526e86b3fdb9"}]},{"name":"docker-service-with-elb","children":[{"name":"README.md","path":"examples/docker-service-with-elb/README.md","sha":"f22cb6c52c7e991992c9cf7683a5f71d60c904ae"},{"name":"containers","children":[{"name":"container-definition.json","path":"examples/docker-service-with-elb/containers/container-definition.json","sha":"ddcd10cc00465f84a8ce9eb7d937f1cc648bfa7b"}]},{"name":"main.tf","path":"examples/docker-service-with-elb/main.tf","sha":"a789601c941b7465017b008e9dacf97082199799"},{"name":"outputs.tf","path":"examples/docker-service-with-elb/outputs.tf","sha":"9e06fbf3bd18efdea1c96669b89cf69ddbc69f39"},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/docker-service-with-elb/user-data/user-data.sh","sha":"83a55d65d90492a33029e246ecd0ca9046a4e27d"}]},{"name":"vars.tf","path":"examples/docker-service-with-elb/vars.tf","sha":"58a0978bac48cf9508d4a94f031ab4858ef833d8"}]},{"name":"docker-service-with-private-discovery","children":[{"name":"README.md","path":"examples/docker-service-with-private-discovery/README.md","sha":"03c1d0863e05e6be054b9f8ae83ddc236ecc4c0f"},{"name":"containers","children":[{"name":"container-definition.json","path":"examples/docker-service-with-private-discovery/containers/container-definition.json","sha":"d5beb20e8e729d072992009ac38fe67018ef684a"}]},{"name":"main.tf","path":"examples/docker-service-with-private-discovery/main.tf","sha":"42324ef269a50ff9725991216319edd39a22bba6"},{"name":"outputs.tf","path":"examples/docker-service-with-private-discovery/outputs.tf","sha":"ac153ce17150d268fb0567f0ba66cabce6daf63f"},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/docker-service-with-private-discovery/user-data/user-data.sh","sha":"7b474fe788eb9581b91f5f58b0cc09d4201a2013"}]},{"name":"vars.tf","path":"examples/docker-service-with-private-discovery/vars.tf","sha":"eebcce7a48919fd9fe07667886d3ca1c382e1c43"}]},{"name":"docker-service-with-public-discovery","children":[{"name":"README.md","path":"examples/docker-service-with-public-discovery/README.md","sha":"d7d87171441af601b8a554b3de49fc87b7fd0772"},{"name":"containers","children":[{"name":"container-definition.json","path":"examples/docker-service-with-public-discovery/containers/container-definition.json","sha":"d5beb20e8e729d072992009ac38fe67018ef684a"}]},{"name":"main.tf","path":"examples/docker-service-with-public-discovery/main.tf","sha":"a26bffdf81fad920d74a457bd2060328ebf7c3a3"},{"name":"outputs.tf","path":"examples/docker-service-with-public-discovery/outputs.tf","sha":"ac153ce17150d268fb0567f0ba66cabce6daf63f"},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/docker-service-with-public-discovery/user-data/user-data.sh","sha":"7b474fe788eb9581b91f5f58b0cc09d4201a2013"}]},{"name":"vars.tf","path":"examples/docker-service-with-public-discovery/vars.tf","sha":"a2a3637fd1a2bcdd161d607e1987677c252757ae"}]},{"name":"docker-service-without-elb","children":[{"name":"README.md","path":"examples/docker-service-without-elb/README.md","sha":"178a8376a2225be3c9d760f26c72e46841e0c2b7"},{"name":"containers","children":[{"name":"container-definition.json","path":"examples/docker-service-without-elb/containers/container-definition.json","sha":"ddcd10cc00465f84a8ce9eb7d937f1cc648bfa7b"}]},{"name":"main.tf","path":"examples/docker-service-without-elb/main.tf","sha":"2c28eca2fc89589ce45db1e74de3767d634e49f5"},{"name":"outputs.tf","path":"examples/docker-service-without-elb/outputs.tf","sha":"ca3a10bee0379ce40a82d45806fa72350f5ae641"},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/docker-service-without-elb/user-data/user-data.sh","sha":"5ed91084021a44a3678872771365e574ef7f40c9"}]},{"name":"vars.tf","path":"examples/docker-service-without-elb/vars.tf","sha":"679bab7c39f3d2303c153912b5dcf69c385c16ce"}]},{"name":"docker-vpc-service-with-alb","children":[{"name":"README.md","path":"examples/docker-vpc-service-with-alb/README.md","sha":"98fe3719c813f4920bcd12deed96520468048da7"},{"name":"main.tf","path":"examples/docker-vpc-service-with-alb/main.tf","sha":"527e87494b900615671cf669810fcfeca2cb66ed"},{"name":"outputs.tf","path":"examples/docker-vpc-service-with-alb/outputs.tf","sha":"c5b02eee222895f5c56fcac0e0d42a04fa3cf08f"},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/docker-vpc-service-with-alb/user-data/user-data.sh","sha":"5ed91084021a44a3678872771365e574ef7f40c9"}]},{"name":"vars.tf","path":"examples/docker-vpc-service-with-alb/vars.tf","sha":"c1792194cad2d642aeaa8462dd5f6d0013f9e76c"}]},{"name":"example-docker-image","children":[{"name":"Dockerfile","path":"examples/example-docker-image/Dockerfile","sha":"f2d4b71ade7473254eb2af4bc49f4e0088e4f77b"},{"name":"README.md","path":"examples/example-docker-image/README.md","sha":"272b6c12cad7ba326582bfca11fce195912021c4"},{"name":"server.js","path":"examples/example-docker-image/server.js","sha":"965b6a2342144bac9559d1328c09f64f31fb4501"}]},{"name":"example-ecs-instance-ami","children":[{"name":"README.md","path":"examples/example-ecs-instance-ami/README.md","sha":"0a239a9c1d5aa7e1a889d40650fbed1cb14f8e8a"},{"name":"build.json","path":"examples/example-ecs-instance-ami/build.json","sha":"5eaaca739381f47b427f021fb464894a87c67948"}]},{"name":"example-vpc","children":[{"name":"README.md","path":"examples/example-vpc/README.md","sha":"f938024fd49977302bcb7982a0b7e9049574a78d"},{"name":"main.tf","path":"examples/example-vpc/main.tf","sha":"a32a54c826902f6f49830df86dc4b949708dbaf7"},{"name":"outputs.tf","path":"examples/example-vpc/outputs.tf","sha":"29fe3a59a33e3648c3cdf0afbcc6b7224e1b81ea"},{"name":"vars.tf","path":"examples/example-vpc/vars.tf","sha":"668e867d5bc0938a092cc35a52093d05ede78cfe"}]}]},{"name":"modules","children":[{"name":"ecs-cluster","children":[{"name":"README.md","path":"modules/ecs-cluster/README.md","sha":"1ea5c16d2eff78e210fc1a153d006a71d98e7d08"},{"name":"main.tf","path":"modules/ecs-cluster/main.tf","sha":"74f9ec0adbd7e956a4584063939c38eec9ce103c"},{"name":"outputs.tf","path":"modules/ecs-cluster/outputs.tf","sha":"bce8ee540d2e9dd89045695c225a3b5e48792c3e"},{"name":"roll-out-ecs-cluster-update.py","path":"modules/ecs-cluster/roll-out-ecs-cluster-update.py","sha":"45943e2c81e886d64eb0b437183a52b87466efd2"},{"name":"vars.tf","path":"modules/ecs-cluster/vars.tf","sha":"7990928d867abbde5f456ad58164a93502e17454"}]},{"name":"ecs-daemon-service","children":[{"name":"README.md","path":"modules/ecs-daemon-service/README.md","sha":"93e576a1648fab47ad7b6bb013140f361d19c5ba"},{"name":"main.tf","path":"modules/ecs-daemon-service/main.tf","sha":"4e38ab076c6eb1fa676a9f9635b42eac1346c3d3"},{"name":"outputs.tf","path":"modules/ecs-daemon-service/outputs.tf","sha":"b14be6c2f9498c05be9d3843437940b933b3b669"},{"name":"vars.tf","path":"modules/ecs-daemon-service/vars.tf","sha":"cf42d904913cb3d174e499b74f3e01b54d45a108"}]},{"name":"ecs-deploy-check-binaries","children":[{"name":"README.md","path":"modules/ecs-deploy-check-binaries/README.md","sha":"5f819dfaab1a1fe16f29314a2117cd14fcb4bb33"},{"name":"bin","children":[{"name":"check-ecs-service-deployment","path":"modules/ecs-deploy-check-binaries/bin/check-ecs-service-deployment","sha":"b162ec0c95bd1260995ccc383b89fb1528086d65"},{"name":"check_ecs_service_deployment_env.pex","path":"modules/ecs-deploy-check-binaries/bin/check_ecs_service_deployment_env.pex","sha":"089742e3c1d2b6d38c953adb7f66606858fd4ec1"},{"name":"entrypoint.py","path":"modules/ecs-deploy-check-binaries/bin/entrypoint.py","sha":"09af8e557b93844ce66a028e594b885498eef99c"}]},{"name":"build.sh","path":"modules/ecs-deploy-check-binaries/build.sh","sha":"c4195f1c571a197e2a40b46e8a5896080aa0c260"},{"name":"check_ecs_service_deployment","children":[{"name":"__init__.py","path":"modules/ecs-deploy-check-binaries/check_ecs_service_deployment/__init__.py","sha":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"},{"name":"checker","children":[{"name":"__init__.py","path":"modules/ecs-deploy-check-binaries/check_ecs_service_deployment/checker/__init__.py","sha":"b3604eaedc6d77c18dd31a282af88377b642073d"},{"name":"active_tasks_checker.py","path":"modules/ecs-deploy-check-binaries/check_ecs_service_deployment/checker/active_tasks_checker.py","sha":"5aa07c2ef3265ecdd3396be3eca962dfed893975"},{"name":"base.py","path":"modules/ecs-deploy-check-binaries/check_ecs_service_deployment/checker/base.py","sha":"b43e7a9f8989b2b6ec9c428c02b7129146c03c9e"},{"name":"daemon_service_checker.py","path":"modules/ecs-deploy-check-binaries/check_ecs_service_deployment/checker/daemon_service_checker.py","sha":"2843fa595ebfb6137601051d3c5183727605c6ad"},{"name":"loadbalancer_checker.py","path":"modules/ecs-deploy-check-binaries/check_ecs_service_deployment/checker/loadbalancer_checker.py","sha":"54070f4b438a48ded5be35753fbc7469caff3cc0"}]},{"name":"exceptions.py","path":"modules/ecs-deploy-check-binaries/check_ecs_service_deployment/exceptions.py","sha":"12ef9651649f2c99ac6cba7a54314a8da197a2b3"},{"name":"utils.py","path":"modules/ecs-deploy-check-binaries/check_ecs_service_deployment/utils.py","sha":"d37d04f0265fe0a6a1faa0bad67358d4c21dc2ac"}]},{"name":"dev_requirements.txt","path":"modules/ecs-deploy-check-binaries/dev_requirements.txt","sha":"923be60db2d99bbeefbedf796478539f78712828"},{"name":"requirements.txt","path":"modules/ecs-deploy-check-binaries/requirements.txt","sha":"1b1257ceb0ad6adb051fe8a2c90392bd93d24a29"}]},{"name":"ecs-deploy","children":[{"name":"README.md","path":"modules/ecs-deploy/README.md","sha":"5bfb0c6c4d6197666f9df3a8ef7c0a63f2579171"},{"name":"bin","children":[{"name":"run-ecs-task","path":"modules/ecs-deploy/bin/run-ecs-task","sha":"86161970f9dae0d327ace437a1dfe6dec39ccef5"}]},{"name":"install.sh","path":"modules/ecs-deploy/install.sh","sha":"c322bebba62fd5a63e7bcb73010f9a52da1137f1"}]},{"name":"ecs-fargate","children":[{"name":"README.md","path":"modules/ecs-fargate/README.md","sha":"d3233fc90051979d17b6d4d9654aa003245837c9"}]},{"name":"ecs-scripts","children":[{"name":"README.md","path":"modules/ecs-scripts/README.md","sha":"d1ece4d7573a4e157409ae72075bc5d2a1849812"},{"name":"bin","children":[{"name":"configure-ecs-instance","path":"modules/ecs-scripts/bin/configure-ecs-instance","sha":"8822c5f57e659895599c2b2ee30f722ffe6e24da"}]},{"name":"install.sh","path":"modules/ecs-scripts/install.sh","sha":"927760f5584ad2019b0ff31424ba8853a27aeffc"}]},{"name":"ecs-service-with-alb","children":[{"name":"README.md","path":"modules/ecs-service-with-alb/README.md","sha":"51c9015df45f7eb2470a826a9113463035ea00fb"}]},{"name":"ecs-service-with-discovery","children":[{"name":"README.md","path":"modules/ecs-service-with-discovery/README.md","sha":"40f05c5aeb3245e474f98605753b9051adef3e4c"}]},{"name":"ecs-service","children":[{"name":"README-ECS-Fargate.adoc","path":"modules/ecs-service/README-ECS-Fargate.adoc","sha":"06c828c343a03aaa8fe84a291c8eeb0ce31d1669"},{"name":"README.adoc","path":"modules/ecs-service/README.adoc","sha":"67662d058d09066a4da6823ca90c460e10bb1477"},{"name":"auto_scaling.tf","path":"modules/ecs-service/auto_scaling.tf","sha":"c344260ad32cdc38a284433f90a3c9f500f38db2"},{"name":"core-concepts.md","path":"modules/ecs-service/core-concepts.md","sha":"7743123a8acf9203348b063715ce2ffa5b5686da"},{"name":"deployment_check.tf","path":"modules/ecs-service/deployment_check.tf","sha":"2062aa9be3e08794466c975299dab3febcabf50b"},{"name":"elb.tf","path":"modules/ecs-service/elb.tf","sha":"0a0569f68dd7fae84e357ccc6b56431be8bc3a25"},{"name":"main.tf","path":"modules/ecs-service/main.tf","sha":"7407c75f5964140b3b78faadcf02841883eb16cd"},{"name":"outputs.tf","path":"modules/ecs-service/outputs.tf","sha":"a26219239f25d23969cead060c178c0338147934"},{"name":"service_discovery.tf","path":"modules/ecs-service/service_discovery.tf","sha":"27096ac9b2593fdd4b78dc548ddfb05d0f26c10c"},{"name":"task_definition.tf","path":"modules/ecs-service/task_definition.tf","sha":"f7bfac729a2e3ca1424cd972536cd7bcb4fe356e"},{"name":"vars.tf","path":"modules/ecs-service/vars.tf","sha":"16e3b10d4397fe39e78c56f2c326f6db5080e2e5"}]}]},{"name":"setup.cfg","path":"setup.cfg","sha":"6deafc261704e20369c0983af88042e502ae4880"},{"name":"test","children":[{"name":"README.md","path":"test/README.md","sha":"b830ee03876dc0fc207b0c0fc9a72d83013ec6f1","toggled":true},{"name":"deploy_ecs_task_test.go","path":"test/deploy_ecs_task_test.go","sha":"47e0d76b58ab5a3685f4777c3098bc4735efaaab"},{"name":"docker_daemon_service_test.go","path":"test/docker_daemon_service_test.go","sha":"5f0744dbc3de66ea12282eda437153a339ce3c2c"},{"name":"docker_ec2_service_test.go","path":"test/docker_ec2_service_test.go","sha":"e75b7bad2afbc1c9daddb45c1ba40787319a8c76"},{"name":"docker_fargate_service_alb_deployment_check_fail_by_container_test.go","path":"test/docker_fargate_service_alb_deployment_check_fail_by_container_test.go","sha":"b2e4eef2e3868262d653766927ce2da384a3bb28"},{"name":"docker_fargate_service_nlb_deployment_check_fail_by_container_test.go","path":"test/docker_fargate_service_nlb_deployment_check_fail_by_container_test.go","sha":"e2ee6b72b7400b344dadca3e26a0812a20457f57"},{"name":"docker_fargate_service_with_alb_test.go","path":"test/docker_fargate_service_with_alb_test.go","sha":"a2caf9f5032f3277738a1942cf579153f11a1019"},{"name":"docker_fargate_service_with_efs_volume_test.go","path":"test/docker_fargate_service_with_efs_volume_test.go","sha":"c0f5b4813746155894d2e46e9e2f2859b299d4c3"},{"name":"docker_fargate_service_with_nlb_test.go","path":"test/docker_fargate_service_with_nlb_test.go","sha":"5d131171b14d01898c51e46e232b46b5baf74468"},{"name":"docker_fargate_service_without_lb_deployment_check_fail_by_container_test.go","path":"test/docker_fargate_service_without_lb_deployment_check_fail_by_container_test.go","sha":"79cc5d902515349ecded94ce243ba5389e43dfe3"},{"name":"docker_fargate_service_without_lb_test.go","path":"test/docker_fargate_service_without_lb_test.go","sha":"dd8fcff52d2eed7b22834aa719b7554bda6961ac"},{"name":"docker_fargate_spot_service_with_alb_test.go","path":"test/docker_fargate_spot_service_with_alb_test.go","sha":"6385cf0ac387e00144eebf38cbaaef01aae70fd4"},{"name":"docker_service_failure_testing_utils.go","path":"test/docker_service_failure_testing_utils.go","sha":"69a9c18c777338e1b5a06e8d73f4aa60b5778311"},{"name":"docker_service_utils.go","path":"test/docker_service_utils.go","sha":"23bdf26f43f647511975409b0bf16c96aaa9998d"},{"name":"docker_service_with_alb_and_nlb_test.go","path":"test/docker_service_with_alb_and_nlb_test.go","sha":"70e277c15fbbfa65ac5e61f4dd62e6d4f64229dc"},{"name":"docker_service_with_alb_deployment_check_fail_test.go","path":"test/docker_service_with_alb_deployment_check_fail_test.go","sha":"9191b6561b3f03aff5e3237594bf30815220e763"},{"name":"docker_service_with_alb_test.go","path":"test/docker_service_with_alb_test.go","sha":"634d085812ab6e6d3223e10bd4afd7109c46ae7a"},{"name":"docker_service_with_autoscaling_deployment_check_fail_test.go","path":"test/docker_service_with_autoscaling_deployment_check_fail_test.go","sha":"5fd68e10a0e39e75bca60f54e8de0049463006b1"},{"name":"docker_service_with_autoscaling_test.go","path":"test/docker_service_with_autoscaling_test.go","sha":"1f8235bafea1e161fe16d090ba7a7b920588a43e"},{"name":"docker_service_with_canary_deployment_check_fail_test.go","path":"test/docker_service_with_canary_deployment_check_fail_test.go","sha":"e9510f9b5b9657ae7d84e5be6ecf1fa57f630773"},{"name":"docker_service_with_canary_deployment_test.go","path":"test/docker_service_with_canary_deployment_test.go","sha":"0be33636188c5c2a1b27409d4f7576f2607e8501"},{"name":"docker_service_with_discovery_check_fail_test.go","path":"test/docker_service_with_discovery_check_fail_test.go","sha":"16ed1d879885c6b08389646e6978d4310a03630a"},{"name":"docker_service_with_discovery_test.go","path":"test/docker_service_with_discovery_test.go","sha":"1bb23ee2db08a16e8ec5d8d1159f6701456a8b43"},{"name":"docker_service_with_elb_deployment_check_fail_test.go","path":"test/docker_service_with_elb_deployment_check_fail_test.go","sha":"7511d8951bdd002d75f4fa0b0d1744edbd30f536"},{"name":"docker_service_with_elb_test.go","path":"test/docker_service_with_elb_test.go","sha":"42883f7151820be8925b11b23c35a303c443d7e6"},{"name":"docker_service_without_elb_deployment_check_fail_test.go","path":"test/docker_service_without_elb_deployment_check_fail_test.go","sha":"b60ee57bab6a76516fcddb081ebb53a687a396a7"},{"name":"docker_service_without_elb_test.go","path":"test/docker_service_without_elb_test.go","sha":"9b68c410ac075c3bdbeae908ee58e3e13941062b"},{"name":"docker_vpc_service_with_alb_test.go","path":"test/docker_vpc_service_with_alb_test.go","sha":"704aa7bb81da759322ec60963328861891565eae"},{"name":"ec2_amazon_linux2_test.go","path":"test/ec2_amazon_linux2_test.go","sha":"8d34c658442be08dce0fff2ddf2e2ec4a326cd9c"},{"name":"go.mod","path":"test/go.mod","sha":"bd313e3e25809ab340f3189a9e64a1d5952182e2"},{"name":"go.sum","path":"test/go.sum","sha":"f4b6c7455386255736738a30f71fc211a502d707"},{"name":"script_tests","children":[{"name":"executor.sh","path":"test/script_tests/executor.sh","sha":"dedf71d5d3120275daa4df86b8a91c85b58a66b6"},{"name":"requirements.txt","path":"test/script_tests/requirements.txt","sha":"d1d1278133fea59fee5fc14c2a5db35c99bd6fe1"},{"name":"test_check_ecs_service_deployment.py","path":"test/script_tests/test_check_ecs_service_deployment.py","sha":"daabc761bdaeaf467cbfbca0cb2d91efb3179c4a"},{"name":"tox.ini","path":"test/script_tests/tox.ini","sha":"96464a47dbc3209aac0b6eeb9ddb72daff7cb72e"}]},{"name":"terratest_options.go","path":"test/terratest_options.go","sha":"2e00f972c07fe030149501a4947dfb9b854b5159"},{"name":"test_helpers.go","path":"test/test_helpers.go","sha":"d733b7ec8561340af3840b3e35ee3434673ffd1d"}],"toggled":true}]},"detailsContent":"<h1 class=\"preview__body--title\" id=\"tests\">Tests</h1><div class=\"preview__body--border\"></div><p>This folder contains the tests for the modules in this repo.</p>\n<h2 class=\"preview__body--subtitle\" id=\"running-the-tests-locally\">Running the tests locally</h2>\n<p><strong>Note #1</strong>: Many of these tests create real resources in an AWS account. That means they cost money to run, especially\nif you don't clean up after yourself. Please be considerate of the resources you create and take extra care to clean\neverything up when you're done!</p>\n<p><strong>Note #2</strong>: Never hit <code>CTRL + C</code> or cancel a build once tests are running or the cleanup tasks won't run!</p>\n<p><strong>Note #3</strong>: We set <code>-timeout 45m</code> on all tests not because they necessarily take 45 minutes, but because Go has a\ndefault test timeout of 10 minutes, after which it does a <code>SIGQUIT</code>, preventing the tests from properly cleaning up\nafter themselves. Therefore, we set a timeout of 45 minutes to make sure all tests have enough time to finish and\ncleanup.</p>\n<h4 id=\"prerequisites\">Prerequisites</h4>\n<ul>\n<li>Install the latest version of <a href=\"https://golang.org/\" class=\"preview__body--description--blue\" target=\"_blank\">Go</a>.</li>\n<li>Install <a href=\"https://github.com/golang/dep\" class=\"preview__body--description--blue\" target=\"_blank\">dep</a> for Go dependency management. On OSX, the simplest way to install is\n<code>brew update; brew install dep</code>.</li>\n<li>Install <a href=\"https://www.terraform.io/downloads.html\" class=\"preview__body--description--blue\" target=\"_blank\">Terraform</a>.</li>\n<li>Add your AWS credentials as environment variables: <code>AWS_ACCESS_KEY_ID</code>, <code>AWS_SECRET_ACCESS_KEY</code></li>\n<li>For some of the tests, you also need to set the <code>GITHUB_OAUTH_TOKEN</code> environment variable to a valid GitHub\nauth token with "repo" access. You can generate one here: https://github.com/settings/tokens</li>\n</ul>\n<h4 id=\"setup\">Setup</h4>\n<p>Download Go dependencies using dep:</p>\n<pre><span class=\"hljs-built_in\">cd</span> <span class=\"hljs-built_in\">test</span>\ndep ensure\n</pre>\n<h4 id=\"run-all-the-tests\">Run all the tests</h4>\n<pre><span class=\"hljs-built_in\">cd</span> <span class=\"hljs-built_in\">test</span>\ngo <span class=\"hljs-built_in\">test</span> -v -timeout 45m -parallel 128\n</pre>\n<h4 id=\"run-a-specific-test\">Run a specific test</h4>\n<p>To run a specific test called <code>TestFoo</code>:</p>\n<pre><span class=\"hljs-keyword\">cd</span> <span class=\"hljs-keyword\">test</span>\ngo <span class=\"hljs-keyword\">test</span> -v -timeout 45m -parallel 128 -<span class=\"hljs-keyword\">run</span> TestFoo\n</pre>\n<h2 class=\"preview__body--subtitle\" id=\"todo\">TODO</h2>\n<p>Add tests for the following:</p>\n<ol>\n<li>Using the ecs-service module without an ELB</li>\n<li>Deploying a new version of an ECS Task</li>\n<li>Different settings for the <code>deployment_maximum_percent</code> and <code>deployment_minimum_healthy_percent</code> variables</li>\n<li>Deploying multiple apps in the same cluster</li>\n<li>Deploying multiple services with the same ELB</li>\n</ol>\n","repoName":"module-ecs","repoRef":"v0.23.0","serviceDescriptor":{"serviceName":"EC2 Container Service (ECS) Cluster","serviceRepoName":"module-ecs","serviceRepoOrg":"gruntwork-io","cloudProviders":["aws"],"description":"Deploy a cluster of servers for use with EC2 Container Service (ECS), Amazon's container orchestration system","imageUrl":"ecs.png","licenseType":"subscriber","technologies":["Terraform","Python","Bash"],"compliance":[],"tags":[""]},"serviceCategoryName":"Docker orchestration","fileName":"README.md","filePath":"/test","title":"Repo Browser: EC2 Container Service (ECS) Cluster","description":"Browse the repos in the Gruntwork Infrastructure as Code Library."}