These step-by-step demonstrations walk you through complete workflows using the naming-convention module. Each demonstration includes prerequisites, detailed instructions, and verification steps.

Getting Started

To follow any demonstration, ensure you have:

  1. Prerequisites met: Terraform >= 1.0, AWS CLI configured
  2. Authenticate with the registry: terraform login registry.patterneddesigns.ca
  3. Clone the demonstration repository: git clone <demo-repo-url>
  4. Follow the step-by-step instructions below

Step-by-Step Guides

Implementing Naming Standards

Set up organization-wide naming standards with the naming-convention module

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

Cross-Environment Deployment

Deploy consistent infrastructure across multiple environments

Prerequisites

  • AWS account with appropriate permissions
  • Terraform >= 1.0
  • Terraform workspaces configured for each environment

Step 1: Create Environment Configuration

Define environment-specific variables:

# environments/dev.tfvars
environment = "dev"
region_code = "use1"

# environments/stg.tfvars
environment = "stg"
region_code = "use1"

# environments/prod.tfvars
environment = "prod"
region_code = "use1"

Step 2: Configure the Naming Module

variable "environment" {
  type        = string
  description = "Environment name"
}

variable "region_code" {
  type        = string
  description = "Region code"
}

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

  environment = var.environment
  project     = "myapp"
  region_code = var.region_code
}

Step 3: Define Resources

resource "aws_s3_bucket" "data" {
  bucket = "${module.naming.prefix}-data"
  tags   = module.naming.tags
}

resource "aws_sqs_queue" "main" {
  name = "${module.naming.prefix}-main"
  tags = module.naming.tags
}

Step 4: Deploy to Each Environment

# Deploy to development
terraform workspace select dev
terraform apply -var-file=environments/dev.tfvars

# Deploy to staging
terraform workspace select stg
terraform apply -var-file=environments/stg.tfvars

# Deploy to production
terraform workspace select prod
terraform apply -var-file=environments/prod.tfvars

Expected Results

Each environment will have consistently named resources:

EnvironmentS3 BucketSQS Queue
devdev-myapp-use1-datadev-myapp-use1-main
stgstg-myapp-use1-datastg-myapp-use1-main
prodprod-myapp-use1-dataprod-myapp-use1-main