Set your AWS credentials as the environment variables AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.
Set your GitHub access token
as the environment variable GITHUB_OAUTH_TOKEN. Your GitHub account must have access to the Gruntwork GitHub
repos mentioned in packer/jenkins-ubuntu.json; if you don't have access to those, email support@gruntwork.io.
Run packer build jenkins-ubuntu.json.
When the build completes, it'll output the id of the new AMI.
Use the module in your Terraform code
See the root README for instructions on using Terraform modules.
See variables.tf for all the variables you can set on this module.
How is Jenkins configured?
The JENKINS_HOME directory
These templates mount the JENKINS_HOME directory
on a separate, persistent EBS volume at path /jenkins. Unlike a root volume on an EC2 Instance, this EBS volume will
persist between redeploys so you don't lose all your data each time you push out new code.
Upgrades
If you want to upgrade the Jenkins version, your best option is to update the jenkins_version variable in this Packer
template. If you use the Jenkins UI to do upgrades, you will lose that upgrade the next time you deploy a new AMI. A
Jenkins upgrade installs a new war file for Jenkins onto the root volume. The JENKINS_HOME directory should remain
unchanged and continue working with the new version.
Plugins
When you first install Jenkins, it walks you through a Setup Wizard. As part of that
process, we recommend using the standard set of plugins recommended by the Setup Wizard. On top of that, we also
typically install two other useful plugins using the plugins UI:
SSH Agent Plugin. This allows us to load SSH
credentials into SSH Agent so that anything in your build that depends on SSH authentication (e.g. Terraform modules
pulled down via SSH auth) will "just work".
It can use SSL certificates from the AWS Certificate Manager. These
certificates are free and auto-renew, which makes maintenance much easier.
It allows us to run Jenkins itself in a private subnet. Given all the different types of code a developer is likely
to run on Jenkins, it will be hard to lock it down fully, so running it in a private subnet offers a little more
protection from dumb mistakes (e.g. opening up a port).
IAM permissions
In order for Jenkins to be able to do automatic deployment by running Terraform, we have given it IAM permissions to
access a large number of AWS APIs. This means Jenkins is a highly trusted actor and we need to be extra careful in how
we manage and secure it.
{"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":"7030fee1d2362e7bacd5503c28370a510c336adc"},{"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":"90ff0ccd2c70ca808df4a6c29111b76a305842c5"}]},{"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":"c594870e58e65f12a8548e55d00ab81c60c86ab9"},{"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":"99c0514de304305ecbf76d4d51a46023b74db1d3"},{"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":"35c50aa93603977805f44ec5d6acd1a705aa5d4b"},{"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":"4f5802b87e93072548e12d2de7a25a5ab837fa60"},{"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":"a3ae233588b006b87a8eea158e8bf3e212af7a5b"},{"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","toggled":true},{"name":"main.tf","path":"mgmt/jenkins/main.tf","sha":"2dc08ca49c0c9b7d2a622dcc3cca6863e2dd744b"},{"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":"8d33b03293bedb42a536a7ccf3b34757313baeb0"},{"name":"install-gruntwork-modules.sh","path":"mgmt/jenkins/packer/install-gruntwork-modules.sh","sha":"e1e45da42d9bf1a8d997799a411db94f1a9330ad"},{"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"}],"toggled":true},{"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":"fe4087cf07b0c41993b169f41e4cd0a0af732ff9"},{"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":"8d48172583cd7cee83c839204b0c9aed2dbbe524"}]},{"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"}]}],"toggled":true},{"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":"14693841c42df70b4b416d944e563772f5953b23"},{"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":"34c94edd9dd516afd362e870f78b2b230e323f1a"},{"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":"a3adfb6c398dff77dda81a5e544a67f618842399"},{"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":"292bf59b35cc6a1a08755f62dca8b99f973baf57"},{"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":"7245208c1f32e9401e6d06650fa07d6be850ac54"},{"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":"754265672494429066a22ee075cd369d22be8cbc"},{"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":"7dc418944d8df9bcba6549865417a25875dc6d17"},{"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":"64cbf6c5fdcfe20390ef97284de8db2430fee710"},{"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":"6b4231c7c404e77e4ade80a9d0f66d70a6c91acf"},{"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":"943ec2073269e18063f02b594190aea7225e80ad"},{"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":"5de73dffbb52978115cb026e9dcdbccd38e0acdf"}]},{"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":"43547372006ed234a122a089a25746038ece015a"},{"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":"2b0a9592137b8feff44725e8770108da70a84eab"}]},{"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":"3b31355a1acaf180490fdeacaf7f166d35e71913"},{"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":"4e3c04b76611a6a230e9af156d06ae44816a1901"},{"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":"bb3befc797069eb13232e60b86b88b2c6633debf"},{"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=\"jenkins\">Jenkins</h1><div class=\"preview__body--border\"></div><p>This Terraform Module can be used to deploy <a href=\"https://jenkins.io/\" class=\"preview__body--description--blue\" target=\"_blank\">Jenkins</a>, an open source build automation server.</p>\n<p>The resources that are created by this module include:</p>\n<ul>\n<li>An ASG to run Jenkins (using the <a href=\"/repos/module-server/modules/single-server\" class=\"preview__body--description--blue\">Gruntwork single-server\nmodule</a>).</li>\n<li>An EBS volume for Jenkins that persists between redeploys (using the <a href=\"/repos/module-server/modules/persistent-ebs-volume\" class=\"preview__body--description--blue\">Gruntwork persistent-ebs-volume\nmodule</a>).</li>\n<li>A lambda job to periodically take a snapshot of the EBS volume (using the <a href=\"/repos/module-ci/modules/ec2-backup\" class=\"preview__body--description--blue\">Gruntwork ec2-backup\nmodule</a>).</li>\n<li>A CloudWatch alarm that goes off if a backup job fails to run (using the <a href=\"/repos/module-ci/modules/ec2-backup\" class=\"preview__body--description--blue\">Gruntwork ec2-backup\nmodule</a>).</li>\n<li>The <a href=\"http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/QuickStartEC2Instance.html\" class=\"preview__body--description--blue\" target=\"_blank\">CloudWatch Logs\nAgent</a> to send all\nlogs in syslog and in the <a href=\"https://wiki.jenkins-ci.org/display/JENKINS/Logging\" class=\"preview__body--description--blue\" target=\"_blank\">Jenkins app log</a> to <a href=\"http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchLogs.html\" class=\"preview__body--description--blue\" target=\"_blank\">CloudWatch\nLogs</a> (using the\n<a href=\"/repos/module-aws-monitoring/modules/logs/cloudwatch-log-aggregation-scripts\" class=\"preview__body--description--blue\">Gruntwork cloudwatch-log-aggregation-scripts\nmodule</a>).</li>\n<li>Custom metrics that are not available by default in CloudWatch, including memory and disk usage (using the <a href=\"/repos/module-aws-monitoring/modules/metrics/cloudwatch-memory-disk-metrics-scripts\" class=\"preview__body--description--blue\">Gruntwork\ncloudwatch-memory-disk-metrics-scripts\nmodule</a>).</li>\n<li>Automatic log rotation and rate limiting (using the <a href=\"/repos/module-aws-monitoring/modules/logs/syslog\" class=\"preview__body--description--blue\">Gruntwork syslog\nmodule</a>).- SSH access via IAM user accounts and public keys (using the <a href=\"/repos/module-security/modules/ssh-grunt\" class=\"preview__body--description--blue\">Gruntwork ssh-grunt\nmodule</a>).</li>\n<li>Automatic security updates for the server (using the <a href=\"/repos/module-security/modules/auto-update\" class=\"preview__body--description--blue\">Gruntwork auto-update\nmodule</a>).</li>\n<li>An ALB to route traffic to Jenkins</li>\n<li>A Route 53 DNS A record pointing at the ALB</li>\n</ul>\n<p>If you don't have access to any of the Gruntwork modules, email support@gruntwork.io.</p>\n<h2 class=\"preview__body--subtitle\" id=\"how-do-you-use-this-module\">How do you use this module?</h2>\n<p>To use this module, you need to:</p>\n<ol>\n<li>Build the AMI</li>\n<li>Use the module in your Terraform code</li>\n</ol>\n<h4 id=\"build-the-ami\">Build the AMI</h4>\n<p>The Jenkins server should run the AMI built using the <a href=\"https://www.packer.io/\" class=\"preview__body--description--blue\" target=\"_blank\">Packer</a> template in\n<code>packer/jenkins-ubuntu.json</code>.</p>\n<p>To build the AMI from the Packer template:</p>\n<ol>\n<li>Install <a href=\"https://www.packer.io/\" class=\"preview__body--description--blue\" target=\"_blank\">Packer</a>.</li>\n<li>Set your AWS credentials as the environment variables <code>AWS_ACCESS_KEY_ID</code> and <code>AWS_SECRET_ACCESS_KEY</code>.</li>\n<li>Set your <a href=\"https://help.github.com/articles/creating-an-access-token-for-command-line-use/\" class=\"preview__body--description--blue\" target=\"_blank\">GitHub access token</a>\nas the environment variable <code>GITHUB_OAUTH_TOKEN</code>. Your GitHub account must have access to the Gruntwork GitHub\nrepos mentioned in <code>packer/jenkins-ubuntu.json</code>; if you don't have access to those, email support@gruntwork.io.</li>\n<li>Run <code>packer build jenkins-ubuntu.json</code>.</li>\n<li>When the build completes, it'll output the id of the new AMI.</li>\n</ol>\n<h4 id=\"use-the-module-in-your-terraform-code\">Use the module in your Terraform code</h4>\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/mgmt/jenkins/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=\"how-is-jenkins-configured\">How is Jenkins configured?</h2>\n<h4 id=\"the-jenkins-home-directory\">The JENKINS_HOME directory</h4>\n<p>These templates mount the <a href=\"https://wiki.jenkins-ci.org/display/JENKINS/Administering+Jenkins\" class=\"preview__body--description--blue\" target=\"_blank\">JENKINS_HOME directory</a>\non a separate, persistent EBS volume at path <code>/jenkins</code>. Unlike a root volume on an EC2 Instance, this EBS volume will\npersist between redeploys so you don't lose all your data each time you push out new code.</p>\n<h4 id=\"upgrades\">Upgrades</h4>\n<p>If you want to upgrade the Jenkins version, your best option is to update the <code>jenkins_version</code> variable in this Packer\ntemplate. If you use the Jenkins UI to do upgrades, you will lose that upgrade the next time you deploy a new AMI. A\nJenkins upgrade installs a new war file for Jenkins onto the root volume. The <code>JENKINS_HOME</code> directory should remain\nunchanged and continue working with the new version.</p>\n<h4 id=\"plugins\">Plugins</h4>\n<p>When you first <a href=\"https://jenkins.io/download/\" class=\"preview__body--description--blue\" target=\"_blank\">install Jenkins</a>, it walks you through a Setup Wizard. As part of that\nprocess, we recommend using the standard set of plugins recommended by the Setup Wizard. On top of that, we also\ntypically install two other useful plugins using the plugins UI:</p>\n<ol>\n<li><a href=\"https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin\" class=\"preview__body--description--blue\" target=\"_blank\">Parameterized Trigger Plugin</a>. This\nallows us to run one build and then use the output of that build to fill in the parameters and trigger a\n<a href=\"https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build\" class=\"preview__body--description--blue\" target=\"_blank\">parameterized build</a>.</li>\n<li><a href=\"https://wiki.jenkins-ci.org/display/JENKINS/SSH+Agent+Plugin\" class=\"preview__body--description--blue\" target=\"_blank\">SSH Agent Plugin</a>. This allows us to load SSH\ncredentials into SSH Agent so that anything in your build that depends on SSH authentication (e.g. Terraform modules\npulled down via SSH auth) will "just work".</li>\n</ol>\n<h4 id=\"alb\">ALB</h4>\n<p>We have deployed Jenkins with an <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html\" class=\"preview__body--description--blue\" target=\"_blank\">Application Load Balancer</a>\nin front of it for a few reasons:</p>\n<ol>\n<li>It provides SSL termination.</li>\n<li>It can use SSL certificates from the <a href=\"https://aws.amazon.com/certificate-manager/\" class=\"preview__body--description--blue\" target=\"_blank\">AWS Certificate Manager</a>. These\ncertificates are free and auto-renew, which makes maintenance much easier.</li>\n<li>It allows us to run Jenkins itself in a private subnet. Given all the different types of code a developer is likely\nto run on Jenkins, it will be hard to lock it down fully, so running it in a private subnet offers a little more\nprotection from dumb mistakes (e.g. opening up a port).</li>\n</ol>\n<h4 id=\"iam-permissions\">IAM permissions</h4>\n<p>In order for Jenkins to be able to do automatic deployment by running Terraform, we have given it IAM permissions to\naccess a large number of AWS APIs. This means Jenkins is a highly trusted actor and we need to be extra careful in how\nwe manage and secure it.</p>\n<h2 class=\"preview__body--subtitle\" id=\"core-concepts\">Core concepts</h2>\n<p>For more info on what is Jenkins, how to configure it, and how to use it to set up continuous integration and\ncontinuous delivery, see the <a href=\"https://jenkins.io/doc/\" class=\"preview__body--description--blue\" target=\"_blank\">Jenkins documentation</a>.\nFor info on finding the Jenkins logs in CloudWatch, check out the <a href=\"/repos/module-aws-monitoring/modules/logs/cloudwatch-log-aggregation-scripts\" class=\"preview__body--description--blue\">cloudwatch-log-aggregation-scripts\ndocumentation</a>.\nFor info on viewing the custom metrics in CloudWatch, check out the <a href=\"/repos/module-aws-monitoring/modules/metrics/cloudwatch-memory-disk-metrics-scripts\" class=\"preview__body--description--blue\">cloudwatch-memory-disk-metrics-scripts\ndocumentation</a>.</p>\n","repoName":"infrastructure-modules-multi-account-acme","repoRef":"v0.0.1-20201218","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":"/mgmt/jenkins","title":"Repo Browser: Sample Infrastructure Modules","description":"Browse the repos in the Gruntwork Infrastructure as Code Library."}