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