Terraform modules are reusable packages of Terraform configuration that can be used to organize and share infrastructure code. With modules, you can group related resources together and use them across multiple configurations. This allows for better organization and easier management of your infrastructure as code.
Creating a Module
To create a module, you will first need to create a new directory with the module's name. Inside this directory, you will create the main.tf
file, which will contain the module's configuration. Here is an example of a module that creates an S3 bucket:
resource "aws_s3_bucket" "example" { bucket = "example-bucket"}
Code language: JavaScript (javascript)
You can also create an inputs.tf
file to define any variables that the module will accept as input. In this example, we could create an inputs.tf
file with the following code:
variable "bucket_name" { description = "The name of the S3 bucket"}
Code language: JavaScript (javascript)
And then update the main.tf
to use this variable:
resource "aws_s3_bucket" "example" { bucket = var.bucket_name}
Code language: JavaScript (javascript)
It's also important to create an outputs.tf
file to define any output values that the module will return.
Using a Module
To use a module, you will need to create a module
block in your Terraform configuration and specify the module's source and input variables. Here is an example of how to use the above S3 bucket module:
module "s3_bucket" { source = "./modules/s3_bucket" bucket_name = "example-bucket"}
Code language: JavaScript (javascript)
In this example, we are using the module
block to reference the s3_bucket
module located in the ./modules
directory. We also passed the bucket_name
variable as “example-bucket”.
It's also possible to import modules from remote sources such as a Git repository. This allows you to share modules with others and use modules created by the community.
module "s3_bucket" { source = "git::https://github.com/username/s3-bucket-module.git" bucket_name = "example-bucket"}
Code language: JavaScript (javascript)
Conclusion
Terraform modules are a powerful way to organize and share your infrastructure code. By creating and using modules, you can group related resources together and use them across multiple configurations. This allows for better organization and easier management of your infrastructure as code. Keep exploring and experimenting with Terraform modules to discover their full potential.
It is important to note that modules are a way to organize your code and can be very helpful when working on large projects, but it is not a must-use feature. Use them when it makes sense for your use case and keep your code as simple as possible.