Demonstrations
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:
- Prerequisites met:
Terraform >= 1.0, AWS CLI configured - Authenticate with the registry:
terraform login registry.patterneddesigns.ca - Clone the demonstration repository:
git clone <demo-repo-url> - Follow the step-by-step instructions below
Step-by-Step Guides
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
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:
| Environment | S3 Bucket | SQS Queue |
|---|---|---|
| dev | dev-myapp-use1-data | dev-myapp-use1-main |
| stg | stg-myapp-use1-data | stg-myapp-use1-main |
| prod | prod-myapp-use1-data | prod-myapp-use1-main |