An easy to understand, opinionated terraform composable module with batteries included 🔋.
[//]: # (// FIXME: Remove, refactor or change. (Template)
These mono-repo contains a set of Terraform modules and recipes for provisioning AWS RDS resources. The modules are designed to be composable, and opinionated. The recipes are designed to be easy to understand, and easy to use. In the following table are listed the modules included in this repository:
Module | Description |
---|---|
✅Stable default | Example module (boilerplate/template) module. |
✅Stable rds-cluster | Full battle-tested RDS cluster module (Aurora, Postgres, etc. Single, or Global clusters) |
✅Stable rds-cluster-sg | Special module that create a set of security group rules, and a security group that can be used alongside a RDS-cluster. It's specially designed for serve RDS-related configurations, such as: allowing all the database members of a cluster to see each other |
✅Stable rds-db-proxy | Full battle-tested RDS DB Proxy module (Aurora, Postgres, etc. Single, or Global clusters) It also support targets, target groups and endpoints |
The documentation is automatically generated by terraform-docs, and it's available in the module's README.md file.
[//]: # (// FIXME: Remove, refactor or change. (Template)
(put description here)
[//]: # (// FIXME: Remove, refactor or change. (Template)
(put description here)
[//]: # (// FIXME: Remove, refactor or change. (Template)
(put description here)
The module's relevant components, structure and "skeleton" is described below:
.
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.md
├── TaskFile.yml
├── default
│ └── unit
├── docs
│ └── contribution_guidelines.md
├── examples
│ ├── README.md
│ ├── TaskFile.yml
│ └── default
│ └── basic
│ ├── README.md
│ ├── config
│ │ └── fixtures.tfvars
│ ├── main.tf
│ ├── outputs.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
├── release-please-config.json
├── scripts
│ ├── containers
│ │ └── build-and-run.sh
│ ├── golang
│ │ └── go_build.sh
│ └── hooks
│ └── pre-commit-init.sh
├── taskfiles
│ ├── Taskfile.common.yml
│ ├── Taskfile.devex.yml
│ ├── Taskfile.precommit.yml
│ ├── Taskfile.terraform.yml
│ └── Taskfile.terragrunt.yml
└── 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.
- 🧰 Make — 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:
# Using taskFiles
task pc-init
# Using make
make pc-init
To run these hooks against all the files, you can use the following Task
command:
# Using taskFiles
task pc-run
# Using make
make pc-run
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)
NOTE: The releases are automatically generated using release-please-action. For more information, please refer to the release-please-action documentation
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 ❤️ 🤟