Using a Module for Common Configurations

Terraform Modules

  • Code reuse

  • Remote or local source

    • Terraform Registry

  • Root module

  • Versioning

  • Provider inheritance

  • Multiple instances (no count)

Module Components

  • Input variables

  • Resources

  • Output values

Terraform Module Example

variable "name" {}

resource "aws_s3_bucket" "bucket" {
  name = var.name
  [...]
}

output "bucket_id" {
  value = aws_s3_bucket.bucket.id
}

#Create module bucket
module "bucket" {
  name = "taco-bucket"
  source ./modules/s3
}

#Use taco-bucket
resouce "aws_s3_bucket_object" {
  bucket = module.bucket.bucket_id
  [...]
}