DAY 21 – All about terraform Modules – Create & Publish your own modules – Day Twenty One
- Terraform registry
- Syntax NameSpace/Name/Provider
- initiate via
- terraform cloud
- Syntax Hostname/NameSpace/Name/Provider
- initiate via
Modules are published on to github. It have to be named with a specific name pattern as well.
ex:- lets say you are creating a modules for AWS VPC then module have to be named terraform-aws-vpc. You publish you module to terraform registry via GitHub account.
- Supports versioning
- Generate document
- version history
- Show example
- available readme.md
Verified modules are reviewed by HashiCorp and actively maintained by contributors to stay up-to-date and compatible with both Terraform and their respective providers.
The verified badge appears next to modules that are published by a verified source.
Standard Module Structure
Lets get an idea of the structure
- main.tf – This must exists on the root directory. In other words this file is the entry point for your module.
- variables.tf , Outputs.tf– All variables and outputs should have one or two sentence descriptions that explain their purpose. (Variables that can be passed, outputs are output values)
- readme.md – description in a readme file.
- LICENSE – The license under which this module is available
- Nested Module – Optional, must be inside the modules/ directory
$ tree complete-module/ . ├── README.md ├── main.tf ├── variables.tf ├── outputs.tf ├── ... ├── modules/ │ ├── nestedA/ │ │ ├── README.md │ │ ├── variables.tf │ │ ├── main.tf │ │ ├── outputs.tf │ ├── nestedB/ │ ├── .../ ├── examples/ │ ├── exampleA/ │ │ ├── main.tf │ ├── exampleB/ │ ├── .../
Building your own Modueles
Lets use VSCode (Visual Studio Code) for this project
Make sure you have Terraform Visual Studio Code Extension is installed.
- Lets create a new directory and Name it as terraform-aws-ec2
- Building the file structure.
- Lets create file main.tf
- Now create a sub folder named terraform-aws-ec2module-tutorial and create these files also outputs.tf, variables.tf, readme.md, LICENSE
- Check out below links for contents in files
Here we are going to build a module to create EC2 preloaded with APACHE and publish it to the terraform registry with GitHub.
Lets Build a Module
Once you created and copy pasted all the codes as above, we will create an terraform module to create an EC2 instance.
An EC2 APACHE server
Goal of the module is to create a EC2 instance with Apache installed in that.
Create a Public GitHub repo
- Name the repo as terraform-aws-ec2module-tutorial.
- On your project folder cd in to terraform-aws-ec2module-tutorial.
- Initialise, add all, commit and push the code.
- Add a version tag.
git tag v1.0.0 git push --tags
Connecting to Terraform Registry
- Go to Terraform Registry
- click on to sign-in, then click to Sign in with GitHub
- Authorize hashicrop Sign in.
- Go and select publish module
- 🎉Congratulations🎉 you have successfully published your module to terraform registry