Examples
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:
- Authenticate with the registry:
terraform login registry.patterneddesigns.ca - Initialize the working directory:
terraform init - Review the execution plan:
terraform plan - Apply the configuration:
terraform apply
Usage Examples
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
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
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
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
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"