This repository contains Terraform modules that define Acme Multi Account's infrastructure. Think of these modules as
"blueprints" that define reusable, testable, configurable, versioned pieces of infrastructure. See the
infrastructure-live-multi-account-acme repo for
how these blueprints are used.
Note that some of these modules rely on modules that are part of Gruntwork Infrastructure
Packages. The Gruntwork modules live in private Git repos, and if you don't have access to those repos, please email
support@gruntwork.io.
Terraform is an open source tool used to define, provision, and manage
infrastructure-as-code. Just as every developer today knows to version control their app code, infrastructure-as-code
allows you to version control your infrastructure. This allows you to:
Maintain an audit trail of all changes.
Use the Pull Request methodology to propose changes and encourage peer review prior to pushing to production.
Maintain a level of rigor around how infrastructure is managed.
Create validation tests that must pass before infrastructure changes can be approved.
Include infrastructure changes in CI/CD pipelines.
Learn more about using Terraform by checking out their documentation.
How do you use a module?
To use a module, create a terragrunt.hcl file that specifies the module you want to use as well as values for the
input variables of that module:
# Use Terragrunt to download the module codeterraform {
source = "git::ssh://git@github.com/gruntwork-io/infrastructure-modules-multi-account-acme.git//path/to/module?ref=v0.0.1"
}
# Fill in the variables for that module
inputs = {
foo = "bar"
baz = 3
}
(Note: the double slash (//) in the source URL is intentional and required. It's part of Terraform's Git syntax
for module sources.)
You then run Terragrunt, a thin, open source wrapper for Terraform
that supports locking and enforces best practices, and it will download the source code specified in the source URL
into a temporary folder, copy your terragrunt.hcl file into that folder, and run your Terraform command in that
folder:
> terragrunt apply
[terragrunt] Reading Terragrunt config file at terragrunt.hcl
[terragrunt] Downloading Terraform configurations from git::ssh://git@github.com/gruntwork-io/infrastructure-modules-multi-account-acme.git//path/to/module?ref=v0.0.1
[terragrunt] Copying files from . into /tmp/terragrunt/infrastructure-modules-multi-account-acme/path/to/module
[terragrunt] Running command: terraform apply
[...]
Here is how to test out changes to a module locally:
Update the code as necessary.
Go into the folder where you have the terragrunt.hcl file that uses this module (preferably for a dev or
staging environment!).
Run terragrunt plan --terragrunt-source <LOCAL_PATH>, where LOCAL_PATH is the path to your local checkout of
the module code.
If the plan looks good, run terragrunt apply --terragrunt-source <LOCAL_PATH>.
Using the --terragrunt-source parameter (or TERRAGRUNT_SOURCE environment variable) allows you to do rapid,
iterative, make-a-change-and-rerun development.
Releasing a new version
When you're done testing the changes locally, here is how you release a new version:
Update the code as necessary.
Commit your changes to Git: git commit -m "commit message".
Add a new Git tag using one of the following options:
Using GitHub: Go to the releases page and click "Draft a new release".
Now you can use the new Git tag (e.g. v0.0.2) in the ref attribute of the source URL in terragrunt.hcl.
Run terragrunt plan.
If the plan looks good, run terragrunt apply.
Why use modules?
Modules offer a few key advantages:
Keep your code DRY: Instead of copying & pasting Terraform code across each environments, you define your code
in a single place (this repo) and reuse that exact same code across all environments just by referencing the
code's URL in a terragrunt.hcl file.
Keep your code versioned: By using versioned source URLs (via the ?ref=XXX parameter), you can test out a
new version in one environment (e.g. stage) without affecting another environment (e.g. prod). If the changes look
good, you can promote that same version to every other environment in succession (e.g. dev -> stage -> prod). And
since the version is immutable, you can be confident that if it worked in a previous environment, it'll work the
same way in another environment.
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":".gitignore","path":".gitignore","sha":"0305003919b74d47dc7190b2922c4d980f4cd087"},{"name":"CODEOWNERS","path":"CODEOWNERS","sha":"00570abefb91e715366015f8b5acf32631336d52"},{"name":"README.md","path":"README.md","sha":"b480f00ef3db4af4290bf6961237722c8f86de7b","toggled":true},{"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"},{"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"}]},{"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"}]}]},{"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=\"infrastructure-modules\">Infrastructure Modules</h1><div class=\"preview__body--border\"></div><p>This repository contains Terraform modules that define Acme Multi Account's infrastructure. Think of these modules as\n"blueprints" that define reusable, testable, configurable, versioned pieces of infrastructure. See the\n<a href=\"/repos/infrastructure-live-multi-account-acme\" class=\"preview__body--description--blue\">infrastructure-live-multi-account-acme repo</a> for\nhow these blueprints are used.</p>\n<p>Note that some of these modules rely on modules that are part of <a href=\"http://www.gruntwork.io\" class=\"preview__body--description--blue\" target=\"_blank\">Gruntwork</a> Infrastructure\nPackages. The Gruntwork modules live in private Git repos, and if you don't have access to those repos, please email\nsupport@gruntwork.io.</p>\n<h2 class=\"preview__body--subtitle\" id=\"start-here\">Start here</h2>\n<p>If you're new to infrastructure, Terraform, or AWS, make sure to start with the end-to-end\n<a href=\"/repos/infrastructure-live-multi-account-acme/_docs\" class=\"preview__body--description--blue\">Infrastructure Walkthrough Documentation</a>.</p>\n<h2 class=\"preview__body--subtitle\" id=\"what-is-terraform\">What is Terraform?</h2>\n<p><a href=\"https://www.terraform.io/\" class=\"preview__body--description--blue\" target=\"_blank\">Terraform</a> is an open source tool used to define, provision, and manage\ninfrastructure-as-code. Just as every developer today knows to version control their app code, infrastructure-as-code\nallows you to version control your infrastructure. This allows you to:</p>\n<ul>\n<li>Maintain an audit trail of all changes.</li>\n<li>Use the Pull Request methodology to propose changes and encourage peer review prior to pushing to production.</li>\n<li>Maintain a level of rigor around how infrastructure is managed.</li>\n<li>Create validation tests that must pass before infrastructure changes can be approved.</li>\n<li>Include infrastructure changes in CI/CD pipelines.</li>\n</ul>\n<p>Learn more about using Terraform by checking out their <a href=\"https://www.terraform.io/docs/index.html\" class=\"preview__body--description--blue\" target=\"_blank\">documentation</a>.</p>\n<h2 class=\"preview__body--subtitle\" id=\"how-do-you-use-a-module\">How do you use a module?</h2>\n<p>To use a module, create a <code>terragrunt.hcl</code> file that specifies the module you want to use as well as values for the\ninput variables of that module:</p>\n<pre><span class=\"hljs-comment\"># Use Terragrunt to download the module code</span>\n<span class=\"hljs-keyword\">terraform</span> {\n source = <span class=\"hljs-string\">\"git::ssh://git@github.com/gruntwork-io/infrastructure-modules-multi-account-acme.git//path/to/module?ref=v0.0.1\"</span>\n}\n\n<span class=\"hljs-comment\"># Fill in the variables for that module</span>\ninputs = {\n foo = <span class=\"hljs-string\">\"bar\"</span>\n baz = <span class=\"hljs-number\">3</span>\n}\n</pre>\n<p>(<em>Note: the double slash (<code>//</code>) in the <code>source</code> URL is intentional and required. It's part of Terraform's Git syntax\nfor <a href=\"https://www.terraform.io/docs/modules/sources.html\" class=\"preview__body--description--blue\" target=\"_blank\">module sources</a>.</em>)</p>\n<p>You then run <a href=\"/repos/terragrunt\" class=\"preview__body--description--blue\">Terragrunt</a>, a thin, open source wrapper for Terraform\nthat supports locking and enforces best practices, and it will download the source code specified in the <code>source</code> URL\ninto a temporary folder, copy your <code>terragrunt.hcl</code> file into that folder, and run your Terraform command in that\nfolder:</p>\n<pre>> terragrunt apply\n[terragrunt] Reading Terragrunt config file at terragrunt.hcl\n[terragrunt] Downloading Terraform configurations from git::ssh://git@github.com/gruntwork-io/infrastructure-modules-multi-account-acme.git//path/to/<span class=\"hljs-keyword\">module</span>?ref=v0.<span class=\"hljs-number\">0.1</span>\n[terragrunt] Copying files from . into /tmp/terragrunt/infrastructure-modules-multi-account-acme/path/to/<span class=\"hljs-keyword\">module</span>\n[terragrunt] Running command: <span class=\"hljs-keyword\">terraform</span> apply\n[...]\n</pre>\n<p>Check out the <a href=\"/repos/infrastructure-live-multi-account-acme\" class=\"preview__body--description--blue\">infrastructure-live-multi-account-acme repo</a>\nfor examples and the <a href=\"/repos/terragrunt#remote-terraform-configurations\" class=\"preview__body--description--blue\">Terragrunt remote configurations\ndocumentation</a> for more info.</p>\n<h2 class=\"preview__body--subtitle\" id=\"how-do-you-change-a-module\">How do you change a module?</h2>\n<h3 class=\"preview__body--subtitle\" id=\"local-changes\">Local changes</h3>\n<p>Here is how to test out changes to a module locally:</p>\n<ol>\n<li>Update the code as necessary.</li>\n<li>Go into the folder where you have the <code>terragrunt.hcl</code> file that uses this module (preferably for a dev or\nstaging environment!).</li>\n<li>Run <code>terragrunt plan --terragrunt-source <LOCAL_PATH></code>, where <code>LOCAL_PATH</code> is the path to your local checkout of\nthe module code.</li>\n<li>If the plan looks good, run <code>terragrunt apply --terragrunt-source <LOCAL_PATH></code>.</li>\n</ol>\n<p>Using the <code>--terragrunt-source</code> parameter (or <code>TERRAGRUNT_SOURCE</code> environment variable) allows you to do rapid,\niterative, make-a-change-and-rerun development.</p>\n<h3 class=\"preview__body--subtitle\" id=\"releasing-a-new-version\">Releasing a new version</h3>\n<p>When you're done testing the changes locally, here is how you release a new version:</p>\n<ol>\n<li>\n<p>Update the code as necessary.</p>\n</li>\n<li>\n<p>Commit your changes to Git: <code>git commit -m "commit message"</code>.</p>\n</li>\n<li>\n<p>Add a new Git tag using one of the following options:</p>\n<ol>\n<li>Using GitHub: Go to the <a href=\"/repos/v0.0.1-20201021/infrastructure-modules-multi-account-acme/releases\" class=\"preview__body--description--blue\">releases page</a> and click "Draft a new release".</li>\n<li>Using Git:</li>\n</ol>\n<pre>git <span class=\"hljs-keyword\">tag</span> <span class=\"hljs-title\">-a</span> v0.<span class=\"hljs-number\">0.2</span> -m <span class=\"hljs-string\">\"tag message\"</span>\ngit push --follow-tags\n</pre>\n</li>\n<li>\n<p>Now you can use the new Git tag (e.g. <code>v0.0.2</code>) in the <code>ref</code> attribute of the <code>source</code> URL in <code>terragrunt.hcl</code>.</p>\n</li>\n<li>\n<p>Run <code>terragrunt plan</code>.</p>\n</li>\n<li>\n<p>If the plan looks good, run <code>terragrunt apply</code>.</p>\n</li>\n</ol>\n<h2 class=\"preview__body--subtitle\" id=\"why-use-modules\">Why use modules?</h2>\n<p>Modules offer a few key advantages:</p>\n<ol>\n<li><strong>Keep your code DRY</strong>: Instead of copying & pasting Terraform code across each environments, you define your code\nin a single place (this repo) and reuse that exact same code across all environments just by referencing the\ncode's URL in a <code>terragrunt.hcl</code> file.</li>\n<li><strong>Keep your code versioned</strong>: By using versioned <code>source</code> URLs (via the <code>?ref=XXX</code> parameter), you can test out a\nnew version in one environment (e.g. stage) without affecting another environment (e.g. prod). If the changes look\ngood, you can promote that same version to every other environment in succession (e.g. dev -> stage -> prod). And\nsince the version is immutable, you can be confident that if it worked in a previous environment, it'll work the\nsame way in another environment.</li>\n</ol>\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":"","title":"Repo Browser: Sample Infrastructure Modules","description":"Browse the repos in the Gruntwork Infrastructure as Code Library."}