An easy to understand, opinionated terraform composable set of modules for managing Networking and Traffic in for AWS βοΈ.
This module encapsulate a set of modules that configure, and provision accounts-related resources on AWS.
The documentation is automatically generated by terraform-docs, and it's available in the module's README.md file.
Module | Status | Description |
---|---|---|
aws-vpc |
Stable β | Create a full managed Virtual Private Network |
aws-security-group |
Stable β | Create security groups, with flexible rules, and OOO rules |
aws-alb |
Stable β | Create an stand-alone application load balancer |
aws-target-groups |
Stable β | Create one or many target groups. Currently support ALB |
aws-alb-listeners |
Stable β | Create a set of listeners, that applies for an existing ALB and specified target group |
aws-alb-listeners-rules |
Stable β | Create a set of rules to apply on top of ALB listeners. |
aws-acm-certificates |
Stable β | Provision one or many AWS Certificates. Includes optionally the validation capability. |
aws-route53-zone |
Stable β | Provision a DNS hosted zone. |
aws-route53-dns-records |
Stable β | Provision a DNS record of different types. Currently supported, type A. |
target-group-attacher |
Stable β | Handy module that attach a backend with a target group E.g.: ALB). |
lookup-data |
Stable β | Module that lookup for network-related data. |
security-group-rules |
Stable β | Module that create security group rules on top of an existing security group. |
Check the example recipes π₯ here
The module's relevant components, structure and "skeleton" is described below:
βββ README.md
βββ TaskFile.yml
βββ docs
β βββ contribution_guidelines.md
βββ examples
β βββ README.md
β βββ TaskFile.yml
β βββ default
β βββ basic
β βββ README.md
β βββ config
β β βββ fixtures.tfvars
β βββ main.tf
β βββ providers.tf
β βββ variables.tf
β βββ versions.tf
βββ modules
β βββ TaskFile.yml
β βββ default
β βββ README.md
β βββ data.tf
β βββ locals.tf
β βββ main.tf
β βββ outputs.tf
β βββ variables.tf
β βββ versions.tf
βββ pre-commit-config-githubactions.yaml
βββ tests
βββ README.md
βββ TaskFile.yml
βββ default
βββ integration
β βββ default_basic_integration_test.go
β βββ go.mod
β βββ go.sum
β βββ target
β βββ basic
β βββ main.tf
βββ unit
βββ default_basic_unit_test.go
βββ go.mod
βββ go.sum
βββ target
βββ basic
βββ main.tf
Where:
- β‘οΈModules: refers to the actual module's directory. Where the
.tf
files reside. Eachsubdirectory
is a module. - β‘οΈExamples: refers to the examples directory, where the examples recipes lives. These are also used for testing the infrastructure using Terratest. For its specific documentation, query this link
- β‘οΈTests: refers to the tests directory, where the tests recipes lives. These are also used for testing the infrastructure using Terratest. For its specific documentation, query this link
Some tools that this repo uses:
- π§° Terraform β strongly recommended the latest versions
- π§° Go β justified mostly for Terratest
- π§° TaskFile β for the automation of the tasks.
NOTE: For automation during the development process, I use precommit, which is a framework for managing and maintaining multi-language pre-commit hooks. It's a great tool, and I highly recommend it. All the hooks required are installed by this script. It's recommended though to run it through the TaskFile task
pre-commit-init
.
To initialize your pre-commit configuration, and ensure all the hooks are installed, run the following command:
task pre-commit-init
To run these hooks against all the files, you can use the following Task
command:
task pre-commit
For sure you've seen that in the main Taskfile, there's a task called gen-env-aws
. That task aims to generate a proper .env.<env>.aws
dotEnv file which is used by the TaskFile.yml
tasks. If you have a proper AWS credentials file, you can run the following command:
task gen-env-aws
In simple terms, that tasks (which runs a shell script) scan your pre-existing AWS profiles, and generate the .env.<env>.aws
file for you. When it's generated, running a task that wraps a terraform command, will use the generated .env.<env>.aws
file to set the proper AWS credentials. For example:
# dev refers to the environment selected, which's how the file is also named. E.g.: env.dev.aws
ENV=dev task module-plan
Run unit tests (wrapping Terratest):
# If you want to list the available tasks.
task list
# Run the unit tests.
task test-unit
Run integration tests β if exists (wrapping Terratest):
# If you want to list the available tasks.
task list
# Run the unit tests.
task test-integration
Run all the configured pre-commit hooks (forcing them to run on all files):
task pre-commit
Run a vanilla terraform plan over the example/basic
(recipe) example:
# No arguments are required, since it's using its defaults: example as the module's name, and basic as its recipe's name.
task recipe-plan
See the detailed documentation here.
This Module follows the principles of Semantic Versioning (SemVer).
Given a version number MAJOR.MINOR.PATCH
, we increment the:
MAJOR
version when we make incompatible changes,MINOR
version when we add functionality in a backwards compatible manner, andPATCH
version when we make backwards compatible bug fixes.
- Backwards compatibility in versions
0.0.z
is not guaranteed whenz
is increased. (Initial development) - Backwards compatibility in versions
0.y.z
is not guaranteed wheny
is increased. (Pre-release)
Contributions are always encouraged and welcome! β€οΈ. For the process of accepting changes, please refer to the CONTRIBUTING.md file, and for a more detailed explanation, please refer to this guideline here.
This module is licensed under the Apache License Version 2.0, January 2004. Please see LICENSE for full details.
made/with β€οΈ π€