Skip to main content

Infrastructure Overview

The multi-region shopping mall platform uses Terraform to manage AWS infrastructure as code. It provisions over 260 resources across two regions: us-east-1 (primary) and us-west-2 (secondary).

Architecture Diagram

State Management

Terraform state is centrally managed using S3 backend with DynamoDB locking.

ComponentValue
S3 Bucketmulti-region-mall-terraform-state
DynamoDB Tableterraform-state-lock
Regionus-east-1
EncryptionAES-256 Server-Side Encryption
terraform {
backend "s3" {
bucket = "multi-region-mall-terraform-state"
key = "environments/production/us-east-1/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "terraform-state-lock"
encrypt = true
}
}

Module Dependency Diagram

Resource Status by Region

us-east-1 (Primary Region)

CategoryResource CountKey Components
Networking~30VPC, Subnets, NAT GW, Transit Gateway
Compute~45EKS Cluster, Node Groups, ALB
Data~80Aurora, DocumentDB, ElastiCache, MSK, OpenSearch
Security~35KMS, Secrets Manager, IAM, Security Groups
Edge~20CloudFront, WAF, Route53
Observability~50CloudWatch, X-Ray, Tempo Storage
Total~260

us-west-2 (Secondary Region)

CategoryResource CountKey Components
Networking~30VPC, Subnets, NAT GW, Transit Gateway
Compute~45EKS Cluster, Node Groups, ALB
Data~75Aurora (Read), DocumentDB, ElastiCache, MSK, OpenSearch
Security~35KMS, Secrets Manager, IAM, Security Groups
Observability~50CloudWatch, X-Ray, Tempo Storage
Total~235

Environment Structure

terraform/
├── environments/
│ └── production/
│ ├── us-east-1/ # Primary Region
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ ├── outputs.tf
│ │ └── terraform.tfvars
│ └── us-west-2/ # Secondary Region
│ ├── main.tf
│ ├── variables.tf
│ ├── outputs.tf
│ └── terraform.tfvars
├── global/ # Global Resources
│ ├── route53/
│ └── iam/
└── modules/ # Reusable Modules
├── compute/
├── data/
├── edge/
├── networking/
├── observability/
└── security/

Provisioning Order

When deploying to multiple regions, resources must be provisioned in the following order considering dependencies:

  1. Global Resources: Route53 Hosted Zone, IAM Roles
  2. us-east-1 Primary: Full infrastructure (including global database primary)
  3. us-west-2 Secondary: Full infrastructure (joining global databases as secondary)
Important Notes
  • Running terraform apply simultaneously in both regions may cause state conflicts
  • Always deploy the primary region first, then the secondary region
  • Global databases (Aurora, DocumentDB, ElastiCache) are created in the primary region first, then joined by the secondary

Tagging Strategy

All resources have the following tags applied:

default_tags {
tags = {
Environment = "production"
Region = var.region
ManagedBy = "terraform"
Project = "multi-region-mall"
}
}

Next Steps