Skip to main content
Shipyard uses a modular, three-tier Terraform architecture to provision and manage infrastructure on AWS. This layered approach ensures proper dependency management, maintainability, and safe deployments.

Three-Tier Architecture

The infrastructure is divided into three layers, each building on the previous one:

Layer 1: Infrastructure

The foundation layer provisions core AWS infrastructure:
  • VPC & Networking: Virtual Private Cloud, subnets, NAT gateways
  • EKS Cluster: Kubernetes cluster and node groups
  • Tailscale VPN: Secure network access via subnet router
  • Vault Infrastructure: KMS keys and DynamoDB tables for secrets management

Layer 2: Platform

The platform layer deploys essential Kubernetes components:
  • AWS Load Balancer Controller: Manages ALBs for ingress
  • Cert Manager: Automated TLS certificate management
  • External Secrets Operator: Syncs secrets from Vault to Kubernetes
  • Vault Helm: Deploys Vault server on Kubernetes

Layer 3: Apps

The applications layer deploys user-facing services:
  • ArgoCD: GitOps continuous delivery
  • Traefik: Ingress controller and routing
  • Application TLS Certificates: Automated cert provisioning
  • Vault Policies: Application-specific access controls

Layer Dependencies

Each layer depends on outputs from the previous layer:

Directory Structure

The Terraform code is organized as follows:

Deployment Flow

The complete deployment follows this sequence:
1

Bootstrap

Create S3 bucket and DynamoDB table for Terraform state management
2

Infrastructure Layer

Deploy VPC, EKS cluster, Tailscale VPN, and Vault infrastructure
3

Platform Layer

Install Kubernetes platform components and initialize Vault
4

Apps Layer

Deploy ArgoCD, Traefik, and application configurations

Next Steps

Prerequisites

Set up required tools and accounts

Bootstrap

Initialize Terraform state backend