Implementing Naming Standards
Prerequisites
- AWS account with appropriate permissions
- Terraform >= 1.0
Step 1: Define the Naming Module
Create a shared naming configuration that will be used across all resources:
module "naming" {
source = "registry.patterneddesigns.ca/standardnat/naming-convention/aws"
version = "2.0.0"
environment = var.environment
project = "myapp"
region_code = "use1"
separator = "-"
tags = {
CostCenter = "engineering"
Owner = "platform-team"
}
}
Step 2: Apply to Infrastructure Resources
Use the naming outputs consistently across all resources:
# S3 Bucket
resource "aws_s3_bucket" "data" {
bucket = "${module.naming.prefix}-data"
tags = module.naming.tags
}
# DynamoDB Table
resource "aws_dynamodb_table" "main" {
name = "${module.naming.prefix}-main"
tags = module.naming.tags
# ...
}
# Lambda Function
module "api_handler" {
source = "registry.patterneddesigns.ca/patterneddesigns/lambda-function/aws"
version = "3.1.0"
function_name = "${module.naming.prefix}-api-handler"
runtime = "python3.12"
handler = "main.handler"
source_path = "./src"
}
Step 3: Deploy and Verify
Run terraform apply and verify your resources have consistent naming:
terraform apply
# Verify resource names
aws s3 ls | grep prod-myapp-use1
aws dynamodb list-tables | grep prod-myapp-use1
aws lambda list-functions | grep prod-myapp-use1
Expected Results
All resources should follow the pattern: {environment}-{project}-{region}-{resource}
- S3 Bucket:
prod-myapp-use1-data - DynamoDB Table:
prod-myapp-use1-main - Lambda Function:
prod-myapp-use1-api-handler