ADR-003: Multi-Cloud Strategy
Status
Accepted
Context
Implementation Studio initially launched with GCP-only support for cloud infrastructure. As the platform evolved, we faced a strategic decision:
- Market reality - AWS is the largest cloud provider (32% market share), many customers use AWS
- Completeness - Multi-cloud support would make the platform more valuable and applicable
- Learning value - Teaching cloud-agnostic thinking and highlighting provider differences
- Competitive advantage - Most tutorials focus on one cloud; multi-cloud expertise is valuable
- Maintenance burden - Adding AWS would double modules, documentation, and testing
- Scope question - If we add AWS, should we also add Azure? Where does it end?
The decision impacts:
- Module development - Need AWS equivalents for GCP modules
- Lab updates - Labs must support multiple providers
- Documentation - Provider comparisons, migration guides, feature parity
- Maintenance - Ongoing maintenance of multiple provider implementations
- Learning experience - Learners can choose their preferred cloud provider
Decision
We will add AWS support to Implementation Studio, creating a GCP + AWS multi-cloud platform. We will not add Azure support at this time.
AWS Support Scope
Core Infrastructure Modules (Phase 1):
- ✅ EKS Cluster (equivalent to GKE)
- ✅ VPC (equivalent to GCP VPC)
- ✅ VPC Private (equivalent to GCP Private VPC)
- ✅ ECR (equivalent to Artifact Registry)
- ✅ Security Groups (equivalent to Firewall Rules)
- ✅ RDS (equivalent to Cloud SQL)
Lab Support:
- ✅ Lab 01: Standard Deployment (GCP + AWS)
- ✅ Lab 03: Private Network Deployment (GCP + AWS)
- ✅ Lab 04: Firewall-Restricted Deployment (GCP + AWS)
- ✅ Lab 05: POC Sprint (Kind + GCP + AWS)
- ✅ Lab 06: Multi-Tenant Deployment (Kind + GCP + AWS)
- ✅ Lab 07: Integration Patterns (GCP + AWS)
- ✅ Labs 02, 08, 09: Cloud-agnostic (no changes needed)
Azure Decision
We will NOT add Azure support for the following reasons:
- Market coverage - GCP + AWS covers ~60% of cloud market
- Maintenance burden - Adding Azure would triple maintenance (GCP + AWS + Azure)
- Focus - Better to excel at GCP + AWS than be mediocre at all three
- Community - Azure support can be a community contribution if demand exists
- Resource constraints - Limited time/resources to maintain three providers
Consequences
Positive
- Broader applicability - Platform useful for AWS customers (largest market share)
- Learning value - Teaches cloud-agnostic thinking and provider differences
- Competitive differentiation - Most tutorials focus on one cloud; we cover two
- Real-world relevance - Many customers use AWS; skills are transferable
- Portfolio value - Demonstrates multi-cloud expertise (valuable for career)
- Flexibility - Learners can choose their preferred cloud provider
- Feature comparison - Highlights differences between providers (educational)
Negative
- Maintenance burden - 2x modules, 2x documentation, 2x testing
- Complexity - Different patterns (EKS vs GKE), terminology, best practices
- Documentation overhead - Must document provider differences and migration paths
- Feature parity - Must keep features in sync between providers
- Testing complexity - Must test both providers, manage two sets of credentials
- Learning curve - More documentation to navigate, potential confusion for beginners
Neutral
- Market coverage - GCP + AWS covers ~60% of market (good, not perfect)
- Future expansion - Azure can be added later if demand exists
- Community contributions - Azure support can be community-driven
Alternatives Considered
Option 1: GCP Only (Status Quo)
Pros:
- Simpler - Single provider, less complexity
- Faster development - No need to maintain AWS modules
- Lower maintenance - Half the modules, documentation, testing
- Focused - Can excel at GCP patterns
- Lower barrier - Easier for beginners (one cloud to learn)
Cons:
- Limited applicability - Only useful for GCP customers
- Missed opportunity - AWS is largest cloud provider (32% market share)
- Less valuable - Skills less transferable
- Competitive disadvantage - Other platforms may offer multi-cloud
- Learning limitation - Doesn't teach cloud-agnostic thinking
Why not chosen: While simpler, GCP-only limits the platform's applicability and learning value. AWS support significantly increases the platform's value proposition.
Option 2: AWS Only
Pros:
- Largest market - AWS has 32% market share
- Broader applicability - More customers use AWS
- Simpler - Single provider, less complexity
- Focused - Can excel at AWS patterns
Cons:
- Abandon GCP investment - Would lose all GCP modules and labs
- Less differentiation - Many tutorials already focus on AWS
- Learning limitation - Doesn't teach cloud-agnostic thinking
- Waste of effort - GCP modules already built and working
Why not chosen: Abandoning GCP would waste existing investment. GCP + AWS provides better coverage and learning value.
Option 3: GCP + AWS + Azure (All Three)
Pros:
- Complete coverage - Covers all major cloud providers
- Maximum applicability - Useful for any cloud customer
- Comprehensive - Most complete learning platform
Cons:
- 3x maintenance burden - Triple the modules, documentation, testing
- Quality risk - Harder to maintain quality across three providers
- Resource constraints - Limited time/resources to maintain three providers
- Diminishing returns - GCP + AWS covers ~60% of market; Azure adds ~20%
- Complexity - More documentation, more patterns, more confusion
- Focus dilution - May spread effort too thin
Why not chosen: The maintenance burden of three providers outweighs the benefits. GCP + AWS covers the majority of the market, and Azure can be added later if demand exists.
Option 4: Cloud-Agnostic Abstraction Layer
Pros:
- Single interface - One module interface, multiple backends
- Easier expansion - Adding new providers is easier
- Consistent patterns - Same patterns across all providers
- Less duplication - Shared logic, provider-specific implementations
Cons:
- Complexity - Abstraction layer adds complexity
- Hides differences - May hide important provider-specific differences
- Learning limitation - Doesn't teach provider-specific patterns
- Maintenance overhead - Abstraction layer itself requires maintenance
- Less educational - Learners don't see provider differences clearly
Why not chosen: While elegant, an abstraction layer would hide important provider differences and reduce educational value. Direct provider modules are clearer and more educational.
Option 5: Parallel Tracks (Separate GCP/AWS Labs)
Pros:
- Clear separation - Learners follow one track (GCP or AWS)
- No confusion - No need to choose provider in each lab
- Focused learning - Can complete without learning both
Cons:
- Duplicate content - Labs duplicated for each provider
- More maintenance - Duplicate labs to maintain
- Harder to sync - Difficult to keep labs in sync
- Less flexible - Can't easily switch providers
Why not chosen: Duplicating labs would create significant maintenance burden. Conditional module selection (single lab, choose provider) is more maintainable.
Decision Rationale
GCP + AWS was chosen because it:
- Maximizes market coverage - GCP + AWS covers ~60% of cloud market
- Balances value and maintenance - Good coverage without excessive maintenance burden
- Teaches cloud-agnostic thinking - Learners see provider differences and similarities
- Demonstrates expertise - Multi-cloud skills are valuable and differentiate the platform
- Maintains quality - Two providers is manageable; three would risk quality
- Allows future expansion - Azure can be added later if demand exists
Azure exclusion was decided because:
- Diminishing returns - GCP + AWS covers majority of market; Azure adds less value
- Maintenance burden - Three providers would triple maintenance
- Quality risk - Harder to maintain quality across three providers
- Resource constraints - Limited time/resources for three providers
- Community option - Azure can be community contribution if demand exists
Implementation
Phase 1: Core AWS Modules ✅ Complete
Created AWS equivalents for core GCP modules:
modules/aws/eks-cluster/- EKS cluster (equivalent to GKE)modules/aws/vpc/- VPC with public/private subnetsmodules/aws/vpc-private/- Private VPC with VPC endpointsmodules/aws/ecr/- Elastic Container Registrymodules/aws/security-groups/- Security groups for strict egressmodules/aws/rds/- RDS for database integration
Phase 2: Lab Updates ✅ Complete
Updated labs to support both providers:
- Lab 01 - Standard deployment (GCP + AWS)
- Lab 03 - Private network (GCP + AWS)
- Lab 04 - Firewall-restricted (GCP + AWS)
- Lab 05 - POC Sprint (Kind + GCP + AWS)
- Lab 06 - Multi-tenant (Kind + GCP + AWS)
- Lab 07 - Integration patterns (GCP + AWS)
Phase 3: Documentation ✅ Complete
Created comprehensive multi-cloud documentation:
docs/02-multi-cloud/provider-comparison.md- Technical GCP vs AWS comparisondocs/02-multi-cloud/migration-guide.md- Migration instructionsdocs/02-multi-cloud/feature-parity-matrix.md- Feature comparison- Updated all lab documentation with provider selection guides
Module Parity Strategy
Keep modules functionally equivalent:
- Same variable names where appropriate
- Same output structure
- Document differences clearly
- Provide migration guides
Example:
# GCP
module "gke_cluster" {
source = "../../modules/gcp/gke-cluster"
project_id = var.project_id
# ...
}
# AWS
module "eks_cluster" {
source = "../../modules/aws/eks-cluster"
# Equivalent variables
# ...
}Provider Selection in Labs
Labs use conditional module selection:
variable "cloud_provider" {
description = "Cloud provider: gcp or aws"
type = string
validation {
condition = contains(["gcp", "aws"], var.cloud_provider)
error_message = "Cloud provider must be 'gcp' or 'aws'."
}
}
module "cluster" {
source = var.cloud_provider == "gcp"
? "../../modules/gcp/gke-cluster"
: "../../modules/aws/eks-cluster"
# ...
}Future Considerations
Azure Support
Decision: Not adding Azure support at this time.
Future consideration: Azure support can be added if:
- Community demand exists
- Resources become available
- GCP + AWS are successful and well-maintained
Approach: Azure support would be a community contribution, not core platform feature.
Other Cloud Providers
Decision: Focus on GCP + AWS only.
Rationale: GCP + AWS covers majority of market. Adding more providers (Oracle Cloud, IBM Cloud, etc.) would dilute focus without significant value.
References
- Multi-Cloud Considerations - Strategic analysis
- Provider Comparison Guide - Technical comparison
- Migration Guide - Migration instructions
- Feature Parity Matrix - Feature comparison
Date: January 5, 2026
Author: Ben Hankins
Status: Accepted