These examples demonstrate practical, real-world usage patterns for the naming-convention module. Each example is self-contained and ready to run—simply copy the configuration, customize the values for your environment, and apply.

Getting Started

To run any example, follow these steps:

  1. Authenticate with the registry: terraform login registry.patterneddesigns.ca
  2. Initialize the working directory: terraform init
  3. Review the execution plan: terraform plan
  4. Apply the configuration: terraform apply

Usage Examples

Basic Usage

Minimal configuration for resource naming

module "naming" {
  source  = "registry.patterneddesigns.ca/standardnat/naming-convention/aws"
  version = "2.0.0"

  environment = "prod"
  project     = "myapp"
}

# Use the generated prefix for resources
resource "aws_s3_bucket" "data" {
  bucket = "${module.naming.prefix}-data"
  tags   = module.naming.tags
}
# Bucket name: prod-myapp-data

Multiple Environments

Using the module across different environments

locals {
  environments = {
    dev = {
      region_code = "use1"
    }
    stg = {
      region_code = "use1"
    }
    prod = {
      region_code = "use1"
    }
  }
}

module "naming" {
  for_each = local.environments

  source  = "registry.patterneddesigns.ca/standardnat/naming-convention/aws"
  version = "2.0.0"

  environment = each.key
  project     = "myapp"
  region_code = each.value.region_code
}

# Create S3 buckets for each environment
resource "aws_s3_bucket" "data" {
  for_each = local.environments

  bucket = "${module.naming[each.key].prefix}-data"
  tags   = module.naming[each.key].tags
}
# Results:
# - dev-myapp-use1-data
# - stg-myapp-use1-data
# - prod-myapp-use1-data

Multi-Region Setup

Including region codes for multi-region deployments

module "naming_use1" {
  source  = "registry.patterneddesigns.ca/standardnat/naming-convention/aws"
  version = "2.0.0"

  environment = "prod"
  project     = "myapp"
  region_code = "use1"
}

module "naming_euw1" {
  source  = "registry.patterneddesigns.ca/standardnat/naming-convention/aws"
  version = "2.0.0"

  environment = "prod"
  project     = "myapp"
  region_code = "euw1"
}

# Primary region resources
resource "aws_s3_bucket" "primary" {
  provider = aws.us_east_1
  bucket   = "${module.naming_use1.prefix}-data"
  tags     = module.naming_use1.tags
}
# Bucket name: prod-myapp-use1-data

# Secondary region resources
resource "aws_s3_bucket" "secondary" {
  provider = aws.eu_west_1
  bucket   = "${module.naming_euw1.prefix}-data"
  tags     = module.naming_euw1.tags
}
# Bucket name: prod-myapp-euw1-data

Custom Delimiter

Using a custom separator character

module "naming" {
  source  = "registry.patterneddesigns.ca/standardnat/naming-convention/aws"
  version = "2.0.0"

  environment = "prod"
  project     = "myapp"
  region_code = "use1"
  separator   = "_"
}

resource "aws_lambda_function" "processor" {
  function_name = "${module.naming.prefix}_processor"
  # ...
}
# Function name: prod_myapp_use1_processor

resource "aws_cloudwatch_log_group" "app" {
  name = "/aws/app/${replace(module.naming.prefix, "_", "/")}"
  tags = module.naming.tags
}
# Log group: /aws/app/prod/myapp/use1

Custom Tags

Merging custom tags with generated tags

module "naming" {
  source  = "registry.patterneddesigns.ca/standardnat/naming-convention/aws"
  version = "2.0.0"

  environment = "prod"
  project     = "myapp"
  region_code = "use1"

  tags = {
    CostCenter = "engineering"
    Owner      = "platform-team"
    Compliance = "pci-dss"
  }
}

resource "aws_instance" "web" {
  ami           = "ami-12345678"
  instance_type = "t3.micro"

  tags = merge(module.naming.tags, {
    Name = "${module.naming.prefix}-web-01"
    Role = "web-server"
  })
}
# Generated tags:
# - Environment = "prod"
# - Project = "myapp"
# - Region = "use1"
# - ManagedBy = "terraform"
# - CostCenter = "engineering"
# - Owner = "platform-team"
# - Compliance = "pci-dss"
# - Name = "prod-myapp-use1-web-01"
# - Role = "web-server"