This repo contains modules for creating best-practices Virtual Private Clouds (VPCs) on AWS.
Main Modules
The main modules to use is:
vpc-app: Launch a VPC meant to house applications. The VPC includes 3 "tiers" of subnets
(public, private app, private persistence), routing rules, security groups, network ACLs, and NAT gateways.
Supporting Modules
There are also several supporting modules that add extra functionality on top of vpc-app and vpc-mgmt:
vpc-peering: Creating peering connections between VPCs. Normally, VPCs are completely
isolated from each other, but sometimes, you want to allow traffic to flow between them, such as allowing DevOps
tools running in a Mgmt VPC to talk to apps in a Stage or Prod VPC. This module can create peering connections and
route table entries that make this sort of cross-VPC communication possible.
vpc-app-network-acls: Add a default set of Network ACLs to a VPC created using the
vpc-app module that control what inbound and outbound network traffic is allowed in each subnet
of that VPC.
vpc-mgmt-network-acls: Add a default set of Network ACLs to a VPC created using the
vpc-mgmt module that control what inbound and outbound network traffic is allowed in each subnet
of that VPC.
network-acl-inbound: A simple helper for adding inbound rules to a Network ACL, along
with the corresponding outbound rules for return traffic .
network-acl-outbound: A simple helper for adding outbound rules to a Network ACL,
along with the correspoding inbound rules for return traffic.
transit-gateway: Create a Transit Gateway, which is a managed service that allows you to
connect multiple VPCs and network components together.
transit-gateway-attachment: Creates a Transit Gateway Attachment, which
allows you to connect a VPC to a Transit Gateway.
transit-gateway-peering-attachment: Creates a Transit Gateway Peering
Attachment, which allows you to connect a Transit Gateway to another Transit Gateway.
transit-gateway-route: Creates a Transit Gateway Route, which allows you to route
traffic from a Transit Gateway to a VPC.
vpc-dns-forwarder: Set up Route 53 Resolvers to forward DNS queries from one VPC's DNS
resolver to another.
vpc-flow-logs: Create VPC flow logs to log network traffic in VPCs, subnets, and Elastic
Network Interfaces.
[DEPRECATED] vpc-mgmt: Launch a VPC meant to house DevOps and other management services. The
VPC includes 2 "tiers" of subnets (public, private), routing rules, security groups, network ACLs, and NAT gateways.
Please note that this module has been deprecated. See the module README for details.
Click on each module above to see its documentation. Head over to the examples folder for examples.
What is a module?
At Gruntwork, we've taken the thousands of hours we spent building infrastructure on AWS and
condensed all that experience and code into pre-built packages or modules. Each module is a battle-tested,
best-practices definition of a piece of infrastructure, such as a VPC, ECS cluster, or an Auto Scaling Group. Modules
are versioned using Semantic Versioning to allow Gruntwork clients to keep up to date with the
latest infrastructure best practices in a systematic way.
To use a module in your Terraform templates, create a module resource and set its source field to the Git URL of
this repo. You should also set the ref parameter so you're fixed to a specific version of this repo, as the master
branch may have backwards incompatible changes (see module
sources).
For example, to use v1.0.8 of the vpc-app module, you would add the following:
module"ecs_cluster" {
source = "git::git@github.com:gruntwork-io/terraform-aws-vpc.git//modules/vpc-app?ref=v1.0.8"// set the parameters for the vpc-app module
}
Note: the double slash (//) is intentional and required. It's part of Terraform's Git syntax (see module
sources).
See the module's documentation and variables.tf file for all the parameters you can set. Run terraform init to
pull the latest version of this module from this repo before running the standard terraform plan and
terraform apply commands.
Using scripts & binaries
You can install the scripts and binaries in the modules folder of any repo using the Gruntwork
Installer. For example, if the scripts you want to install are
in the modules/ecs-scripts folder of the https://github.com/gruntwork-io/terraform-aws-ecs repo, you could install them
as follows:
See the docs for each script & binary for detailed instructions on how to use them.
What's a VPC?
A VPC or Virtual Private Cloud is a logically isolated section of your AWS cloud. Each
VPC defines a virtual network within which you run your AWS resources, as well as rules for what can go in and out of
that network. This includes subnets, route tables that tell those subnets how to route inbound and outbound traffic,
security groups, access controls lists for the network (NACLs), and any other network components such as VPN connections.
Learn More about VPCs
See the READMEs for the vpc-app and vpc-mgmt modules for detailed info on a VPC,
along with best practices.
Developing a module
Versioning
We are following the principles of Semantic Versioning. During initial development, the major
version is to 0 (e.g., 0.x.y), which indicates the code does not yet have a stable API. Once we hit 1.0.0, we will
follow these rules:
Increment the patch version for backwards-compatible bug fixes (e.g., v1.0.8 -> v1.0.9).
Increment the minor version for new features that are backwards-compatible (e.g., v1.0.8 -> 1.1.0).
Increment the major version for any backwards-incompatible changes (e.g. 1.0.8 -> 2.0.0).
The version is defined using Git tags. Use GitHub to create a release, which will have the effect of adding a git tag.
{"treedata":{"name":"root","toggled":true,"children":[{"name":".circleci","children":[{"name":"config.yml","path":".circleci/config.yml","sha":"50ef218ac5c984e3efa600340b742e8fd97b7943"},{"name":"post-upgrade-test-results.sh","path":".circleci/post-upgrade-test-results.sh","sha":"a4867e8fbdc334b7a90259568ee41ea577fbe764"},{"name":"set-upgrade-test-vars.sh","path":".circleci/set-upgrade-test-vars.sh","sha":"cb49068f21d5e98dcd08650ef09ab5aab78788c9"}]},{"name":".github","children":[{"name":"ISSUE_TEMPLATE","children":[{"name":"bug_report.md","path":".github/ISSUE_TEMPLATE/bug_report.md","sha":"d2e87e27c601e423865ed660ec697082470ca60f"},{"name":"feature_request.md","path":".github/ISSUE_TEMPLATE/feature_request.md","sha":"023a33099be2336476930c96e17ff1ba5dc55348"}]},{"name":"pull_request_template.md","path":".github/pull_request_template.md","sha":"6b100e40e323b5b07f40ed30616277c51c9f4b9e"}]},{"name":".gitignore","path":".gitignore","sha":"518a7458ff095b7181414a78bfec5e6bc38cb09d"},{"name":".patcher","children":[{"name":"patches","children":[{"name":"v0.19.0","children":[{"name":"iam-inline-policies","children":[{"name":"patch.yaml","path":".patcher/patches/v0.19.0/iam-inline-policies/patch.yaml","sha":"98d6fae6ada4e417306e5acfdd729c19c4de68b7"},{"name":"var_use_managed_iam_policies.sh","path":".patcher/patches/v0.19.0/iam-inline-policies/var_use_managed_iam_policies.sh","sha":"3eec8967fcf0b4f7ed0c9f9f97402690b04a4393"}]}]},{"name":"v0.20.0","children":[{"name":"terraform-1.1-upgrade","children":[{"name":"bump_required_version.sh","path":".patcher/patches/v0.20.0/terraform-1.1-upgrade/bump_required_version.sh","sha":"30abb1d075dbc85ce83dc415869de1c9c8560b0d"},{"name":"patch.yaml","path":".patcher/patches/v0.20.0/terraform-1.1-upgrade/patch.yaml","sha":"de0522c9cd8c13471c993391da9b15adfacc18a3"}]}]},{"name":"v0.21.0","children":[{"name":"aws-provider-4.x","children":[{"name":"bump_provider.sh","path":".patcher/patches/v0.21.0/aws-provider-4.x/bump_provider.sh","sha":"d3daee144dd21814811d998e5ae69796b9956509"},{"name":"create_script_for_terraform_init.sh","path":".patcher/patches/v0.21.0/aws-provider-4.x/create_script_for_terraform_init.sh","sha":"91b47e4cbd30dd4341a391eaeb701bc3a9d5c715"},{"name":"patch.yaml","path":".patcher/patches/v0.21.0/aws-provider-4.x/patch.yaml","sha":"49abdd98a19baa7962e2d8ffb9c8ce82045021d8"}]}]}]}]},{"name":".pre-commit-config.yaml","path":".pre-commit-config.yaml","sha":"49ee828ed16f55335ac4dcc74331f190366b1858"},{"name":"CODEOWNERS","path":"CODEOWNERS","sha":"6bdb25fd78955b1e6016456bf56ad6f149d047f0"},{"name":"LICENSE.txt","path":"LICENSE.txt","sha":"f4e3d9bd4717a044ed31ad847a300eee74371a78"},{"name":"README.md","path":"README.md","sha":"bededc18e128e67ba659423a5d44c97206318634","toggled":true},{"name":"examples","children":[{"name":"route","children":[{"name":"README.md","path":"examples/route/README.md","sha":"286ab0ea8f29eae4e94e4a465a4aec04233ba966"},{"name":"main.tf","path":"examples/route/main.tf","sha":"d5806aae9c2e356650fe7e508687020078e30577"},{"name":"outputs.tf","path":"examples/route/outputs.tf","sha":"c71a70dfd52b3e6ad1e1fda19805dc6dce035b8a"},{"name":"variables.tf","path":"examples/route/variables.tf","sha":"8103213b13b3c36557012018bcae6c52ca89c7fd"}]},{"name":"transit-gateway-attachment","children":[{"name":"README.md","path":"examples/transit-gateway-attachment/README.md","sha":"4716e00510428858e28b7dd39432e706423b84fe"},{"name":"main.tf","path":"examples/transit-gateway-attachment/main.tf","sha":"e4a41892ef0ed604c89808e333b56dee48d81046"},{"name":"outputs.tf","path":"examples/transit-gateway-attachment/outputs.tf","sha":"7a89d7577f93f7295cf3dd2b648343b1958e9619"},{"name":"variables.tf","path":"examples/transit-gateway-attachment/variables.tf","sha":"20dea2995e4f8e7b697b2d7395a7b61ab02261ac"}]},{"name":"transit-gateway-peering-attachment","children":[{"name":"README.md","path":"examples/transit-gateway-peering-attachment/README.md","sha":"4ef2d93fd6863e19309e26146e01de89e83249ed"},{"name":"main.tf","path":"examples/transit-gateway-peering-attachment/main.tf","sha":"7feb01c6c88bf8fbab8d7350d25a029b2d56f21f"},{"name":"outputs.tf","path":"examples/transit-gateway-peering-attachment/outputs.tf","sha":"84a0b7ed0eab87fddb7b67353762055030af414c"},{"name":"variables.tf","path":"examples/transit-gateway-peering-attachment/variables.tf","sha":"20dea2995e4f8e7b697b2d7395a7b61ab02261ac"}]},{"name":"transit-gateway-route","children":[{"name":"README.md","path":"examples/transit-gateway-route/README.md","sha":"8d9b734a2f2f881a1d68d3d2797a089dbe48e535"},{"name":"main.tf","path":"examples/transit-gateway-route/main.tf","sha":"bf528640dcb036ffe4233a93a020b34452f698ff"},{"name":"outputs.tf","path":"examples/transit-gateway-route/outputs.tf","sha":"339bc867a9b0feeaecf21bfda3767caf24439547"},{"name":"variables.tf","path":"examples/transit-gateway-route/variables.tf","sha":"20dea2995e4f8e7b697b2d7395a7b61ab02261ac"}]},{"name":"transit-gateway","children":[{"name":"README.md","path":"examples/transit-gateway/README.md","sha":"ec88af8da72c41e072b554913761e4261845ca9b"},{"name":"main.tf","path":"examples/transit-gateway/main.tf","sha":"ac7a27f8cf820251a38ce89d5e7e93f927280355"},{"name":"outputs.tf","path":"examples/transit-gateway/outputs.tf","sha":"fd99ef6dc538f8c9f3e63f87d3e9753aa791cf68"},{"name":"variables.tf","path":"examples/transit-gateway/variables.tf","sha":"0b0d0075d238f22445231d79c2f664cbee00e2e5"}]},{"name":"vpc-app-custom-az-ids","children":[{"name":"main.tf","path":"examples/vpc-app-custom-az-ids/main.tf","sha":"1d79b7cb0415dd231487a980afc5cce798f542d0"},{"name":"output.tf","path":"examples/vpc-app-custom-az-ids/output.tf","sha":"2d75b1b5b85d9aac1c4004dde2579ad5443833ef"},{"name":"variables.tf","path":"examples/vpc-app-custom-az-ids/variables.tf","sha":"871d1b624b399695b8cdee793b25e2406b17e617"}]},{"name":"vpc-app-ipv4-ipam","children":[{"name":"README.md","path":"examples/vpc-app-ipv4-ipam/README.md","sha":"4aa9e1cf3f04a8044803ee01cd80bb115e5b160a"},{"name":"main.tf","path":"examples/vpc-app-ipv4-ipam/main.tf","sha":"10c37476def87bbbf0ab4a9072632a151a254e97"},{"name":"outputs.tf","path":"examples/vpc-app-ipv4-ipam/outputs.tf","sha":"2eddd15881c7268b61aa731f8baa2afe0edd8b18"},{"name":"variables.tf","path":"examples/vpc-app-ipv4-ipam/variables.tf","sha":"8ee854b7b8085997967df4300507fe83db00392e"}]},{"name":"vpc-app-lookup","children":[{"name":"README.md","path":"examples/vpc-app-lookup/README.md","sha":"367d148f6931b3d2e04402b143a9e8dda6b38571"},{"name":"lookup","children":[{"name":"README.md","path":"examples/vpc-app-lookup/lookup/README.md","sha":"b113ffa99b8480e30969af477733fe669434d9b7"},{"name":"main.tf","path":"examples/vpc-app-lookup/lookup/main.tf","sha":"e189de3a0ab70328d72ed9733d138b78168bdffa"},{"name":"outputs.tf","path":"examples/vpc-app-lookup/lookup/outputs.tf","sha":"7dd228d6026623568460a23e1d8bf4bdc11eb7f9"},{"name":"variables.tf","path":"examples/vpc-app-lookup/lookup/variables.tf","sha":"5f09f3f83de0443a3b81fa3fcb5e8bf30f0ddb26"}]},{"name":"vpc","children":[{"name":"README.md","path":"examples/vpc-app-lookup/vpc/README.md","sha":"6d4d892b48adbfcb9c593bfb491a1c1da20a36f9"},{"name":"main.tf","path":"examples/vpc-app-lookup/vpc/main.tf","sha":"094d66f3d09021b10ccd3d70b1c3a63977f96bb5"},{"name":"outputs.tf","path":"examples/vpc-app-lookup/vpc/outputs.tf","sha":"e0536dd6bb011656d0e14da19052ffc3021836d6"},{"name":"variables.tf","path":"examples/vpc-app-lookup/vpc/variables.tf","sha":"4f8e17df04bba7c4ff190fa8019b7b0ccce30ef0"}]}]},{"name":"vpc-app-multiple-public-route-tables","children":[{"name":"README.md","path":"examples/vpc-app-multiple-public-route-tables/README.md","sha":"87d78d1635611fbe823dba4251232da604bd5fac"},{"name":"main.tf","path":"examples/vpc-app-multiple-public-route-tables/main.tf","sha":"f2e84dabba55523a4715419df0776fecc910252d"},{"name":"outputs.tf","path":"examples/vpc-app-multiple-public-route-tables/outputs.tf","sha":"a801fc3b1ede5802904b07e859669bda4bab4339"},{"name":"variables.tf","path":"examples/vpc-app-multiple-public-route-tables/variables.tf","sha":"02439559dc5a3f2fb6a09df87d21cc76a24accdc"}]},{"name":"vpc-app-no-nat-gateway","children":[{"name":"README.md","path":"examples/vpc-app-no-nat-gateway/README.md","sha":"826fb03cb21dbe3aff9abc46bc4241baf41e2b13"},{"name":"main.tf","path":"examples/vpc-app-no-nat-gateway/main.tf","sha":"9487dbc62ad01e0147d2ae2c4757dfaf0f08cd8e"},{"name":"outputs.tf","path":"examples/vpc-app-no-nat-gateway/outputs.tf","sha":"e5fe2a9caaa3168dd704ef17ca49fbba76b3ede7"},{"name":"variables.tf","path":"examples/vpc-app-no-nat-gateway/variables.tf","sha":"20dea2995e4f8e7b697b2d7395a7b61ab02261ac"}]},{"name":"vpc-app-private-nat-gateway","children":[{"name":"README.md","path":"examples/vpc-app-private-nat-gateway/README.md","sha":"bb22c2881ccbfdf9d9baa062c58fa2b380719d46"},{"name":"main.tf","path":"examples/vpc-app-private-nat-gateway/main.tf","sha":"d95033d1d78cab5d95276d8e002f0ea368fe700a"},{"name":"outputs.tf","path":"examples/vpc-app-private-nat-gateway/outputs.tf","sha":"2eddd15881c7268b61aa731f8baa2afe0edd8b18"},{"name":"variables.tf","path":"examples/vpc-app-private-nat-gateway/variables.tf","sha":"b6de7fe2a22b27053a156ae124fca5518aa41db1"}]},{"name":"vpc-app-subnets-disabled","children":[{"name":"README.md","path":"examples/vpc-app-subnets-disabled/README.md","sha":"2256bcba3ca92f542f9ccf5f53822d4dd41a5fd5"},{"name":"main.tf","path":"examples/vpc-app-subnets-disabled/main.tf","sha":"1bcba259a86d12e7b75e5f6bb9e498d01c51c842"},{"name":"outputs.tf","path":"examples/vpc-app-subnets-disabled/outputs.tf","sha":"6630dcfe2cf399866778a70b9f5530d99d5fc886"},{"name":"variables.tf","path":"examples/vpc-app-subnets-disabled/variables.tf","sha":"d29c3a45b54bb5e7e549d9a46d228ce7e427ad6d"}]},{"name":"vpc-app-transit-subnets","children":[{"name":"README.md","path":"examples/vpc-app-transit-subnets/README.md","sha":"38ef88a374b7de80545893b7e66b076c3438d6a5"},{"name":"main.tf","path":"examples/vpc-app-transit-subnets/main.tf","sha":"f15a174ed141b328916dab204a85f1510286fb78"},{"name":"outputs.tf","path":"examples/vpc-app-transit-subnets/outputs.tf","sha":"c65b711220398a4b691ef706476e0fb0ca374435"},{"name":"variables.tf","path":"examples/vpc-app-transit-subnets/variables.tf","sha":"e95f8726420c7ac17b2054c0d4923b54b19a73a8"}]},{"name":"vpc-app-with-deny-ports","children":[{"name":"README.md","path":"examples/vpc-app-with-deny-ports/README.md","sha":"e57e581e1326d0e4142428d3cda0749bb47156d4"},{"name":"main.tf","path":"examples/vpc-app-with-deny-ports/main.tf","sha":"0fb190ebcbed76845a8ce16880093a6fde6cdcb6"},{"name":"outputs.tf","path":"examples/vpc-app-with-deny-ports/outputs.tf","sha":"e69b395ae2f4d58841fc42dec7f7415a46e11558"},{"name":"variables.tf","path":"examples/vpc-app-with-deny-ports/variables.tf","sha":"d4c647ffe1c03e2d66f2bd9a61a16b04b9bac951"}]},{"name":"vpc-app-with-endpoint","children":[{"name":"README.md","path":"examples/vpc-app-with-endpoint/README.md","sha":"97440c1a07a0725d9649ca2903f662eec25da17a"},{"name":"main.tf","path":"examples/vpc-app-with-endpoint/main.tf","sha":"b7fb268693afc2abed622f6077e8096a31c26e4a"},{"name":"outputs.tf","path":"examples/vpc-app-with-endpoint/outputs.tf","sha":"36e21a8b972bd561cbc3bdaea7b21b8982d6a662"},{"name":"variables.tf","path":"examples/vpc-app-with-endpoint/variables.tf","sha":"be23cd1bfd3a29beb63724612f6bb9a7e5bd3d25"}]},{"name":"vpc-app-with-inbound-network","children":[{"name":"README.md","path":"examples/vpc-app-with-inbound-network/README.md","sha":"9468946f438fd3ed5922f195b5b1a581162d1625"},{"name":"main.tf","path":"examples/vpc-app-with-inbound-network/main.tf","sha":"5db60cd624479c5d0560996401bcfbdca45f83fb"},{"name":"outputs.tf","path":"examples/vpc-app-with-inbound-network/outputs.tf","sha":"729e7cb3afd8cfee49d4dde4ca3ba20f88ad930f"},{"name":"variables.tf","path":"examples/vpc-app-with-inbound-network/variables.tf","sha":"20dea2995e4f8e7b697b2d7395a7b61ab02261ac"}]},{"name":"vpc-app-with-ipv6","children":[{"name":"README.md","path":"examples/vpc-app-with-ipv6/README.md","sha":"d131ab6155e1e73bef5fc8b1e0b43492c9920f1a"},{"name":"main.tf","path":"examples/vpc-app-with-ipv6/main.tf","sha":"a5465c49f0c01b6d2f43c2bb90e97f41cf47cd23"},{"name":"outputs.tf","path":"examples/vpc-app-with-ipv6/outputs.tf","sha":"01773c47c705f7916f54abe423c111fa87713324"},{"name":"variables.tf","path":"examples/vpc-app-with-ipv6/variables.tf","sha":"4ed5231adcf6845071b46f989e0568e0c3688e73"}]},{"name":"vpc-app","children":[{"name":"README.md","path":"examples/vpc-app/README.md","sha":"826fb03cb21dbe3aff9abc46bc4241baf41e2b13"},{"name":"main.tf","path":"examples/vpc-app/main.tf","sha":"ef0145c76c342c6d336478c48d7441f33c21f4af"},{"name":"outputs.tf","path":"examples/vpc-app/outputs.tf","sha":"fd134066d1c0e9724b48115b40cdec4acf05016b"},{"name":"variables.tf","path":"examples/vpc-app/variables.tf","sha":"20dea2995e4f8e7b697b2d7395a7b61ab02261ac"}]},{"name":"vpc-custom-cidr-blocks","children":[{"name":"README.md","path":"examples/vpc-custom-cidr-blocks/README.md","sha":"0d398610e8f25b771726e94863ed642805f2cefa"},{"name":"main.tf","path":"examples/vpc-custom-cidr-blocks/main.tf","sha":"6dd73165c69646be62be917892262635d7836a5b"},{"name":"outputs.tf","path":"examples/vpc-custom-cidr-blocks/outputs.tf","sha":"e5fe2a9caaa3168dd704ef17ca49fbba76b3ede7"},{"name":"variables.tf","path":"examples/vpc-custom-cidr-blocks/variables.tf","sha":"56d3e0ca50ded5ea2535c71f3568f3728106a42b"}]},{"name":"vpc-flow-logs","children":[{"name":"README.md","path":"examples/vpc-flow-logs/README.md","sha":"f1c779e8121f422a2faab197efa55c2e467e610a"},{"name":"main.tf","path":"examples/vpc-flow-logs/main.tf","sha":"79433ac5962f0f8dd31e72ab4f3c6083f33e2184"},{"name":"outputs.tf","path":"examples/vpc-flow-logs/outputs.tf","sha":"df25b1afa440cf241b7f335a74394efddaabfbe9"},{"name":"variables.tf","path":"examples/vpc-flow-logs/variables.tf","sha":"d917e6a7a4f330cf28b13e9d722decc420b723a9"}]},{"name":"vpc-mgmt-no-nat-gateway","children":[{"name":"README.md","path":"examples/vpc-mgmt-no-nat-gateway/README.md","sha":"3b0f25e9a18355a5fd58495b2b37c778c221edd6"},{"name":"main.tf","path":"examples/vpc-mgmt-no-nat-gateway/main.tf","sha":"c6ddd40ad8db070c6ce6f9add16c95b7c4e9c822"},{"name":"outputs.tf","path":"examples/vpc-mgmt-no-nat-gateway/outputs.tf","sha":"c11cde7873d030ed8e8e44a726ee2ea19d65fcd6"},{"name":"variables.tf","path":"examples/vpc-mgmt-no-nat-gateway/variables.tf","sha":"bf7cddc01e2b42855c9c435e5c2751e010e6a435"}]},{"name":"vpc-mgmt-with-deny-ports","children":[{"name":"README.md","path":"examples/vpc-mgmt-with-deny-ports/README.md","sha":"32ef87731f85645a8d0cbfdb7bf08b8754ea9052"},{"name":"main.tf","path":"examples/vpc-mgmt-with-deny-ports/main.tf","sha":"438ae9d3d719d64f2c5af1a9216379db9f74f4e7"},{"name":"outputs.tf","path":"examples/vpc-mgmt-with-deny-ports/outputs.tf","sha":"e3ae5435de260d9699187b5a2fe8cfb768d8ce20"},{"name":"variables.tf","path":"examples/vpc-mgmt-with-deny-ports/variables.tf","sha":"7904438005bf74aaee12d63ff1e74f48d834f7a6"}]},{"name":"vpc-mgmt","children":[{"name":"README.md","path":"examples/vpc-mgmt/README.md","sha":"3b0f25e9a18355a5fd58495b2b37c778c221edd6"},{"name":"main.tf","path":"examples/vpc-mgmt/main.tf","sha":"fde64fbafc872c4f200d7f2d8b054d989e454772"},{"name":"outputs.tf","path":"examples/vpc-mgmt/outputs.tf","sha":"c11cde7873d030ed8e8e44a726ee2ea19d65fcd6"},{"name":"variables.tf","path":"examples/vpc-mgmt/variables.tf","sha":"59225eb0320c7af08fa4cade7bbeaf10bdeac295"}]},{"name":"vpc-network-acls","children":[{"name":"README.md","path":"examples/vpc-network-acls/README.md","sha":"1cfbcdca63dd09b114fb216c8c6956843bebe72d"},{"name":"main.tf","path":"examples/vpc-network-acls/main.tf","sha":"be43f3c353b4cecbd190fc1d4607c0309b97009b"},{"name":"outputs.tf","path":"examples/vpc-network-acls/outputs.tf","sha":"0844e2de3b557ffb6dbd54c91d0fc0c9cf3b2c8c"},{"name":"variables.tf","path":"examples/vpc-network-acls/variables.tf","sha":"a19ecd5a9d56e8127d6dbd39ea9594b0ef49a696"}]},{"name":"vpc-peering-cross-accounts","children":[{"name":"README.md","path":"examples/vpc-peering-cross-accounts/README.md","sha":"c4e6503d73f6c59772a03a8763b8dd0ee4d36b92"},{"name":"accepter.tf","path":"examples/vpc-peering-cross-accounts/accepter.tf","sha":"0a692b86e4920126051912d1172529463371d50b"},{"name":"dependencies.tf","path":"examples/vpc-peering-cross-accounts/dependencies.tf","sha":"e5a5292d4e9ac44f072f4c88b8e5bc16861a67e5"},{"name":"outputs.tf","path":"examples/vpc-peering-cross-accounts/outputs.tf","sha":"5257d0521e3fa33b514cb90f55a811416141c9a2"},{"name":"providers.tf","path":"examples/vpc-peering-cross-accounts/providers.tf","sha":"e1e3cb4875ae9d9484ef965ad5ced9fa05bce6be"},{"name":"requester.tf","path":"examples/vpc-peering-cross-accounts/requester.tf","sha":"63a74f10d3a5a7912b378012e5dc8a771ebfae92"},{"name":"variables.tf","path":"examples/vpc-peering-cross-accounts/variables.tf","sha":"a3af170a52ebe3617c5cbdbc751924c2ef77560a"},{"name":"versions.tf","path":"examples/vpc-peering-cross-accounts/versions.tf","sha":"39e928ac89b00785b50b77023d51fe425f95ca9f"}]},{"name":"vpc-peering-external","children":[{"name":"README.md","path":"examples/vpc-peering-external/README.md","sha":"6976d17089bb100c609ee72b843994ccf76fcb05"},{"name":"main.tf","path":"examples/vpc-peering-external/main.tf","sha":"a1da2d54f7d92ac0380cb6f6d3c7a93e2db4c1a8"},{"name":"outputs.tf","path":"examples/vpc-peering-external/outputs.tf","sha":"5239df47a80d13f33ea58412eb73a83f4ff431ed"},{"name":"variables.tf","path":"examples/vpc-peering-external/variables.tf","sha":"891f648219c644354f932af309fa3dffb0de3bd5"}]},{"name":"vpc-peering","children":[{"name":"README.md","path":"examples/vpc-peering/README.md","sha":"7221059b7ee28648be73f33c009054d40329f8c3"},{"name":"main.tf","path":"examples/vpc-peering/main.tf","sha":"f6a29df74516da3c570da3c87e09fdf4b62b1eff"},{"name":"outputs.tf","path":"examples/vpc-peering/outputs.tf","sha":"85acf3fc320ca7969f57133d94515e80150f7c79"},{"name":"variables.tf","path":"examples/vpc-peering/variables.tf","sha":"6a8eb9ed4db5427a9eddb3205cfca9fc7386c085"}]},{"name":"vpc-secondary-cidr-blocks","children":[{"name":"README.md","path":"examples/vpc-secondary-cidr-blocks/README.md","sha":"d8676b31a2fc7eece19f31286ef931a76dd24e7b"},{"name":"main.tf","path":"examples/vpc-secondary-cidr-blocks/main.tf","sha":"defeb2fe6ad6630a2d44602d75798bacd6471c4f"},{"name":"outputs.tf","path":"examples/vpc-secondary-cidr-blocks/outputs.tf","sha":"90b0745fadb3db740e2f449fdc9348a190f110b4"},{"name":"variables.tf","path":"examples/vpc-secondary-cidr-blocks/variables.tf","sha":"07ba9ad0003d2644f529d4f4c63a6d4f331d1961"}]}]},{"name":"modules","children":[{"name":"_docs","children":[{"name":"cross_accounts_cross_regions_architecture.png","path":"modules/_docs/cross_accounts_cross_regions_architecture.png","sha":"a8bf4007156b0f9a9de3571d320195cdcae275ee"},{"name":"ipv6_dual_stack_vpc.png","path":"modules/_docs/ipv6_dual_stack_vpc.png","sha":"0cf5474b4fd7f06b943e7c1d9160781514862cb4"},{"name":"multi_account_3rd_party_topology.png","path":"modules/_docs/multi_account_3rd_party_topology.png","sha":"cf31e3ebd62cff13b90e92ab07df049862f6854f"},{"name":"multi_account_ram_topology.png","path":"modules/_docs/multi_account_ram_topology.png","sha":"6893b35dd5b48c3c0f21643fd744d867dbbd4646"},{"name":"onprem_centralized_topology.png","path":"modules/_docs/onprem_centralized_topology.png","sha":"e19e7cc9dca73e1d37d47109032239d9a0a5b642"},{"name":"same_account_cross_regions_architecture.png","path":"modules/_docs/same_account_cross_regions_architecture.png","sha":"003cca26acc2d41484f9cb19fe5d24f0150e2f6e"},{"name":"same_account_same_region_architecture.png","path":"modules/_docs/same_account_same_region_architecture.png","sha":"f1e9aad35d52061255d20812f47f1373808de012"},{"name":"transit_vpc_topology.png","path":"modules/_docs/transit_vpc_topology.png","sha":"f5902270ff5b3f74544bf16a30323c42debaed38"},{"name":"vpc-core-concepts.md","path":"modules/_docs/vpc-core-concepts.md","sha":"99b2e85bb3e7634b1bc0d6d8b5b0505abec932e1"},{"name":"vpc_app_topology.png","path":"modules/_docs/vpc_app_topology.png","sha":"3e5b75e0aa2fc2c201f076898ab1d25c514937ea"},{"name":"vpc_peering_mesh.png","path":"modules/_docs/vpc_peering_mesh.png","sha":"dec70c229dad58b2f54f27a977e94a2a0c95706d"}]},{"name":"network-acl-inbound","children":[{"name":"README.md","path":"modules/network-acl-inbound/README.md","sha":"3784f45a817ccb73f2e8254c22c674eb77f29a8d"},{"name":"main.tf","path":"modules/network-acl-inbound/main.tf","sha":"0a486e5bd0685504e11f3b84bb62b269e3ebb665"},{"name":"variables.tf","path":"modules/network-acl-inbound/variables.tf","sha":"50cd7fa4e70332c51fdc0190062696a0d54e0393"}]},{"name":"network-acl-outbound","children":[{"name":"README.md","path":"modules/network-acl-outbound/README.md","sha":"b0a204c8f1e30c99da43158c231436b018e53db6"},{"name":"main.tf","path":"modules/network-acl-outbound/main.tf","sha":"ddfc89c53b5efa2cd55a22287b06f8eb0bbcacee"},{"name":"variables.tf","path":"modules/network-acl-outbound/variables.tf","sha":"c6533d29604c4bbad25bd4f143118907c33fbd54"}]},{"name":"port-range-calculator","children":[{"name":"README.md","path":"modules/port-range-calculator/README.md","sha":"6d9470f9d3531253d85865ab798657fce345bc92"},{"name":"main.tf","path":"modules/port-range-calculator/main.tf","sha":"b83790f3651292f14950fe107ae5e69d573a8046"},{"name":"outputs.tf","path":"modules/port-range-calculator/outputs.tf","sha":"f784a1e622caec65b44a3c34a38eaa4f8f0ed982"},{"name":"variables.tf","path":"modules/port-range-calculator/variables.tf","sha":"e778a7cf9e65c2f7498cb1822b2df8a2eee80ce3"}]},{"name":"route","children":[{"name":"README.md","path":"modules/route/README.md","sha":"6c54d9d9912205503aa1122d6f7e6f24a56261eb"},{"name":"main.tf","path":"modules/route/main.tf","sha":"faa71c97ef00f2d702a5990241ca225008409128"},{"name":"outputs.tf","path":"modules/route/outputs.tf","sha":"a67851be8985a3f469ff01372b8209ec90599ee5"},{"name":"variables.tf","path":"modules/route/variables.tf","sha":"57a2ce9a85dab8ff8b9474b7bcd298b44988a0e1"}]},{"name":"transit-gateway-attachment","children":[{"name":"README.md","path":"modules/transit-gateway-attachment/README.md","sha":"ac408c8b8f40db774757ab040ef1dcc4cad37934"},{"name":"main.tf","path":"modules/transit-gateway-attachment/main.tf","sha":"80431dab84f1a305c3550812c8892dcf74a10346"},{"name":"outputs.tf","path":"modules/transit-gateway-attachment/outputs.tf","sha":"1d7ff5e13f7ed698126f12f8cc87bc087bfd8b8a"},{"name":"variables.tf","path":"modules/transit-gateway-attachment/variables.tf","sha":"7bee5986d89b490d2acde6ad62cf2e2116a5473d"}]},{"name":"transit-gateway-peering-attachment-accepter","children":[{"name":"README.md","path":"modules/transit-gateway-peering-attachment-accepter/README.md","sha":"253b5173777ebc464137ed9672479d1238d13e3c"},{"name":"main.tf","path":"modules/transit-gateway-peering-attachment-accepter/main.tf","sha":"b2b36a19441ccc813a800d0db3cac4bf5675a411"},{"name":"outputs.tf","path":"modules/transit-gateway-peering-attachment-accepter/outputs.tf","sha":"6c5c9891629383ae889588ce8283a1de566961d7"},{"name":"variables.tf","path":"modules/transit-gateway-peering-attachment-accepter/variables.tf","sha":"7bcf987eccd202c491d3f38c2261f88bdbbd6b82"}]},{"name":"transit-gateway-peering-attachment","children":[{"name":"README.md","path":"modules/transit-gateway-peering-attachment/README.md","sha":"f786aa69e15571f66bd5277ff51acf8964689e38"},{"name":"main.tf","path":"modules/transit-gateway-peering-attachment/main.tf","sha":"6aaf48caed8483395970f777e9f50cd3b3e7ebf8"},{"name":"outputs.tf","path":"modules/transit-gateway-peering-attachment/outputs.tf","sha":"b8392c9d9426a5a4ae27b72394a5fbec921829fd"},{"name":"variables.tf","path":"modules/transit-gateway-peering-attachment/variables.tf","sha":"d37a3e4f09ba8ba0fe2b0f54446e603ea1d85a0f"}]},{"name":"transit-gateway-route","children":[{"name":"README.md","path":"modules/transit-gateway-route/README.md","sha":"f5fcf909781f8751ef487d807ee6d39746d069c0"},{"name":"main.tf","path":"modules/transit-gateway-route/main.tf","sha":"9184325e3a2c9792bcd00ff348ca754ea8f3ad65"},{"name":"outputs.tf","path":"modules/transit-gateway-route/outputs.tf","sha":"66db39e2a1209932eb246da143fd407347e7af65"},{"name":"variables.tf","path":"modules/transit-gateway-route/variables.tf","sha":"bb3f32f07113d41429558349591205349a06822f"}]},{"name":"transit-gateway","children":[{"name":"README.md","path":"modules/transit-gateway/README.md","sha":"124d9401ff3072023ec25a7c4ddfd0d29a4ff973"},{"name":"main.tf","path":"modules/transit-gateway/main.tf","sha":"de7581ba711a1b1392ecf506d98df8d21ff1ffce"},{"name":"outputs.tf","path":"modules/transit-gateway/outputs.tf","sha":"5f94c2d11769ce3b9ddd2894f1e7268a5aaf62c4"},{"name":"variables.tf","path":"modules/transit-gateway/variables.tf","sha":"2aed20ef237b988dab170a99603119eea4f9931b"}]},{"name":"vpc-app-lookup","children":[{"name":"README.md","path":"modules/vpc-app-lookup/README.md","sha":"0ceec957c4525a17a54e71bb0a26313a145dfbec"},{"name":"main.tf","path":"modules/vpc-app-lookup/main.tf","sha":"3039c5604a4da3ba14d6585f543cbfaf55cfc66c"},{"name":"outputs.tf","path":"modules/vpc-app-lookup/outputs.tf","sha":"226ee744ef301930d3febfc0513cc6d6c34bc309"},{"name":"variables.tf","path":"modules/vpc-app-lookup/variables.tf","sha":"0267a0528b21bf2a4a0feaf2d4b6d579ea77de05"}]},{"name":"vpc-app-network-acls","children":[{"name":"README.md","path":"modules/vpc-app-network-acls/README.md","sha":"651ac413c70524265e6bb7b39f0c1560b4a37f9b"},{"name":"main.tf","path":"modules/vpc-app-network-acls/main.tf","sha":"4392e20f5e82a15281be22b25b767893c03cb25d"},{"name":"outputs.tf","path":"modules/vpc-app-network-acls/outputs.tf","sha":"9a195661c42467976c5c6e1bea92dab56016edc3"},{"name":"variables.tf","path":"modules/vpc-app-network-acls/variables.tf","sha":"c4484a0229881691e8b44747112a0d10795280fa"}]},{"name":"vpc-app","children":[{"name":"README.md","path":"modules/vpc-app/README.md","sha":"cc7bc63e3ace61210992ba4870a47048627f2b7e"},{"name":"main.tf","path":"modules/vpc-app/main.tf","sha":"111539e262c982ab44964554e0a72c8d467726c5"},{"name":"outputs.tf","path":"modules/vpc-app/outputs.tf","sha":"8e012b822fb945290f6f86c8aa883f984f00f6bb"},{"name":"variables.tf","path":"modules/vpc-app/variables.tf","sha":"c93a2cd33d8e11b7edc3599c052325b9646701cc"}]},{"name":"vpc-dns-forwarder-rules","children":[{"name":"README.md","path":"modules/vpc-dns-forwarder-rules/README.md","sha":"e61361e740adf9b6c95de03ee3ee4044162f57b8"},{"name":"main.tf","path":"modules/vpc-dns-forwarder-rules/main.tf","sha":"0633245c06d7c4d5c47ed6eae0598d3b5d4a9fed"},{"name":"variables.tf","path":"modules/vpc-dns-forwarder-rules/variables.tf","sha":"b5baaad0819ce7c23d47d1292fe0798dee12cdf5"}]},{"name":"vpc-dns-forwarder","children":[{"name":"README.md","path":"modules/vpc-dns-forwarder/README.md","sha":"0d0b4fffb15431758fd436c7cdc474bace686b7e"},{"name":"main.tf","path":"modules/vpc-dns-forwarder/main.tf","sha":"d6cc8cf1e6ae8accfc37f5630d44dd3ae8f87aba"},{"name":"outputs.tf","path":"modules/vpc-dns-forwarder/outputs.tf","sha":"382b7f3ae80e99cfd8325c9b4de404110e4d85ef"},{"name":"variables.tf","path":"modules/vpc-dns-forwarder/variables.tf","sha":"3c27308d90da5517d686c5bfb901801ba65637c0"}]},{"name":"vpc-flow-logs","children":[{"name":"README.md","path":"modules/vpc-flow-logs/README.md","sha":"27e79f6b9d633e88e33850f60b719c06b023648b"},{"name":"main.tf","path":"modules/vpc-flow-logs/main.tf","sha":"5a2439451758ab6dbb3d4b3b136fbe391c1a6163"},{"name":"outputs.tf","path":"modules/vpc-flow-logs/outputs.tf","sha":"986f6aac55e865d679a182e92929d7788bcb9c79"},{"name":"variables.tf","path":"modules/vpc-flow-logs/variables.tf","sha":"dc5d0c727b837d63d15d934637e952247f6294fd"}]},{"name":"vpc-interface-endpoint","children":[{"name":"README.md","path":"modules/vpc-interface-endpoint/README.md","sha":"5c65f1eec3964b3cc00637270f252406f9247a8a"},{"name":"main.tf","path":"modules/vpc-interface-endpoint/main.tf","sha":"1650f2a162f433fbca8db4549b29e10e796d19ea"},{"name":"outputs.tf","path":"modules/vpc-interface-endpoint/outputs.tf","sha":"17c09a4fe255b2741332b08de50d52c0fb12a0c8"},{"name":"variables.tf","path":"modules/vpc-interface-endpoint/variables.tf","sha":"8520cb7bfa6339c59b920255d6f02ac7a9c77f27"}]},{"name":"vpc-mgmt-network-acls","children":[{"name":"README.md","path":"modules/vpc-mgmt-network-acls/README.md","sha":"5afe5e9c3b7b4f371b36780e0d3be6ad73a74452"},{"name":"main.tf","path":"modules/vpc-mgmt-network-acls/main.tf","sha":"72c7e32c4fe6f5491568dd02938724b77ec94ed9"},{"name":"outputs.tf","path":"modules/vpc-mgmt-network-acls/outputs.tf","sha":"a5e4effa3263fe4789957fb3058477f0419f65ab"},{"name":"variables.tf","path":"modules/vpc-mgmt-network-acls/variables.tf","sha":"5ba1f208c32cbc738cf5340a5d5507d079cf3136"}]},{"name":"vpc-mgmt","children":[{"name":"README.md","path":"modules/vpc-mgmt/README.md","sha":"318a65966d5c649610226f0aa465da230add3bd3"},{"name":"main.tf","path":"modules/vpc-mgmt/main.tf","sha":"025955ec7b03b403eeb301162178c37f49d48839"},{"name":"outputs.tf","path":"modules/vpc-mgmt/outputs.tf","sha":"defdf79928efddcc6f7de1fa9a2492decc654a49"},{"name":"variables.tf","path":"modules/vpc-mgmt/variables.tf","sha":"f0cc294270a02c4fd13a0b9450647c8e824978d2"}]},{"name":"vpc-peering-cross-accounts-accepter","children":[{"name":"README.md","path":"modules/vpc-peering-cross-accounts-accepter/README.md","sha":"797e659ca65995c0cd7aa5bfbd08eb2466f95e34"},{"name":"main.tf","path":"modules/vpc-peering-cross-accounts-accepter/main.tf","sha":"57ef096d850bb6c9b284b2195590b69546ac9256"},{"name":"outputs.tf","path":"modules/vpc-peering-cross-accounts-accepter/outputs.tf","sha":"905c5efb879537848fd4df0d0f47465a4cf6c87c"},{"name":"variables.tf","path":"modules/vpc-peering-cross-accounts-accepter/variables.tf","sha":"b5b89c5599c939f9188cfb825aa0bc1acb7e19c8"},{"name":"versions.tf","path":"modules/vpc-peering-cross-accounts-accepter/versions.tf","sha":"eb8e08ae7cb0488cbb45e056b6079034493d6cb1"}]},{"name":"vpc-peering-cross-accounts-requester","children":[{"name":"README.md","path":"modules/vpc-peering-cross-accounts-requester/README.md","sha":"4895670d7ca6ac45916b1e8d48557e87ff0f4047"},{"name":"main.tf","path":"modules/vpc-peering-cross-accounts-requester/main.tf","sha":"52e44cc4ac9e00fc0517cbdc109c494e9f3272f5"},{"name":"outputs.tf","path":"modules/vpc-peering-cross-accounts-requester/outputs.tf","sha":"dc15d00e21644f86600bedb6359954e3bbc20f54"},{"name":"variables.tf","path":"modules/vpc-peering-cross-accounts-requester/variables.tf","sha":"c1cf6724b737f92c9529dded5fee3fc1a1d746cd"},{"name":"versions.tf","path":"modules/vpc-peering-cross-accounts-requester/versions.tf","sha":"eb8e08ae7cb0488cbb45e056b6079034493d6cb1"}]},{"name":"vpc-peering-external","children":[{"name":"README.md","path":"modules/vpc-peering-external/README.md","sha":"3a7b91706130c0901ee5f523633318a21fbe9483"},{"name":"main.tf","path":"modules/vpc-peering-external/main.tf","sha":"ddc8826ba64671ad1396046ea66554da0819d8d7"},{"name":"variables.tf","path":"modules/vpc-peering-external/variables.tf","sha":"b7a9760c9a22524b8452e83d68495b31e3af18dc"}]},{"name":"vpc-peering","children":[{"name":"README.md","path":"modules/vpc-peering/README.md","sha":"5f10e61c54fd9e175d18f4fdf5f8ae0ae8217d47"},{"name":"main.tf","path":"modules/vpc-peering/main.tf","sha":"ace2437fbd43fde59dfb04df246596ddd3686e81"},{"name":"variables.tf","path":"modules/vpc-peering/variables.tf","sha":"9cf73b8e227906759b7b1dc21f806a2892bf4523"}]}]},{"name":"terraform-cloud-enterprise-private-module-registry-placeholder.tf","path":"terraform-cloud-enterprise-private-module-registry-placeholder.tf","sha":"ae586c0fe830819580e1009d41a9074f16e65bed"},{"name":"test","children":[{"name":"README.md","path":"test/README.md","sha":"8f208d93bbe1a052d6cf03d5b10541509eb33b40"},{"name":"common","children":[{"name":"test_helpers.go","path":"test/common/test_helpers.go","sha":"03223ce979090e3912664cfd3a314c82624641bc"}]},{"name":"go.mod","path":"test/go.mod","sha":"8456a2210a34fb53eb990192e8011068789db67c"},{"name":"go.sum","path":"test/go.sum","sha":"7ef564d3e21815e6fabf3796378b8f14fa19a25e"},{"name":"network-acls","children":[{"name":"network_acls_test.go","path":"test/network-acls/network_acls_test.go","sha":"4202bb1e5ff3961b558f370109b73f2bcc5b81d8"}]},{"name":"port-range-calculator","children":[{"name":"port_range_calculator_test.go","path":"test/port-range-calculator/port_range_calculator_test.go","sha":"e983ebf9925c508f448a55029703cd624bb6acb2"}]},{"name":"route","children":[{"name":"route_test.go","path":"test/route/route_test.go","sha":"cd10f471f2023533b4c05baa5569bf49339f4146"}]},{"name":"transit_gateway","children":[{"name":"transit_gateway_test.go","path":"test/transit_gateway/transit_gateway_test.go","sha":"02b60ca734df5fe944c0d799c8563d1fb772e7d1"}]},{"name":"transit_gateway_attachment","children":[{"name":"transit_gateway_attachment_test.go","path":"test/transit_gateway_attachment/transit_gateway_attachment_test.go","sha":"e5f3c3ae6e3a9635acec59da88a7c2c81f9b868c"}]},{"name":"transit_gateway_peering_attachment","children":[{"name":"transit_gateway_peering_attachment_test.go","path":"test/transit_gateway_peering_attachment/transit_gateway_peering_attachment_test.go","sha":"adf4b70cf60739530362e3aa731abb7a3b227e44"}]},{"name":"transit_gateway_route","children":[{"name":"transit_gateway_route_test.go","path":"test/transit_gateway_route/transit_gateway_route_test.go","sha":"80975c42937243a68070ac472954020dafbaaf2d"}]},{"name":"upgrades","children":[{"name":"upgrade_test.go","path":"test/upgrades/upgrade_test.go","sha":"0ef2de8e2331aa8a95b3ae34879f036bbb8e215f"}]},{"name":"validation","children":[{"name":"validate_all_modules_and_examples_test.go","path":"test/validation/validate_all_modules_and_examples_test.go","sha":"74c928d0cbc2914e5cd708277bd857cb2375b660"}]},{"name":"vpc-app-lookup","children":[{"name":"vpc_app_lookup_test.go","path":"test/vpc-app-lookup/vpc_app_lookup_test.go","sha":"fcffc0c81574f62d58cba23881fdc0e1b900fd84"}]},{"name":"vpc-app-with-ipv6","children":[{"name":"vpc_app_ipv6_test.go","path":"test/vpc-app-with-ipv6/vpc_app_ipv6_test.go","sha":"24395e37f63c44d76dc6eb257b2b7093d640adc7"}]},{"name":"vpc-app","children":[{"name":"vpc_app_custom_az_id_test.go","path":"test/vpc-app/vpc_app_custom_az_id_test.go","sha":"1ca0ab72b6ac09ab8f04a63624c9e696d20112f7"},{"name":"vpc_app_ipv4_ipam_test.go","path":"test/vpc-app/vpc_app_ipv4_ipam_test.go","sha":"38f7a1c6b7e9dce6fad1b67591b079fdd4532272"},{"name":"vpc_app_no_nat_gateway_test.go","path":"test/vpc-app/vpc_app_no_nat_gateway_test.go","sha":"ecdc8c11906e8b0c9945d95c08bd5ee99e6dced8"},{"name":"vpc_app_private_nat_gateway_test.go","path":"test/vpc-app/vpc_app_private_nat_gateway_test.go","sha":"9903c9ea62ab895e13093cca9c79ade0d516c91e"},{"name":"vpc_app_route_tables_public_subnet_test.go","path":"test/vpc-app/vpc_app_route_tables_public_subnet_test.go","sha":"7c5938daa440b11a02a8f900bf5ed46c1bdc3c8d"},{"name":"vpc_app_subnets_disabled_test.go","path":"test/vpc-app/vpc_app_subnets_disabled_test.go","sha":"294765d85e336d51b396df1e3c24ce284e2a5aa7"},{"name":"vpc_app_test.go","path":"test/vpc-app/vpc_app_test.go","sha":"af8bdd32e71ee02438ef41946710186139bcf5a7"},{"name":"vpc_app_transit_subnets_test.go","path":"test/vpc-app/vpc_app_transit_subnets_test.go","sha":"74295edf9f3ea22fe3101f71c52965e306cb9314"},{"name":"vpc_app_with_deny_ports_test.go","path":"test/vpc-app/vpc_app_with_deny_ports_test.go","sha":"7e10467d370c5c673b5cc5d133d222ff3597b4f6"},{"name":"vpc_app_with_endpoint_test.go","path":"test/vpc-app/vpc_app_with_endpoint_test.go","sha":"502863e9ba4e7750d053a064620b6cb6b27bc95f"},{"name":"vpc_app_with_inbound_network_test.go","path":"test/vpc-app/vpc_app_with_inbound_network_test.go","sha":"8795ca36f031df799474c905047e53a17913633b"},{"name":"vpc_custom_cidr_blocks_test.go","path":"test/vpc-app/vpc_custom_cidr_blocks_test.go","sha":"8795fd3c90ed7f42bd5492c5913a8a7b80c68e3f"},{"name":"vpc_secondary_cidr_blocks_test.go","path":"test/vpc-app/vpc_secondary_cidr_blocks_test.go","sha":"dcd35c4bd6332ba8254ed8877be553a5c9793359"}]},{"name":"vpc-flow-logs","children":[{"name":"vpc_flow_logs_test.go","path":"test/vpc-flow-logs/vpc_flow_logs_test.go","sha":"8fb0acaa31bae51fe0e446d005b23159736e2078"}]},{"name":"vpc-mgmt","children":[{"name":"vpc_mgmt_no_nat_gateway_test.go","path":"test/vpc-mgmt/vpc_mgmt_no_nat_gateway_test.go","sha":"e2603deeb9b1b2df3cf11d9a0307f18a264d5ea8"},{"name":"vpc_mgmt_test.go","path":"test/vpc-mgmt/vpc_mgmt_test.go","sha":"3caa8c48a8737c8fcc8adbc0767bcb0778a10a87"},{"name":"vpc_mgmt_with_deny_ports_test.go","path":"test/vpc-mgmt/vpc_mgmt_with_deny_ports_test.go","sha":"51e631e1d6397a4237895e3e74aaa62c4d0a6c56"}]},{"name":"vpc-peering","children":[{"name":"vpc_peering_cross_accounts_test.go","path":"test/vpc-peering/vpc_peering_cross_accounts_test.go","sha":"87eabd5008b22048502c6c433467fdedd2349ad8"},{"name":"vpc_peering_external_test.go","path":"test/vpc-peering/vpc_peering_external_test.go","sha":"796fa121335334e0f03e6ebf1b7584c1c8493312"},{"name":"vpc_peering_test.go","path":"test/vpc-peering/vpc_peering_test.go","sha":"e610b3550d62393445ab79764ddc319ac447ed63"}]}]}]},"detailsContent":"<p><img src=\"https://img.shields.io/badge/tf-%3E%3D1.1.0-blue.svg\" alt=\"Terraform Version\" class=\"preview__body--diagram\"></p>\n<h1 class=\"preview__body--title\" id=\"vpc-modules\">VPC Modules</h1><div class=\"preview__body--border\"></div><p>This repo contains modules for creating best-practices Virtual Private Clouds (VPCs) on AWS.</p>\n<h4 id=\"main-modules\">Main Modules</h4>\n<p>The main modules to use is:</p>\n<ul>\n<li><a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/vpc-app\" class=\"preview__body--description--blue\">vpc-app</a>: Launch a VPC meant to house applications. The VPC includes 3 "tiers" of subnets\n(public, private app, private persistence), routing rules, security groups, network ACLs, and NAT gateways.</li>\n</ul>\n<h4 id=\"supporting-modules\">Supporting Modules</h4>\n<p>There are also several supporting modules that add extra functionality on top of vpc-app and vpc-mgmt:</p>\n<ul>\n<li><a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/vpc-peering\" class=\"preview__body--description--blue\">vpc-peering</a>: Creating peering connections between VPCs. Normally, VPCs are completely\nisolated from each other, but sometimes, you want to allow traffic to flow between them, such as allowing DevOps\ntools running in a Mgmt VPC to talk to apps in a Stage or Prod VPC. This module can create peering connections and\nroute table entries that make this sort of cross-VPC communication possible.</li>\n<li><a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/vpc-app-network-acls\" class=\"preview__body--description--blue\">vpc-app-network-acls</a>: Add a default set of Network ACLs to a VPC created using the\n<a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/vpc-app\" class=\"preview__body--description--blue\">vpc-app</a> module that control what inbound and outbound network traffic is allowed in each subnet\nof that VPC.</li>\n<li><a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/vpc-mgmt-network-acls\" class=\"preview__body--description--blue\">vpc-mgmt-network-acls</a>: Add a default set of Network ACLs to a VPC created using the\n<a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/vpc-mgmt\" class=\"preview__body--description--blue\">vpc-mgmt</a> module that control what inbound and outbound network traffic is allowed in each subnet\nof that VPC.</li>\n<li><a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/network-acl-inbound\" class=\"preview__body--description--blue\">network-acl-inbound</a>: A simple helper for adding inbound rules to a Network ACL, along\nwith the corresponding outbound rules for return traffic .</li>\n<li><a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/network-acl-outbound\" class=\"preview__body--description--blue\">network-acl-outbound</a>: A simple helper for adding outbound rules to a Network ACL,\nalong with the correspoding inbound rules for return traffic.</li>\n<li><a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/transit-gateway\" class=\"preview__body--description--blue\">transit-gateway</a>: Create a Transit Gateway, which is a managed service that allows you to\nconnect multiple VPCs and network components together.</li>\n<li><a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/transit-gateway-attachment\" class=\"preview__body--description--blue\">transit-gateway-attachment</a>: Creates a Transit Gateway Attachment, which\nallows you to connect a VPC to a Transit Gateway.</li>\n<li><a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/transit-gateway-peering-attachment\" class=\"preview__body--description--blue\">transit-gateway-peering-attachment</a>: Creates a Transit Gateway Peering\nAttachment, which allows you to connect a Transit Gateway to another Transit Gateway.</li>\n<li><a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/transit-gateway-route\" class=\"preview__body--description--blue\">transit-gateway-route</a>: Creates a Transit Gateway Route, which allows you to route\ntraffic from a Transit Gateway to a VPC.</li>\n<li><a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/vpc-dns-forwarder\" class=\"preview__body--description--blue\">vpc-dns-forwarder</a>: Set up Route 53 Resolvers to forward DNS queries from one VPC's DNS\nresolver to another.</li>\n<li><a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/vpc-flow-logs\" class=\"preview__body--description--blue\">vpc-flow-logs</a>: Create VPC flow logs to log network traffic in VPCs, subnets, and Elastic\nNetwork Interfaces.</li>\n<li>[DEPRECATED] <a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/vpc-mgmt\" class=\"preview__body--description--blue\">vpc-mgmt</a>: Launch a VPC meant to house DevOps and other management services. The\nVPC includes 2 "tiers" of subnets (public, private), routing rules, security groups, network ACLs, and NAT gateways.\n<strong>Please note that this module has been deprecated.</strong> See the module README for details.</li>\n</ul>\n<p>Click on each module above to see its documentation. Head over to the <a href=\"/repos/v0.26.15/terraform-aws-vpc/examples\" class=\"preview__body--description--blue\">examples folder</a> for examples.</p>\n<h2 class=\"preview__body--subtitle\" id=\"what-is-a-module\">What is a module?</h2>\n<p>At <a href=\"http://www.gruntwork.io\" class=\"preview__body--description--blue\" target=\"_blank\">Gruntwork</a>, we've taken the thousands of hours we spent building infrastructure on AWS and\ncondensed all that experience and code into pre-built <strong>packages</strong> or <strong>modules</strong>. Each module is a battle-tested,\nbest-practices definition of a piece of infrastructure, such as a VPC, ECS cluster, or an Auto Scaling Group. Modules\nare versioned using <a href=\"http://semver.org/\" class=\"preview__body--description--blue\" target=\"_blank\">Semantic Versioning</a> to allow Gruntwork clients to keep up to date with the\nlatest infrastructure best practices in a systematic way.</p>\n<h2 class=\"preview__body--subtitle\" id=\"how-do-you-use-a-module\">How do you use a module?</h2>\n<p>Most of our modules contain either:</p>\n<ol>\n<li><a href=\"https://www.terraform.io/\" class=\"preview__body--description--blue\" target=\"_blank\">Terraform</a> code</li>\n<li>Scripts & binaries</li>\n</ol>\n<h4 id=\"using-a-terraform-module\">Using a Terraform Module</h4>\n<p>To use a module in your Terraform templates, create a <code>module</code> resource and set its <code>source</code> field to the Git URL of\nthis repo. You should also set the <code>ref</code> parameter so you're fixed to a specific version of this repo, as the <code>master</code>\nbranch may have backwards incompatible changes (see <a href=\"https://www.terraform.io/docs/modules/sources.html\" class=\"preview__body--description--blue\" target=\"_blank\">module\nsources</a>).</p>\n<p>For example, to use <code>v1.0.8</code> of the vpc-app module, you would add the following:</p>\n<pre><span class=\"hljs-keyword\">module</span> <span class=\"hljs-string\">\"ecs_cluster\"</span> {\n source = <span class=\"hljs-string\">\"git::git@github.com:gruntwork-io/terraform-aws-vpc.git//modules/vpc-app?ref=v1.0.8\"</span>\n\n <span class=\"hljs-comment\">// set the parameters for the vpc-app module</span>\n}\n</pre>\n<p><em>Note: the double slash (<code>//</code>) is intentional and required. It's part of Terraform's Git syntax (see <a href=\"https://www.terraform.io/docs/modules/sources.html\" class=\"preview__body--description--blue\" target=\"_blank\">module\nsources</a>).</em></p>\n<p>See the module's documentation and <code>variables.tf</code> file for all the parameters you can set. Run <code>terraform init</code> to\npull the latest version of this module from this repo before running the standard <code>terraform plan</code> and\n<code>terraform apply</code> commands.</p>\n<h4 id=\"using-scripts-binaries\">Using scripts & binaries</h4>\n<p>You can install the scripts and binaries in the <code>modules</code> folder of any repo using the <a href=\"/repos/gruntwork-installer\" class=\"preview__body--description--blue\">Gruntwork\nInstaller</a>. For example, if the scripts you want to install are\nin the <code>modules/ecs-scripts</code> folder of the https://github.com/gruntwork-io/terraform-aws-ecs repo, you could install them\nas follows:</p>\n<pre><span class=\"hljs-string\">gruntwork-install </span><span class=\"hljs-built_in\">--module-name</span> <span class=\"hljs-string\">\"ecs-scripts\"</span> <span class=\"hljs-built_in\">--repo</span> <span class=\"hljs-string\">\"https://github.com/gruntwork-io/terraform-aws-ecs\"</span> <span class=\"hljs-built_in\">--tag</span> <span class=\"hljs-string\">\"0.0.1\"</span>\n</pre>\n<p>See the docs for each script & binary for detailed instructions on how to use them.</p>\n<h2 class=\"preview__body--subtitle\" id=\"whats-a-vpc\">What's a VPC?</h2>\n<p>A <a href=\"https://aws.amazon.com/vpc/\" class=\"preview__body--description--blue\" target=\"_blank\">VPC</a> or Virtual Private Cloud is a logically isolated section of your AWS cloud. Each\nVPC defines a virtual network within which you run your AWS resources, as well as rules for what can go in and out of\nthat network. This includes subnets, route tables that tell those subnets how to route inbound and outbound traffic,\nsecurity groups, access controls lists for the network (NACLs), and any other network components such as VPN connections.</p>\n<h4 id=\"learn-more-about-vp-cs\">Learn More about VPCs</h4>\n<p>See the READMEs for the <a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/vpc-app\" class=\"preview__body--description--blue\">vpc-app</a> and <a href=\"/repos/v0.26.15/terraform-aws-vpc/modules/vpc-mgmt\" class=\"preview__body--description--blue\">vpc-mgmt</a> modules for detailed info on a VPC,\nalong with best practices.</p>\n<h2 class=\"preview__body--subtitle\" id=\"developing-a-module\">Developing a module</h2>\n<h4 id=\"versioning\">Versioning</h4>\n<p>We are following the principles of <a href=\"http://semver.org/\" class=\"preview__body--description--blue\" target=\"_blank\">Semantic Versioning</a>. During initial development, the major\nversion is to 0 (e.g., <code>0.x.y</code>), which indicates the code does not yet have a stable API. Once we hit <code>1.0.0</code>, we will\nfollow these rules:</p>\n<ol>\n<li>Increment the patch version for backwards-compatible bug fixes (e.g., <code>v1.0.8 -> v1.0.9</code>).</li>\n<li>Increment the minor version for new features that are backwards-compatible (e.g., <code>v1.0.8 -> 1.1.0</code>).</li>\n<li>Increment the major version for any backwards-incompatible changes (e.g. <code>1.0.8 -> 2.0.0</code>).</li>\n</ol>\n<p>The version is defined using Git tags. Use GitHub to create a release, which will have the effect of adding a git tag.</p>\n<h4 id=\"tests\">Tests</h4>\n<p>See the <a href=\"/repos/v0.26.15/terraform-aws-vpc/test\" class=\"preview__body--description--blue\">test</a> folder for details.</p>\n<h2 class=\"preview__body--subtitle\" id=\"license\">License</h2>\n<p>Please see <a href=\"/repos/v0.26.15/terraform-aws-vpc/LICENSE.txt\" class=\"preview__body--description--blue\">LICENSE.txt</a> for details on how the code in this repo is licensed.</p>\n","repoName":"terraform-aws-vpc","repoRef":"v0.26.23","serviceDescriptor":{"serviceName":"Virtual Private Cloud (VPC)","serviceRepoName":"terraform-aws-vpc","serviceRepoOrg":"gruntwork-io","cloudProviders":["aws"],"description":"Create a Virtual Private Cloud (VPC). Includes multiple subnet tiers, NACLs, NAT gateways, Internet Gateways, and VPC peering.","imageUrl":"vpc.png","licenseType":"subscriber","technologies":["Terraform"],"compliance":[],"tags":[""]},"serviceCategoryName":"Networking","fileName":"README.md","filePath":"","title":"Repo Browser: Virtual Private Cloud (VPC)","description":"Browse the repos in the Gruntwork Infrastructure as Code Library."}