This Terraform Module can be used deploy a typical dockerized web service on Kubernetes. Under the hood this module uses
the k8s-service Helm Chart to
deploy a Kubernetes Deployment for a given
Docker container with a Service resource.
Optionally, this module can also provision an Ingress
resource, which can be used to front the service with
an ALB and corresponding Route 53 Domain records to allow external access to the deployed service.
How do you use this module?
See the root README for instructions on using Terraform modules.
See variables.tf for all the variables you can set on this module.
What is Helm?
Helm is a package manager for Kubernetes that can be used to install various services on to the
EKS cluster. You use helm through the helm CLI, which uses the Kubernetes API to deploy the resources. helm tracks
its releases in Secret resources on the cluster, which it uses to track all the charts that have been deployed. This
allows for various rollout functionality, such as tracking failed deployments for rolling backwards to a previous
release or forwards to new releases.
Deployment resources are Kubernetes controllers that ensure a desired state of Pods is kept in the cluster. If the
state of Pods on a cluster deviates from the desired state, the controller will automatically make the necessary
changes to match the desired state. For example, if the desired state is to keep 3 Pods running, and one of the Pods
fails, the controller will automatically replace it with a new Pod.
Service resources define stable endpoints for your Pods in a Deployment. In Kubernetes, Pods are considered
ephemeral resources, and they are designed to come and go at any given point in time. This means that you have a
constantly changing environment of Pods, which makes it difficult to have a stable address to access your Pods.
Services provide a consistent endpoint that can be used to access a group of Pods. The Service resource will
automatically load balance your requests across all the Pods that match the given criteria, even if the number of
Pods backing the Service changes.
In addition to having a consistent IP address, Services also have an internal DNS hostname that can be used to address
it. All Services within a Kubernetes cluster can be reached under the domain name pattern
{SVCNAME}.{NAMESPACE}.svc.cluster.local. This provides an automated way to perform service discovery for your
applications.
Ingress resources configure a "Layer 7" load balancer for HTTP web applications. Ingress resources allow you to
expose internal Services to be accessible from outside the cluster, depending on the flavor of Ingress controller
you choose to deploy to your cluster. Ingress controllers take Ingress resources and map them to an actual load
balancer.
The eks-core-services module can be used to deploy the AWS ALB Ingress Controller to your EKS
cluster, allowing you to use Ingress resources to create ALBs that automatically map to the Service endpoint
deployed using this module.
Additionally, if you provide a hostname for the service that has a corresponding Route 53 Hosted Zone, the
external-dns app (also deployed using the eks-core-services module) will updated the Hosted Zone with a record that
maps the domain hostname to the newly provisioned ALB. This allows you to provide a consistent endpoint that is
accessible from outside the Kubernetes cluster.
Core concepts
For more information, check out the following documentation:
{"treedata":{"name":"root","toggled":true,"children":[{"name":".gitignore","path":".gitignore","sha":"0305003919b74d47dc7190b2922c4d980f4cd087"},{"name":"CODEOWNERS","path":"CODEOWNERS","sha":"00570abefb91e715366015f8b5acf32631336d52"},{"name":"README.md","path":"README.md","sha":"b480f00ef3db4af4290bf6961237722c8f86de7b"},{"name":"data-stores","children":[{"name":"ecr-repos","children":[{"name":"README.md","path":"data-stores/ecr-repos/README.md","sha":"a29b169e8089f21d64b7ec3a51d3a9896de8597e"},{"name":"main.tf","path":"data-stores/ecr-repos/main.tf","sha":"9276086d0b27e7bd32aa504215eef9d2f2d90c00"},{"name":"outputs.tf","path":"data-stores/ecr-repos/outputs.tf","sha":"d2df5d7422dee1ded8b6c3e4160bbd17b86557fc"},{"name":"variables.tf","path":"data-stores/ecr-repos/variables.tf","sha":"945ea7ccbefd06e5fedf7d2421a140b201eb97a3"}]},{"name":"elk-multi-cluster","children":[{"name":"README.md","path":"data-stores/elk-multi-cluster/README.md","sha":"bf6795b78109065846144c529a0b70c79a8ab2b2"},{"name":"dependencies.tf","path":"data-stores/elk-multi-cluster/dependencies.tf","sha":"fb1c51a754b121601b851050afe9c4f7103c08d4"},{"name":"main.tf","path":"data-stores/elk-multi-cluster/main.tf","sha":"8fa80d39bdefc7331f161920d271b8f404586e82"},{"name":"outputs.tf","path":"data-stores/elk-multi-cluster/outputs.tf","sha":"c9b8dd4df51e4f7fcef957e1b5342d126ec683ec"},{"name":"packer","children":[{"name":"common","children":[{"name":"install-gruntwork-common.sh","path":"data-stores/elk-multi-cluster/packer/common/install-gruntwork-common.sh","sha":"6633f5e9d0bc47a211d08c92bfc6b35a33057c11"}]},{"name":"elastalert","children":[{"name":"aws","children":[{"name":"elastalert-config","children":[{"name":"config.yml","path":"data-stores/elk-multi-cluster/packer/elastalert/aws/elastalert-config/config.yml","sha":"fcbff49f1ec5e7b11f43fe4987fd0d9fb9641937"}]}]},{"name":"elastalert-rules","children":[{"name":"example_change.yml","path":"data-stores/elk-multi-cluster/packer/elastalert/elastalert-rules/example_change.yml","sha":"4020886483786ff9a8847159b5750014c5d2b0fb"}]},{"name":"elastalert.json","path":"data-stores/elk-multi-cluster/packer/elastalert/elastalert.json","sha":"bb2785c6ee006852fcf78b76f489e216b731adc5"}]},{"name":"elasticsearch","children":[{"name":"aws","children":[{"name":"config","children":[{"name":"elasticsearch-data.yml","path":"data-stores/elk-multi-cluster/packer/elasticsearch/aws/config/elasticsearch-data.yml","sha":"fd305dacdb3fbe4d10a6a84f0858858ea12adafc"},{"name":"elasticsearch-master.yml","path":"data-stores/elk-multi-cluster/packer/elasticsearch/aws/config/elasticsearch-master.yml","sha":"4d5629d488a6d61fb02a7240def800f3d5dab2d6"},{"name":"jvm.options","path":"data-stores/elk-multi-cluster/packer/elasticsearch/aws/config/jvm.options","sha":"d4babea93d615c1316ea42f4ed602d16f56434c1"}]}]},{"name":"elasticsearch-data.json","path":"data-stores/elk-multi-cluster/packer/elasticsearch/elasticsearch-data.json","sha":"d8c9d735f537398337f6acc338f58e74b5be549a"},{"name":"elasticsearch-master.json","path":"data-stores/elk-multi-cluster/packer/elasticsearch/elasticsearch-master.json","sha":"19b9874df09b496d34d9243541444310e150ce26"},{"name":"plugins","children":[{"name":"readonlyrest-1.22.1_es6.8.12.zip","path":"data-stores/elk-multi-cluster/packer/elasticsearch/plugins/readonlyrest-1.22.1_es6.8.12.zip","sha":"93bdf77044e9ac16fb6eb8e091a1700419425ea9"}]},{"name":"readonlyrest-config","children":[{"name":"readonlyrest.yml","path":"data-stores/elk-multi-cluster/packer/elasticsearch/readonlyrest-config/readonlyrest.yml","sha":"b56a9dc5f63bf416a5aeb3375abc60540d4ccf2d"}]}]},{"name":"kibana","children":[{"name":"config","children":[{"name":"kibana.yml","path":"data-stores/elk-multi-cluster/packer/kibana/config/kibana.yml","sha":"d214caa886dde01ba784ac285536a0bc8c8e35de"}]},{"name":"kibana.json","path":"data-stores/elk-multi-cluster/packer/kibana/kibana.json","sha":"9226f29d5fba42fd88389e5db56dedf98e8f89d6"}]},{"name":"logstash","children":[{"name":"config","children":[{"name":"jvm.options","path":"data-stores/elk-multi-cluster/packer/logstash/config/jvm.options","sha":"b9288d7da3602b05d7fe034d21e9900db7e0b686"},{"name":"logstash.yml","path":"data-stores/elk-multi-cluster/packer/logstash/config/logstash.yml","sha":"b025595688db51b9557a9552e733a145ed5e4784"},{"name":"pipeline.conf","path":"data-stores/elk-multi-cluster/packer/logstash/config/pipeline.conf","sha":"ca863406c96ad86cc7ff3a0fb59a081be56f340f"}]},{"name":"logstash.json","path":"data-stores/elk-multi-cluster/packer/logstash/logstash.json","sha":"008a88beff9311e669d4aaab1789beb2a42c0b2b"}]}]},{"name":"user-data","children":[{"name":"elastalert","children":[{"name":"user-data.sh","path":"data-stores/elk-multi-cluster/user-data/elastalert/user-data.sh","sha":"65b896391c4ee9f7556a6b925c8aaea32ae1f15a"}]},{"name":"elasticsearch","children":[{"name":"data","children":[{"name":"user-data.sh","path":"data-stores/elk-multi-cluster/user-data/elasticsearch/data/user-data.sh","sha":"7bad91d325d10c640506ac67b36785081c80970f"}]},{"name":"master","children":[{"name":"user-data.sh","path":"data-stores/elk-multi-cluster/user-data/elasticsearch/master/user-data.sh","sha":"82a9f5dfe006d0b1b9dc4832f4e1427e2678cf8a"}]}]},{"name":"kibana","children":[{"name":"user-data.sh","path":"data-stores/elk-multi-cluster/user-data/kibana/user-data.sh","sha":"c0e6bd43460a31a8b1cc0142aed9e50101a88d76"}]},{"name":"logstash","children":[{"name":"user-data.sh","path":"data-stores/elk-multi-cluster/user-data/logstash/user-data.sh","sha":"74efffd11a51173c4fa873879432d481ef8caeb8"}]}]},{"name":"variables.tf","path":"data-stores/elk-multi-cluster/variables.tf","sha":"22d8f7765bf5fd7f50e8644c6e141ea67ab2be30"}]},{"name":"elk-single-cluster","children":[{"name":"README.md","path":"data-stores/elk-single-cluster/README.md","sha":"33c5a730fb8ae737852449bd8d2c12a846fbac43"},{"name":"dependencies.tf","path":"data-stores/elk-single-cluster/dependencies.tf","sha":"7030786a7ebb997e8b29430e98723f75658b3542"},{"name":"main.tf","path":"data-stores/elk-single-cluster/main.tf","sha":"67f5ac402afd339638c2075a91518c1eef52accb"},{"name":"outputs.tf","path":"data-stores/elk-single-cluster/outputs.tf","sha":"05fcb4655a7a384c4f81639a76a9077dab49ba1d"},{"name":"packer","children":[{"name":"all-in-one.json","path":"data-stores/elk-single-cluster/packer/all-in-one.json","sha":"e7bf73acdf2ef4700b131f7d193c9d6dd0a9fe50"},{"name":"elasticsearch","children":[{"name":"aws","children":[{"name":"config","children":[{"name":"elasticsearch.yml","path":"data-stores/elk-single-cluster/packer/elasticsearch/aws/config/elasticsearch.yml","sha":"edcc238fbb17b1f4bebf67a1229cb6cb67591963"},{"name":"jvm.options","path":"data-stores/elk-single-cluster/packer/elasticsearch/aws/config/jvm.options","sha":"28dcf519ee339aba5dd15059c1acc4b97846d6ce"}]}]}]},{"name":"kibana","children":[{"name":"config","children":[{"name":"kibana.yml","path":"data-stores/elk-single-cluster/packer/kibana/config/kibana.yml","sha":"2379dcfb60b6dec75d96f0f44df03231ac39e907"}]}]},{"name":"logstash","children":[{"name":"config","children":[{"name":"jvm.options","path":"data-stores/elk-single-cluster/packer/logstash/config/jvm.options","sha":"45b5d89ceb56c596ad96431207b322728eea183e"},{"name":"logstash.yml","path":"data-stores/elk-single-cluster/packer/logstash/config/logstash.yml","sha":"b025595688db51b9557a9552e733a145ed5e4784"},{"name":"pipeline.conf","path":"data-stores/elk-single-cluster/packer/logstash/config/pipeline.conf","sha":"efe8c2f4decca39ede9d0855529a7871067af233"}]}]}]},{"name":"user-data","children":[{"name":"user-data.sh","path":"data-stores/elk-single-cluster/user-data/user-data.sh","sha":"5241c7febc4eb714af02b405528ba5686efbdb47"}]},{"name":"variables.tf","path":"data-stores/elk-single-cluster/variables.tf","sha":"3e2cf87014cab468dce63ec3dad133fa9298db4c"}]},{"name":"kafka","children":[{"name":"README.md","path":"data-stores/kafka/README.md","sha":"33b5d8ca15dd8ef6e098c2f1f049684faa4037d5"},{"name":"main.tf","path":"data-stores/kafka/main.tf","sha":"eb0c14cf61c0b619c7e1cdc5e34508edbbd76ad8"},{"name":"outputs.tf","path":"data-stores/kafka/outputs.tf","sha":"5e51e650586e46c5e7a9cda5baefe95e0d5e6148"},{"name":"packer","children":[{"name":"config","children":[{"name":"kafka","children":[{"name":"kafka.properties","path":"data-stores/kafka/packer/config/kafka/kafka.properties","sha":"9475458db43bb335995a061dd91866b23a460a73"}]},{"name":"log4j","children":[{"name":"log4j.properties","path":"data-stores/kafka/packer/config/log4j/log4j.properties","sha":"394c539d46d5922b33ba1e8b3a50db2fbed7e6ef"}]}]},{"name":"configure-kafka-server.sh","path":"data-stores/kafka/packer/configure-kafka-server.sh","sha":"b4a1ca65e0832f2663b63bafcea840c8af2fd778"},{"name":"kafka.json","path":"data-stores/kafka/packer/kafka.json","sha":"6866a6afe278bd534194450afe21799d81fe72b0"}]},{"name":"user-data","children":[{"name":"user-data.sh","path":"data-stores/kafka/user-data/user-data.sh","sha":"fd59f57aea9b1ec8b4ab069a2a6e2aac065645c0"}]},{"name":"variables.tf","path":"data-stores/kafka/variables.tf","sha":"d8de2f5f3eb78ebf0ea1a0a0b31100de3fb955a5"}]},{"name":"rds","children":[{"name":"README.md","path":"data-stores/rds/README.md","sha":"8e5dec7e1b17bbd2523603a9dcc5383645d6a7d2"},{"name":"main.tf","path":"data-stores/rds/main.tf","sha":"2fd6c2d8f296bfefcbcffd0981f9778430cc5ec2"},{"name":"migration_guides","children":[{"name":"upgrading_from_0_9_to_0_15.md","path":"data-stores/rds/migration_guides/upgrading_from_0_9_to_0_15.md","sha":"3b99635000fa46639e206e7d419e2d612cad7b4f"}]},{"name":"outputs.tf","path":"data-stores/rds/outputs.tf","sha":"74cf8794f63692e80dffa6ee4eb9aaabec1bd0c6"},{"name":"variables.tf","path":"data-stores/rds/variables.tf","sha":"f68c5a65178aa0b82fd8f321583c9e58c3e96da8"}]},{"name":"redis","children":[{"name":"README.md","path":"data-stores/redis/README.md","sha":"d3f527827a60462ee5e03470b420cdbbdd79fd26"},{"name":"main.tf","path":"data-stores/redis/main.tf","sha":"3ae75e41c13784c264299a6ba0f569235c93667b"},{"name":"migration_guides","children":[{"name":"upgrading_from_0_6_to_0_9.md","path":"data-stores/redis/migration_guides/upgrading_from_0_6_to_0_9.md","sha":"801c6bdf6d1000ec9d0735c3e45902cbcbc27db9"}]},{"name":"outputs.tf","path":"data-stores/redis/outputs.tf","sha":"6ea896c8c60bfa65e689cd4415f9a11f63c1a0e6"},{"name":"variables.tf","path":"data-stores/redis/variables.tf","sha":"5263955e18b4306992810460655215dd45deb3b9"}]},{"name":"zookeeper","children":[{"name":"README.md","path":"data-stores/zookeeper/README.md","sha":"713e1003401b9f1bdb7602b2b478f70e863632d9"},{"name":"main.tf","path":"data-stores/zookeeper/main.tf","sha":"e3f2a14678a766090aff834f421c4e4d8ae65854"},{"name":"outputs.tf","path":"data-stores/zookeeper/outputs.tf","sha":"434ee522bb0cf3429b058fae4d7d704d8e96843c"},{"name":"packer","children":[{"name":"configure-zookeeper-server.sh","path":"data-stores/zookeeper/packer/configure-zookeeper-server.sh","sha":"389efcee08732ae8ba80a313d3428cb02772db2d"},{"name":"zookeeper.json","path":"data-stores/zookeeper/packer/zookeeper.json","sha":"55f25ab889b9f495ec1dc46b4f461939b713c2cb"}]},{"name":"user-data","children":[{"name":"user-data.sh","path":"data-stores/zookeeper/user-data/user-data.sh","sha":"b0052c6174aff100600ade290bca39d3f3c4f346"}]},{"name":"variables.tf","path":"data-stores/zookeeper/variables.tf","sha":"fbd421a0b9e50c30e92790c25b7b3757f2bb1fe7"}]}]},{"name":"lambda","children":[{"name":"long-running-scheduled","children":[{"name":"README.md","path":"lambda/long-running-scheduled/README.md","sha":"2e278a1cc30d16dc968cb803f0f9bff2471338ad"},{"name":"main.tf","path":"lambda/long-running-scheduled/main.tf","sha":"f2bd8e7b74b62ae5a78070a615a579eecc1dfd03"},{"name":"outputs.tf","path":"lambda/long-running-scheduled/outputs.tf","sha":"fd9cf755adf2751877e57f671af1d78ae36ff598"},{"name":"src","children":[{"name":"Dockerfile","path":"lambda/long-running-scheduled/src/Dockerfile","sha":"80ada8ba5fab0cdcc199ee5ad68f1b979fbaea3b"},{"name":"build.sh","path":"lambda/long-running-scheduled/src/build.sh","sha":"047853e17513d150331429e00b404b853c82791c"},{"name":"docker-compose.yml","path":"lambda/long-running-scheduled/src/docker-compose.yml","sha":"ba9b2e7592f18c57d8ffc53e869a709a443ba3f1"},{"name":"python","children":[{"name":"__init.py__","path":"lambda/long-running-scheduled/src/python/__init.py__","sha":"1b58820b01935d58928ad905427bd838c5e80123"},{"name":"index.py","path":"lambda/long-running-scheduled/src/python/index.py","sha":"c8dec52d08f59cca5ad41d2824d5f1619182034d"},{"name":"test_harness.py","path":"lambda/long-running-scheduled/src/python/test_harness.py","sha":"08d1176b32462c4b4310ab42b373844d27e8ede6"}]},{"name":"requirements.txt","path":"lambda/long-running-scheduled/src/requirements.txt","sha":"9603af58cedcab8ad84df65d77bd8aba13ed6023"}]},{"name":"variables.tf","path":"lambda/long-running-scheduled/variables.tf","sha":"630063620bc87187096bc76bd246c19099ab734f"}]},{"name":"migration_guides","children":[{"name":"upgrading_from_0_6_to_0_8.md","path":"lambda/migration_guides/upgrading_from_0_6_to_0_8.md","sha":"c4a2bae415086be3cb96fd8fc634a613c3ff07bf"}]},{"name":"s3-image-processing","children":[{"name":"README.md","path":"lambda/s3-image-processing/README.md","sha":"99b4746515367265c53145c506f30092312710bd"},{"name":"images","children":[{"name":"gruntwork-logo.png","path":"lambda/s3-image-processing/images/gruntwork-logo.png","sha":"a351cbef55bb12a9aa2652469416a388e9e276de"}]},{"name":"main.tf","path":"lambda/s3-image-processing/main.tf","sha":"c1d6fa3ab45b1c8474be620928638c97e4f5a655"},{"name":"outputs.tf","path":"lambda/s3-image-processing/outputs.tf","sha":"729892970d1ffc9122cef114133614945b9c7853"},{"name":"python","children":[{"name":"index.py","path":"lambda/s3-image-processing/python/index.py","sha":"cebd7038398041914de1147ae64798f12fcdd9cd"},{"name":"test_harness.py","path":"lambda/s3-image-processing/python/test_harness.py","sha":"723f97fdacc7155bac0a3d9e12715a7bd6ba6c41"}]},{"name":"variables.tf","path":"lambda/s3-image-processing/variables.tf","sha":"3db627440a21d62f90ab6f8b5799e3ace26f2178"}]}]},{"name":"mgmt","children":[{"name":"cloudwatch-dashboard","children":[{"name":"README.md","path":"mgmt/cloudwatch-dashboard/README.md","sha":"01b174d088bc2cf9efac66f9ed837edfc34cfc37"},{"name":"main.tf","path":"mgmt/cloudwatch-dashboard/main.tf","sha":"9d3d53694b0a6fd091352adce3f9bc97379fa10a"},{"name":"outputs.tf","path":"mgmt/cloudwatch-dashboard/outputs.tf","sha":"678b236f6a8f50e5bb4790a3061b1d1937a5e3b0"},{"name":"variables.tf","path":"mgmt/cloudwatch-dashboard/variables.tf","sha":"99342abb2131b4fa964b079f1b81046ebed14574"}]},{"name":"jenkins","children":[{"name":"README.md","path":"mgmt/jenkins/README.md","sha":"a30edb85c085606e10e1d197824bc6a693ef66e9"},{"name":"main.tf","path":"mgmt/jenkins/main.tf","sha":"a7f76e6401114533a9bf123a4a80df8c34ab4f67"},{"name":"migration_guides","children":[{"name":"upgrading_from_0_19_to_0_28.md","path":"mgmt/jenkins/migration_guides/upgrading_from_0_19_to_0_28.md","sha":"4c7d23a43245af2321437489aa89b0da6d541ca4"}]},{"name":"outputs.tf","path":"mgmt/jenkins/outputs.tf","sha":"d4a839b7b6147ec251064253a4e172d25ff17c01"},{"name":"packer","children":[{"name":"install-build-dependencies.sh","path":"mgmt/jenkins/packer/install-build-dependencies.sh","sha":"2a6a541b6e0531d788bd245fcf75d37e9e254713"},{"name":"install-gruntwork-modules.sh","path":"mgmt/jenkins/packer/install-gruntwork-modules.sh","sha":"ace269f5084e7e7c55728a21609e47b47a8f2a2e"},{"name":"jenkins-ubuntu.json","path":"mgmt/jenkins/packer/jenkins-ubuntu.json","sha":"4e1a83610f65fb1a9f18012c2950b229a9420194"}]},{"name":"user-data","children":[{"name":"user-data.sh","path":"mgmt/jenkins/user-data/user-data.sh","sha":"c7ddc282cf80f95b7cc2ad5fb24638018d365b8a"}]},{"name":"variables.tf","path":"mgmt/jenkins/variables.tf","sha":"b784510ab2c9085635fbc80da8e311747ebbe805"}]},{"name":"openvpn-server","children":[{"name":"README.md","path":"mgmt/openvpn-server/README.md","sha":"6c7af77ba3b5c64045b0893c96901a7d205515c2"},{"name":"main.tf","path":"mgmt/openvpn-server/main.tf","sha":"e85ae7a9997a720faf79abe1f4eed64b59c067cd"},{"name":"migration_guides","children":[{"name":"upgrading_from_0_9_to_0_11.md","path":"mgmt/openvpn-server/migration_guides/upgrading_from_0_9_to_0_11.md","sha":"3e3cd2d34fa1deb43a32fb46acb848db882bdeb0"}]},{"name":"outputs.tf","path":"mgmt/openvpn-server/outputs.tf","sha":"4ea6665b79ac952f79d155a4f8362f3ab298cf7b"},{"name":"packer","children":[{"name":"openvpn-server.json","path":"mgmt/openvpn-server/packer/openvpn-server.json","sha":"2c96dfb6959a9b12d6816ca585d5947d54e552f9"}]},{"name":"user-data","children":[{"name":"user-data.sh","path":"mgmt/openvpn-server/user-data/user-data.sh","sha":"a2e1cc7ac838ff595a14010870b325e4f0307902"}]},{"name":"variables.tf","path":"mgmt/openvpn-server/variables.tf","sha":"9b67f16a0484da48b44e71d8797de271424199a7"}]}]},{"name":"networking","children":[{"name":"alb","children":[{"name":"README.md","path":"networking/alb/README.md","sha":"7ce9edd69507b23b3f7d67dc66cd2f657e4cbb2e"},{"name":"main.tf","path":"networking/alb/main.tf","sha":"a48780c55e72cb3f7eb799bc2838c369a3906067"},{"name":"migration_guides","children":[{"name":"migrate_to_0_21.sh","path":"networking/alb/migration_guides/migrate_to_0_21.sh","sha":"82b43d9595a46798d3723f301eb0e10d38034206"},{"name":"upgrading_from_0_20_to_0_21.md","path":"networking/alb/migration_guides/upgrading_from_0_20_to_0_21.md","sha":"2a48aea8593371618f9c52068ae6299ac84828d5"}]},{"name":"outputs.tf","path":"networking/alb/outputs.tf","sha":"8527071d187bc4a86c38b90678552d97c8e6e3db"},{"name":"variables.tf","path":"networking/alb/variables.tf","sha":"ab32623f5a9a196b9671d5c411554636bf82947f"}]},{"name":"route53-private","children":[{"name":"README.md","path":"networking/route53-private/README.md","sha":"e70e45b4f3432f1e7aad9a8e18ee84648c38a8dc"},{"name":"main.tf","path":"networking/route53-private/main.tf","sha":"6f12106f560532cdd581fc1b9a5c27ddbf803f5c"},{"name":"outputs.tf","path":"networking/route53-private/outputs.tf","sha":"25351606ddab8bf61530c7aac806f7ddc73e58d5"},{"name":"variables.tf","path":"networking/route53-private/variables.tf","sha":"ee47a21182b010870219711f9eee219ff2603030"}]},{"name":"route53-public","children":[{"name":"README.md","path":"networking/route53-public/README.md","sha":"555c3df733d75b195b63210d36cecd9ef0b643aa"},{"name":"main.tf","path":"networking/route53-public/main.tf","sha":"fe68929469edeb9ba6a54c2949b170f3d75dd78d"},{"name":"outputs.tf","path":"networking/route53-public/outputs.tf","sha":"e2842a21a5926751a4a5f413218dade1741bac62"},{"name":"variables.tf","path":"networking/route53-public/variables.tf","sha":"80e3d01676dfda584ca22cb8caf7091de736c194"}]},{"name":"sns-topics","children":[{"name":"README.md","path":"networking/sns-topics/README.md","sha":"45b6a34c530d2d6172e33e0dfef9d5336e602e95"},{"name":"main.tf","path":"networking/sns-topics/main.tf","sha":"a84f7628f610605ae0522fc8803750273ef9c164"},{"name":"outputs.tf","path":"networking/sns-topics/outputs.tf","sha":"112201a455a96a0e139460c0b12c317f9ec80a93"},{"name":"variables.tf","path":"networking/sns-topics/variables.tf","sha":"e40eb917760b0e53e07d90e4159026597eb73c11"}]},{"name":"vpc-app","children":[{"name":"README.md","path":"networking/vpc-app/README.md","sha":"0ff22cc4507aa7d316b35929dc43ac73a3604498"},{"name":"main.tf","path":"networking/vpc-app/main.tf","sha":"e1a85deed083e14aa0a1fd2a073a82be5e89ec33"},{"name":"outputs.tf","path":"networking/vpc-app/outputs.tf","sha":"ee651e6f8cdeb04c99b73a620f50463dbece065d"},{"name":"variables.tf","path":"networking/vpc-app/variables.tf","sha":"ffd0807b67eb70cc57583685efd9768f3c906da0"}]},{"name":"vpc-mgmt","children":[{"name":"README.md","path":"networking/vpc-mgmt/README.md","sha":"c31c1095b46675658c2d7f4531e6dedc3882bcab"},{"name":"main.tf","path":"networking/vpc-mgmt/main.tf","sha":"0502961be2abf0625709a67f420b1f64a3e8536f"},{"name":"outputs.tf","path":"networking/vpc-mgmt/outputs.tf","sha":"7238920811a8c43ea28a37c4ea9964d81ca88ef6"},{"name":"variables.tf","path":"networking/vpc-mgmt/variables.tf","sha":"1f11eb7ff2c6f2763fc2a923413696841be69e27"}]}]},{"name":"security","children":[{"name":"cloudtrail","children":[{"name":"README.md","path":"security/cloudtrail/README.md","sha":"ad30521e5e2215354b0dbde3a0e12ee70768e40f"},{"name":"main.tf","path":"security/cloudtrail/main.tf","sha":"c419fb1482b87887ad95174ee8320216a02b366c"},{"name":"migration_guides","children":[{"name":"migrate_to_0_44.sh","path":"security/cloudtrail/migration_guides/migrate_to_0_44.sh","sha":"f3279f01a376eee0f49a17a4211557ef75050f51"},{"name":"upgrading_from_0_22_to_0_36.md","path":"security/cloudtrail/migration_guides/upgrading_from_0_22_to_0_36.md","sha":"8576a4bce05699cda9a1daf592cd006595db297e"},{"name":"upgrading_from_0_36_to_0_44.md","path":"security/cloudtrail/migration_guides/upgrading_from_0_36_to_0_44.md","sha":"d6f99c1481d7f8c99a633f455f18c62640afcdc6"}]},{"name":"outputs.tf","path":"security/cloudtrail/outputs.tf","sha":"186c7cc76b1ef6e4d57be393612d0e87415798b1"},{"name":"variables.tf","path":"security/cloudtrail/variables.tf","sha":"316d253f1fc4b976cb67826391013e9363d3bc52"}]},{"name":"iam-cross-account","children":[{"name":"README.md","path":"security/iam-cross-account/README.md","sha":"ee7ad286149228b4347441179e9eacc32c04d153"},{"name":"main.tf","path":"security/iam-cross-account/main.tf","sha":"364ea3df669526f57cce5309da7ef793ca8c8054"},{"name":"outputs.tf","path":"security/iam-cross-account/outputs.tf","sha":"b81646dffcd576846632282abe0dbe81d5024bc1"},{"name":"variables.tf","path":"security/iam-cross-account/variables.tf","sha":"159f00f2582a917e36d9bc69d2f00efe81bc64d2"}]},{"name":"iam-groups","children":[{"name":"README.md","path":"security/iam-groups/README.md","sha":"cb5edf571445e8e707a047252029a17d28d3dcc0"},{"name":"main.tf","path":"security/iam-groups/main.tf","sha":"affc99db57fe3e78e7c741e1d194363ffb6f1d80"},{"name":"migration_guides","children":[{"name":"upgrading_from_0_22_to_0_36.md","path":"security/iam-groups/migration_guides/upgrading_from_0_22_to_0_36.md","sha":"2fd92f8e0165798cf6da6467da626bc9549703f2"}]},{"name":"outputs.tf","path":"security/iam-groups/outputs.tf","sha":"20f4b6ff4ba5d79b144599744dbe926c1f8c05ac"},{"name":"variables.tf","path":"security/iam-groups/variables.tf","sha":"fbdc69cdadedbdedf9a339386a37d09b053efad5"}]},{"name":"iam-user-password-policy","children":[{"name":"README.md","path":"security/iam-user-password-policy/README.md","sha":"483e28bbca8394ed7199fc097047d9f5c3106149"},{"name":"main.tf","path":"security/iam-user-password-policy/main.tf","sha":"932f1d6bb41e90191471b22e3bd4c40dfadda0e9"},{"name":"variables.tf","path":"security/iam-user-password-policy/variables.tf","sha":"cd98edfd25e4455938826e53dbaf36f5d18e6f3e"}]},{"name":"kms-master-key","children":[{"name":"README.md","path":"security/kms-master-key/README.md","sha":"274ac1f218b9f856033edec88bcab71e72dcd44c"},{"name":"main.tf","path":"security/kms-master-key/main.tf","sha":"dda72651f9c4d05428a3131453ac3857309ceae0"},{"name":"migration_guides","children":[{"name":"upgrading_from_0_22_to_0_36.md","path":"security/kms-master-key/migration_guides/upgrading_from_0_22_to_0_36.md","sha":"ae2b99a24e7d29c9191d24d4c2ef091db3a5dd2a"}]},{"name":"outputs.tf","path":"security/kms-master-key/outputs.tf","sha":"7fae279fc0faa2beb82cb70f2a4b916fb0a5e674"},{"name":"variables.tf","path":"security/kms-master-key/variables.tf","sha":"291391fa2756a8e91b92f2c8a5a4aca1781d522c"}]}]},{"name":"service-templates","children":[{"name":"README.md","path":"service-templates/README.md","sha":"c3cad722c9a867c1b527e2e97d0c805ae2ca54a9"},{"name":"asg-service","children":[{"name":"outputs","children":[{"name":"Jenkinsfile.ejs","path":"service-templates/asg-service/outputs/Jenkinsfile.ejs","sha":"e2b66907ee736231b2b554fbdad58a73ea9bda82"},{"name":"config.xml.ejs","path":"service-templates/asg-service/outputs/config.xml.ejs","sha":"d1830014d0f0687679a336e1fb9ab5d32d39124f"},{"name":"deploy.sh.ejs","path":"service-templates/asg-service/outputs/deploy.sh.ejs","sha":"77a410d2e8f0abac7cd50060f6c61a51db9b139a"},{"name":"terragrunt.hcl.ejs","path":"service-templates/asg-service/outputs/terragrunt.hcl.ejs","sha":"835bd5f7e0b11e1919978022e91d458f0373fc22"}]},{"name":"service-template.yml","path":"service-templates/asg-service/service-template.yml","sha":"bebae358c4ecdba6c9c4fe8c70283c606405d83d"}]},{"name":"beanstalk-service","children":[{"name":"outputs","children":[{"name":"Jenkinsfile.ejs","path":"service-templates/beanstalk-service/outputs/Jenkinsfile.ejs","sha":"472d42ba306d00c280c256f6bfd5098e923a9ad0"},{"name":"config.xml.ejs","path":"service-templates/beanstalk-service/outputs/config.xml.ejs","sha":"d1830014d0f0687679a336e1fb9ab5d32d39124f"},{"name":"deploy.sh.ejs","path":"service-templates/beanstalk-service/outputs/deploy.sh.ejs","sha":"9b86b31d029ea7a2a1a9f32a71ad9a4516aefd42"},{"name":"terragrunt.hcl.ejs","path":"service-templates/beanstalk-service/outputs/terragrunt.hcl.ejs","sha":"b352fa43a0690f309037c5cb436375ebbb4e3c54"}]},{"name":"service-template.yml","path":"service-templates/beanstalk-service/service-template.yml","sha":"a4aae9a7ca454a39accb997131b53165ba787a6c"}]},{"name":"common","children":[{"name":"Jenkinsfile.deploy","path":"service-templates/common/Jenkinsfile.deploy","sha":"e1e70671138ec89f6e46739dfc2b2e85b2121434"},{"name":"config.deploy.xml.ejs","path":"service-templates/common/config.deploy.xml.ejs","sha":"844aa7312ae138c054acd239e9afdee3ad7a4fad"},{"name":"deploy-service.sh","path":"service-templates/common/deploy-service.sh","sha":"0688d5bd9a2ea9c00a645f075d28e6730511ceea"}]},{"name":"create-account","children":[{"name":"outputs","children":[{"name":"Jenkinsfile.ejs","path":"service-templates/create-account/outputs/Jenkinsfile.ejs","sha":"070a2d60fcd96f0da207217d12ba0fca43d9885a"},{"name":"child-account.tf.ejs","path":"service-templates/create-account/outputs/child-account.tf.ejs","sha":"c65d79260e88a45b1a1208147b2b3057c31daac9"},{"name":"config.xml.ejs","path":"service-templates/create-account/outputs/config.xml.ejs","sha":"ac2647bfca57ba703f88243b6803274a2b0b8f98"},{"name":"create-account.sh","path":"service-templates/create-account/outputs/create-account.sh","sha":"c833a9c84a8dbfdb8786cd4cfb9ebf809f9f8331"},{"name":"infrastructure-live","children":[{"name":"child-account","children":[{"name":"_global","children":[{"name":"cloudtrail","children":[{"name":"terragrunt.hcl.ejs","path":"service-templates/create-account/outputs/infrastructure-live/child-account/_global/cloudtrail/terragrunt.hcl.ejs","sha":"cd6df7050126a4c46cf37fdc637239d784c9d610"}]},{"name":"iam-cross-account","children":[{"name":"terragrunt.hcl.ejs","path":"service-templates/create-account/outputs/infrastructure-live/child-account/_global/iam-cross-account/terragrunt.hcl.ejs","sha":"f9947ed53312b960e5c45cb2fb1e42ee83a9d638"}]},{"name":"iam-user-password-policy","children":[{"name":"terragrunt.hcl.ejs","path":"service-templates/create-account/outputs/infrastructure-live/child-account/_global/iam-user-password-policy/terragrunt.hcl.ejs","sha":"7c850170dda37b10640075bd443264cd28aa3d2a"}]},{"name":"region.yaml.ejs","path":"service-templates/create-account/outputs/infrastructure-live/child-account/_global/region.yaml.ejs","sha":"23fde193fb499f6dd304f668024197e58de57593"}]},{"name":"empty.yaml.ejs","path":"service-templates/create-account/outputs/infrastructure-live/child-account/empty.yaml.ejs","sha":"5aa66daa40faeaef37eccb7b4b0fcc792233cd7b"},{"name":"region","children":[{"name":"_global","children":[{"name":"sns-topics","children":[{"name":"terragrunt.hcl.ejs","path":"service-templates/create-account/outputs/infrastructure-live/child-account/region/_global/sns-topics/terragrunt.hcl.ejs","sha":"790414910cd2ad0f0d5feb706a45db7ceb2dd894"}]}]},{"name":"environment","children":[{"name":"ecs-cluster-fargate","children":[{"name":"terragrunt.hcl.ejs","path":"service-templates/create-account/outputs/infrastructure-live/child-account/region/environment/ecs-cluster-fargate/terragrunt.hcl.ejs","sha":"1b8c36f9f1ad100c45c80ba67c91d76ccd15853d"}]},{"name":"env.yaml.ejs","path":"service-templates/create-account/outputs/infrastructure-live/child-account/region/environment/env.yaml.ejs","sha":"142fb8eb7df3bbfea65ffbd03fe11dfe2f7d0771"},{"name":"networking","children":[{"name":"alb-public","children":[{"name":"terragrunt.hcl.ejs","path":"service-templates/create-account/outputs/infrastructure-live/child-account/region/environment/networking/alb-public/terragrunt.hcl.ejs","sha":"041ff45c608329dd492f37b62d633416b3aece58"}]}]},{"name":"vpc","children":[{"name":"terragrunt.hcl.ejs","path":"service-templates/create-account/outputs/infrastructure-live/child-account/region/environment/vpc/terragrunt.hcl.ejs","sha":"387f41006f1cd1ef21214d4a7b532f64766def01"}]}]},{"name":"region.yaml.ejs","path":"service-templates/create-account/outputs/infrastructure-live/child-account/region/region.yaml.ejs","sha":"5c1d1addd02982737bc474ff736839a10a444031"}]},{"name":"terragrunt.hcl.ejs","path":"service-templates/create-account/outputs/infrastructure-live/child-account/terragrunt.hcl.ejs","sha":"25394414843285c5c21b34721cc99a8f7b8b4e81"},{"name":"tfstate.yaml.ejs","path":"service-templates/create-account/outputs/infrastructure-live/child-account/tfstate.yaml.ejs","sha":"448742e7d841df04a75ab85937abc2d3ff78b011"}]},{"name":"master","children":[{"name":"_global","children":[{"name":"child-accounts","children":[{"name":"terragrunt.hcl.ejs","path":"service-templates/create-account/outputs/infrastructure-live/master/_global/child-accounts/terragrunt.hcl.ejs","sha":"b0e4efed7418ac9ee8c40347a1afcd3e2f1f5fc9"}]}]}]}]}]},{"name":"service-template.yml","path":"service-templates/create-account/service-template.yml","sha":"8968ab877c78af975a55365b4e38f6d8045ace4d"}]},{"name":"ecr-repos","children":[{"name":"outputs","children":[{"name":"terragrunt.hcl.ejs","path":"service-templates/ecr-repos/outputs/terragrunt.hcl.ejs","sha":"ea5b8eb8a8ae592f0952c3d871a7f1992f213f56"}]},{"name":"service-template.yml","path":"service-templates/ecr-repos/service-template.yml","sha":"b6bcfb598f4c347823d0e56cbeaf04738da4d75e"}]},{"name":"ecs-service-fargate-with-alb","children":[{"name":"outputs","children":[{"name":"terragrunt.hcl.ejs","path":"service-templates/ecs-service-fargate-with-alb/outputs/terragrunt.hcl.ejs","sha":"a48d17bba67a3457bc3a33670c82e98b92b20996"}]},{"name":"service-template.yml","path":"service-templates/ecs-service-fargate-with-alb/service-template.yml","sha":"e795fb3bfdfcb86b5b1b0518b17f5a55264e369c"}]},{"name":"ecs-service-with-alb","children":[{"name":"outputs","children":[{"name":"Jenkinsfile.build.ejs","path":"service-templates/ecs-service-with-alb/outputs/Jenkinsfile.build.ejs","sha":"5fe5d862a8cb116a3725dbb745a62e9319d29313"},{"name":"config.build.xml.ejs","path":"service-templates/ecs-service-with-alb/outputs/config.build.xml.ejs","sha":"67a57026d20b9c92907cc2236a4dea347d16eaf8"},{"name":"terragrunt.hcl.ejs","path":"service-templates/ecs-service-with-alb/outputs/terragrunt.hcl.ejs","sha":"47f422b2ce6ab2b6677b64b251e461e1ba879fe3"},{"name":"trigger-deploy.sh.ejs","path":"service-templates/ecs-service-with-alb/outputs/trigger-deploy.sh.ejs","sha":"62af91b20a0d7b1893470a0d461278b70368674e"}]},{"name":"service-template.yml","path":"service-templates/ecs-service-with-alb/service-template.yml","sha":"3e3fcfb99b0b4bd8aab6c993705240bdb56555b1"}]}]},{"name":"services","children":[{"name":"asg-service","children":[{"name":"README.md","path":"services/asg-service/README.md","sha":"e8e0901bc2bec438776b64a9d3d59c1989ea8467"},{"name":"main.tf","path":"services/asg-service/main.tf","sha":"9dfaab53521a550d1b5cbbf8b8a92004fa5aabd4"},{"name":"outputs.tf","path":"services/asg-service/outputs.tf","sha":"9944f0795c3f2007c413452c1f5fee50c1268e58"},{"name":"user-data","children":[{"name":"user-data.sh","path":"services/asg-service/user-data/user-data.sh","sha":"e50da5f928e417ff9b77f4267d53544cbce667ba"}]},{"name":"variables.tf","path":"services/asg-service/variables.tf","sha":"e2852225cc6eed7217850aa95ac133261148c3c4"}]},{"name":"beanstalk-service","children":[{"name":"README.md","path":"services/beanstalk-service/README.md","sha":"8a66b7bec1c265c33880ad843f18335d6fe0a2f7"},{"name":"main.tf","path":"services/beanstalk-service/main.tf","sha":"ff96d57cff851d01d3c495ec23f1fadc8b2c835e"},{"name":"outputs.tf","path":"services/beanstalk-service/outputs.tf","sha":"e19d38e019aa0aa622494429776374a27083bc28"},{"name":"variables.tf","path":"services/beanstalk-service/variables.tf","sha":"1a01a6a04597b6a63b58673e472f9934c2b3976d"}]},{"name":"ecs-cluster","children":[{"name":"README.md","path":"services/ecs-cluster/README.md","sha":"ab95356506fe38392944ae896c4e3e359d1e294e"},{"name":"main.tf","path":"services/ecs-cluster/main.tf","sha":"c602c307b4bc0c3f1792972fa270c4e66ef78ae5"},{"name":"migration_guides","children":[{"name":"upgrading_from_0_16_to_0_22.md","path":"services/ecs-cluster/migration_guides/upgrading_from_0_16_to_0_22.md","sha":"d6609b80439eb03c9a475353f633f4ee4fe64d0b"}]},{"name":"outputs.tf","path":"services/ecs-cluster/outputs.tf","sha":"c918113ae6e738817e7c0c55c6e4180383660cb6"},{"name":"packer","children":[{"name":"ecs-node.json","path":"services/ecs-cluster/packer/ecs-node.json","sha":"146740301632afad7d0c9b79a75b9ffa383e7016"}]},{"name":"user-data","children":[{"name":"user-data.sh","path":"services/ecs-cluster/user-data/user-data.sh","sha":"dc919f5a28cf4bc3dc7826323dd2b9b3b668d77d"}]},{"name":"variables.tf","path":"services/ecs-cluster/variables.tf","sha":"3ec4348945cb56e4c6489ef9a637e36da33d02d2"}]},{"name":"ecs-service-with-alb","children":[{"name":"README.md","path":"services/ecs-service-with-alb/README.md","sha":"f3c0765593712662cb89c765bfbdacfe8c9256be"},{"name":"container-definition","children":[{"name":"container-definition.json","path":"services/ecs-service-with-alb/container-definition/container-definition.json","sha":"20f25b4085100177ad428190241796f00b702b55"}]},{"name":"main.tf","path":"services/ecs-service-with-alb/main.tf","sha":"7ce41ffe7bbb59583e4f8087305d498907586a8b"},{"name":"migration_guides","children":[{"name":"upgrading_from_0_16_to_0_22.md","path":"services/ecs-service-with-alb/migration_guides/upgrading_from_0_16_to_0_22.md","sha":"c3212366901a85da3db817fde30c819a54af654d"}]},{"name":"outputs.tf","path":"services/ecs-service-with-alb/outputs.tf","sha":"9f29e3720121ee032810189239b83b924765a465"},{"name":"variables.tf","path":"services/ecs-service-with-alb/variables.tf","sha":"e7ee179e44eb1f735552cd6c47941810064b2aeb"}]},{"name":"eks-cluster","children":[{"name":"README.md","path":"services/eks-cluster/README.md","sha":"e20618147dbe5e008f8905bfd258fe2c5dc6ac97"},{"name":"dependencies.tf","path":"services/eks-cluster/dependencies.tf","sha":"81c6e14fceebdd1c7363774b43b138601a104c2b"},{"name":"main.tf","path":"services/eks-cluster/main.tf","sha":"6b9c141f59c95b91eb547cea1d9f560e55518b8f"},{"name":"migration_guides","children":[{"name":"migrate_to_0_31.sh","path":"services/eks-cluster/migration_guides/migrate_to_0_31.sh","sha":"7d4e616748f4d37fb27b34c5fb185e1cf805e8ca"},{"name":"upgrading_from_0_28_to_0_44.md","path":"services/eks-cluster/migration_guides/upgrading_from_0_28_to_0_44.md","sha":"558b6778b3f00b35b4062ea6508a93180641ffaa"},{"name":"upgrading_from_0_8_to_0_9.md","path":"services/eks-cluster/migration_guides/upgrading_from_0_8_to_0_9.md","sha":"940a58c784877998918596c4cd3bcf3e8e4d1a3e"},{"name":"upgrading_from_0_9_to_0_20.md","path":"services/eks-cluster/migration_guides/upgrading_from_0_9_to_0_20.md","sha":"9d651729e84c5c8ba81f39249efd3519569eda82"}]},{"name":"outputs.tf","path":"services/eks-cluster/outputs.tf","sha":"4e527d1c4705a20e163d5bd17d8a77dcdf8e704e"},{"name":"packer","children":[{"name":"eks-node.json","path":"services/eks-cluster/packer/eks-node.json","sha":"3ec7c7161b852269ad515fa549cdc94075b51b66"}]},{"name":"user-data","children":[{"name":"user-data.sh","path":"services/eks-cluster/user-data/user-data.sh","sha":"fb67f646973b4695ef621bf822ff83023853c053"}]},{"name":"variables.tf","path":"services/eks-cluster/variables.tf","sha":"d1e4a8852be4c4441d94f6edcf459c8c166c38d2"}]},{"name":"eks-core-services","children":[{"name":"README.md","path":"services/eks-core-services/README.md","sha":"7887ccf8ba7a28d8ab90b10a447d367205099ce8"},{"name":"dependencies.tf","path":"services/eks-core-services/dependencies.tf","sha":"e3d5965be79c8855d3c23e7f7e97f4285ddb4055"},{"name":"main.tf","path":"services/eks-core-services/main.tf","sha":"feb96d5d959d70a26156a42c6c497c6aa49a2dbc"},{"name":"migration_guides","children":[{"name":"upgrading_from_0_8_to_0_20.md","path":"services/eks-core-services/migration_guides/upgrading_from_0_8_to_0_20.md","sha":"7e1a2a1b149cd8f6ef9ec97a6eef39e5a5712f36"}]},{"name":"outputs.tf","path":"services/eks-core-services/outputs.tf","sha":"e9de33d8ebb25ae0a192974ae8f87eaff4e3c7e0"},{"name":"variables.tf","path":"services/eks-core-services/variables.tf","sha":"7b1ac535683d80f20ecfa1fd9b0a1eb856791488"}]},{"name":"k8s-namespace","children":[{"name":"README.md","path":"services/k8s-namespace/README.md","sha":"494088025e0f84e8b7daf6c3b0c4880a1551cd4a"},{"name":"dependencies.tf","path":"services/k8s-namespace/dependencies.tf","sha":"bf60b27da3a43c164c2b8d5cb1395036e633f35a"},{"name":"main.tf","path":"services/k8s-namespace/main.tf","sha":"3435ce2b0dfc206640b6ffedb0d150f921453d69"},{"name":"migration_guides","children":[{"name":"migrate_to_tf13.sh","path":"services/k8s-namespace/migration_guides/migrate_to_tf13.sh","sha":"192378bf224b7320dfcb89c41146c19b7d52e3e9"},{"name":"upgrading_from_helm2_k8s-namespace-with-tiller.md","path":"services/k8s-namespace/migration_guides/upgrading_from_helm2_k8s-namespace-with-tiller.md","sha":"5a1fadaaae7157f6ebc2259ce9c4a47211820bc0"},{"name":"upgrading_to_terraform13.md","path":"services/k8s-namespace/migration_guides/upgrading_to_terraform13.md","sha":"b1cbc30f481847153db23118e5b1b2d73426794d"}]},{"name":"outputs.tf","path":"services/k8s-namespace/outputs.tf","sha":"be7aceadc95e422b27b09ff5c6b163e56b84eb6c"},{"name":"variables.tf","path":"services/k8s-namespace/variables.tf","sha":"ec4f614e0058536b95209e6539cae7666a9c879e"}]},{"name":"k8s-service","children":[{"name":"README.md","path":"services/k8s-service/README.md","sha":"e6ae3fbc8cc60449439d3fde17edcc66799c99f6","toggled":true},{"name":"dependencies.tf","path":"services/k8s-service/dependencies.tf","sha":"8d33da01770b121296b5534edc080a0c0c54912b"},{"name":"main.tf","path":"services/k8s-service/main.tf","sha":"ba5c5bd0a2e8eec33439f329cffe041f82090b89"},{"name":"migration_guides","children":[{"name":"migrate_to_tf13.sh","path":"services/k8s-service/migration_guides/migrate_to_tf13.sh","sha":"29b6098d93174b4d2655bdf637d8ce8c8c5d0b0e"},{"name":"upgrading_to_0.1.0_chart_version.md","path":"services/k8s-service/migration_guides/upgrading_to_0.1.0_chart_version.md","sha":"88c2183df50b36a96afb965b2fdd36528bfc7150"},{"name":"upgrading_to_helm3.md","path":"services/k8s-service/migration_guides/upgrading_to_helm3.md","sha":"c9870cd7594f397aee9c99f53cb38f35ac3ac8f9"},{"name":"upgrading_to_terraform13.md","path":"services/k8s-service/migration_guides/upgrading_to_terraform13.md","sha":"cde50be5aaa0d71c8d263c0b32519038416c100f"}]},{"name":"templates","children":[{"name":"probe_values.yaml","path":"services/k8s-service/templates/probe_values.yaml","sha":"69d49cf2336add3da1e591dfd1ca29c07c68ea03"},{"name":"values.yaml","path":"services/k8s-service/templates/values.yaml","sha":"918d47246dc7f1af5fa4b858c69238a9003aa527"}]},{"name":"variables.tf","path":"services/k8s-service/variables.tf","sha":"cfafadf85ea45d48009cfec59bb531cc8c04408c"}],"toggled":true},{"name":"static-website","children":[{"name":"README.md","path":"services/static-website/README.md","sha":"1530129f95d0ca40542e86984ab703d969a2e0c3"},{"name":"example-website","children":[{"name":"README.md","path":"services/static-website/example-website/README.md","sha":"6301100b4effb1607101f87146515ee1d21eea48"},{"name":"index.html","path":"services/static-website/example-website/index.html","sha":"5a1e3b502c4a6ac042bb16cc669a155adb60db87"}]},{"name":"main.tf","path":"services/static-website/main.tf","sha":"da38282589a842ad40a4f4afff4c215ed6ab8667"},{"name":"outputs.tf","path":"services/static-website/outputs.tf","sha":"04baf5160ee587fc676b0abd188cb13983ba8a5e"},{"name":"variables.tf","path":"services/static-website/variables.tf","sha":"d7d6773f46a8f44acfd5b84da2b232f32947ca7e"}]}],"toggled":true},{"name":"tls-scripts","children":[{"name":"README.md","path":"tls-scripts/README.md","sha":"527ff15e933cea76de67c2320ba9201f1bde9564"},{"name":"create-tls-cert.sh","path":"tls-scripts/create-tls-cert.sh","sha":"a98dc2db093f825166c032661c37bac38da27f15"},{"name":"download-rds-ca-certs.sh","path":"tls-scripts/download-rds-ca-certs.sh","sha":"bcf9966d8341146c12fe57613949ee7abb193ddc"},{"name":"generate-trust-stores.sh","path":"tls-scripts/generate-trust-stores.sh","sha":"12f1591a7e613412025d1d64d6bcf7418892ff37"},{"name":"helpers.sh","path":"tls-scripts/helpers.sh","sha":"6650c987ea62be423e9f4fd6a39ad43249713f5a"}]}]},"detailsContent":"<h1 class=\"preview__body--title\" id=\"kubernetes-service-module\">Kubernetes Service Module</h1><div class=\"preview__body--border\"></div><p>This Terraform Module can be used deploy a typical dockerized web service on Kubernetes. Under the hood this module uses\nthe <a href=\"/repos/helm-kubernetes-services/charts/k8s-service\" class=\"preview__body--description--blue\">k8s-service</a> Helm Chart to\ndeploy a Kubernetes <a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/deployment/\" class=\"preview__body--description--blue\" target=\"_blank\">Deployment</a> for a given\nDocker container with a <a href=\"https://kubernetes.io/docs/concepts/services-networking/service/\" class=\"preview__body--description--blue\" target=\"_blank\">Service resource</a>.\nOptionally, this module can also provision an <a href=\"https://kubernetes.io/docs/concepts/services-networking/ingress/\" class=\"preview__body--description--blue\" target=\"_blank\">Ingress\nresource</a>, which can be used to front the service with\nan ALB and corresponding Route 53 Domain records to allow external access to the deployed service.</p>\n<h2 class=\"preview__body--subtitle\" id=\"how-do-you-use-this-module\">How do you use this module?</h2>\n<ul>\n<li>See the <a href=\"/repos/v0.0.1-2021-02-04/infrastructure-modules-multi-account-acme/README.md\" class=\"preview__body--description--blue\">root README</a> for instructions on using Terraform modules.</li>\n<li>See <a href=\"/repos/v0.0.1-2021-02-04/infrastructure-modules-multi-account-acme/services/k8s-service/variables.tf\" class=\"preview__body--description--blue\">variables.tf</a> for all the variables you can set on this module.</li>\n</ul>\n<h2 class=\"preview__body--subtitle\" id=\"what-is-helm\">What is Helm?</h2>\n<p><a href=\"https://helm.sh/docs/\" class=\"preview__body--description--blue\" target=\"_blank\">Helm</a> is a package manager for Kubernetes that can be used to install various services on to the\nEKS cluster. You use helm through the <code>helm</code> CLI, which uses the Kubernetes API to deploy the resources. <code>helm</code> tracks\nits releases in <code>Secret</code> resources on the cluster, which it uses to track all the charts that have been deployed. This\nallows for various rollout functionality, such as tracking failed deployments for rolling backwards to a previous\nrelease or forwards to new releases.</p>\n<p>You can read more about Helm in <a href=\"https://helm.sh/docs/\" class=\"preview__body--description--blue\" target=\"_blank\">the official documentation</a>.</p>\n<h2 class=\"preview__body--subtitle\" id=\"what-is-a-kubernetes-deployment\">What is a Kubernetes Deployment?</h2>\n<p><code>Deployment</code> resources are Kubernetes controllers that ensure a desired state of <code>Pods</code> is kept in the cluster. If the\nstate of <code>Pods</code> on a cluster deviates from the desired state, the controller will automatically make the necessary\nchanges to match the desired state. For example, if the desired state is to keep 3 <code>Pods</code> running, and one of the <code>Pods</code>\nfails, the controller will automatically replace it with a new <code>Pod</code>.</p>\n<p><code>Deployments</code> automatically provide various features for an application deployment on Kubernetes, such as\n<a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#rolling-back-a-deployment\" class=\"preview__body--description--blue\" target=\"_blank\">rollback</a>, <a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#canary-deployment\" class=\"preview__body--description--blue\" target=\"_blank\">canary\ndeployments</a>, and <a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#rolling-update-deployment\" class=\"preview__body--description--blue\" target=\"_blank\">rolling\nupdates</a>.</p>\n<p>You can learn more about all the various features of <code>Deployments</code> in <a href=\"https://kubernetes.io/docs/concepts/workloads/controllers/deployment/\" class=\"preview__body--description--blue\" target=\"_blank\">the official documentation</a>.</p>\n<h2 class=\"preview__body--subtitle\" id=\"what-is-a-kubernetes-service\">What is a Kubernetes Service?</h2>\n<p><code>Service</code> resources define stable endpoints for your <code>Pods</code> in a <code>Deployment</code>. In Kubernetes, <code>Pods</code> are considered\nephemeral resources, and they are designed to come and go at any given point in time. This means that you have a\nconstantly changing environment of <code>Pods</code>, which makes it difficult to have a stable address to access your <code>Pods</code>.\n<code>Services</code> provide a consistent endpoint that can be used to access a group of <code>Pods</code>. The <code>Service</code> resource will\nautomatically load balance your requests across all the <code>Pods</code> that match the given criteria, even if the number of\n<code>Pods</code> backing the <code>Service</code> changes.</p>\n<p>In addition to having a consistent IP address, <code>Services</code> also have an internal DNS hostname that can be used to address\nit. All <code>Services</code> within a Kubernetes cluster can be reached under the domain name pattern\n<code>{SVCNAME}.{NAMESPACE}.svc.cluster.local</code>. This provides an automated way to perform service discovery for your\napplications.</p>\n<p>You can read more about <code>Services</code> in <a href=\"https://kubernetes.io/docs/concepts/services-networking/service/\" class=\"preview__body--description--blue\" target=\"_blank\">the official\ndocumenation</a>.</p>\n<h2 class=\"preview__body--subtitle\" id=\"what-is-a-kubernetes-ingress\">What is a Kubernetes Ingress?</h2>\n<p><code>Ingress</code> resources configure a "Layer 7" load balancer for HTTP web applications. <code>Ingress</code> resources allow you to\nexpose internal <code>Services</code> to be accessible from outside the cluster, depending on the flavor of <code>Ingress</code> controller\nyou choose to deploy to your cluster. <code>Ingress</code> controllers take <code>Ingress</code> resources and map them to an actual load\nbalancer.</p>\n<p>The <a href=\"/repos/v0.0.1-2021-02-04/infrastructure-modules-multi-account-acme/services/eks-core-services\" class=\"preview__body--description--blue\">eks-core-services module</a> can be used to deploy the AWS ALB Ingress Controller to your EKS\ncluster, allowing you to use <code>Ingress</code> resources to create ALBs that automatically map to the <code>Service</code> endpoint\ndeployed using this module.</p>\n<p>Additionally, if you provide a hostname for the service that has a corresponding Route 53 Hosted Zone, the\n<code>external-dns</code> app (also deployed using the <code>eks-core-services</code> module) will updated the Hosted Zone with a record that\nmaps the domain hostname to the newly provisioned ALB. This allows you to provide a consistent endpoint that is\naccessible from outside the Kubernetes cluster.</p>\n<h2 class=\"preview__body--subtitle\" id=\"core-concepts\">Core concepts</h2>\n<p>For more information, check out the following documentation:</p>\n<ul>\n<li><a href=\"/repos/helm-kubernetes-services/charts/k8s-service\" class=\"preview__body--description--blue\">k8s-service Helm Chart</a></li>\n<li><a href=\"/repos/terraform-aws-eks/modules/eks-alb-ingress-controller\" class=\"preview__body--description--blue\">eks-alb-ingress-controller\nmodule</a></li>\n<li><a href=\"/repos/terraform-aws-eks/modules/eks-k8s-external-dns\" class=\"preview__body--description--blue\">eks-k8s-external-dns\nmodule</a></li>\n</ul>\n","repoName":"infrastructure-modules-multi-account-acme","repoRef":"v0.0.1-2021-02-04","serviceDescriptor":{"serviceName":"Sample Infrastructure Modules","serviceRepoName":"infrastructure-modules-multi-account-acme","serviceRepoOrg":"gruntwork-io","cloudProviders":["aws"],"description":"Sample infrastructure-modules repo (multi-account setup) for fictional company Acme.","imageUrl":"grunt.png","licenseType":"subscriber","technologies":["Bash","HCL"],"compliance":[],"tags":[""],"noDisplayInUI":true},"serviceCategoryName":"Reference Architecture","fileName":"README.md","filePath":"/services/k8s-service","title":"Repo Browser: Sample Infrastructure Modules","description":"Browse the repos in the Gruntwork Infrastructure as Code Library."}