AWS EKS

AWS Elastic Kubernetes Service platform managed with Terraform (infrastructure) and Helm (workloads). Provisions an EKS cluster with RDS, ECR, S3, and an ALB ingress controller in eu-west-1 (Ireland).

Architecture Overview

Layer

Tool

Purpose

Provider

AWS eu-west-1 (Ireland)

Network

Terraform

VPC with private/public subnets across 2 AZs

Resources

Terraform

EKS, RDS PostgreSQL, ECR, S3

Namespace

Helm

AWS Load Balancer Controller

Deployment

Production instance


Configuration

apiVersion: strata.huybrechts.xyz/v1
kind: configuration
meta:
  name: aws_eks_config
  annotations:
    description: AWS EKS platform — Terraform + Helm on Elastic Kubernetes Service
  labels:
    version: "1.0.0"
  tags: [aws, eks, configuration]
spec:
  layering:
    - name: environment
      description: "Deployment environment (dev, staging, prd)"
      required: true

  deployment:
    additional_properties: false
    properties:
      environment:
        pattern: "^(dev|staging|prd)$"
        required: true
        description: "Target environment"

  zones:
    - name: us_east
      description: "US East (N. Virginia, Ohio)"
      regions:
        - us-east-1
        - us-east-2
    - name: eu_west
      description: "Europe (Ireland, Frankfurt)"
      regions:
        - eu-west-1
        - eu-central-1

  remotes:
    - name: aws_eks
      type: gitops
      repository: git@github.com:your-org/aws-eks-config.git
      reference: main
      source_path: .
      deploy_path: .

  integrations:
    - name: git
      type: git
      capabilities: [repository]
      required: true
      validation:
        command: git --version
        min_version: "2.30.0"
      authentication:
        method: cli

    - name: terraform
      type: terraform
      capabilities: [infrastructure]
      required: true
      validation:
        command: terraform --version
        min_version: "1.6.0"
      authentication:
        method: cli

    - name: aws_cli
      type: aws_cli
      capabilities: [infrastructure]
      required: true
      validation:
        command: aws --version
      authentication:
        method: cli

    - name: kubectl
      type: kubectl
      capabilities: [container]
      required: true
      validation:
        command: kubectl version --client
      authentication:
        method: cli

    - name: infracost
      type: infracost
      capabilities: [cost]
      required: false
      validation:
        command: infracost --version
        min_version: "0.10.0"
      authentication:
        method: cli

    - name: helm
      type: helm
      capabilities: [container]
      required: true
      validation:
        command: helm version
        min_version: "3.12.0"
      authentication:
        method: cli

Workspace

apiVersion: strata.huybrechts.xyz/v1
kind: workspace
meta:
  name: aws_eks_platform
  annotations:
    description: AWS EKS workspace — Terraform provisions, Helm deploys
  labels:
    version: "1.0.0"
  tags: [aws, eks, workspace]
spec:
  providers:
    - name: aws_eu_west_1
      file: "@aws_eks/stack/aws-provider-eu-west-1.yaml"

  provisioners:
    - name: terraform
      provisioner: terraform
      source:
        repository: aws_eks
        source_path: terraform

    - name: helm
      provisioner: helm
      source:
        repository: aws_eks
        source_path: charts

  topology:
    - name: eks_cluster
      provider: aws_eu_west_1
      provisioner: terraform
      type: kubernetes
      components:
        - resource: eks_cluster
        - resource: rds_postgres
        - resource: ecr
        - resource: s3_artifacts
      namespaces:
        - namespace: platform

  resources:
    - name: eks_cluster
      file: "@aws_eks/stack/aws-res-eks.yaml"
      description: AWS EKS managed Kubernetes cluster
    - name: rds_postgres
      file: "@aws_eks/stack/aws-res-rds.yaml"
      description: AWS RDS PostgreSQL (Multi-AZ)
    - name: ecr
      file: "@aws_eks/stack/aws-res-ecr.yaml"
      description: AWS Elastic Container Registry
    - name: s3_artifacts
      file: "@aws_eks/stack/aws-res-s3.yaml"
      description: S3 bucket for artifacts and state

  namespaces:
    - name: platform
      file: "@aws_eks/stack/aws-ns-platform.yaml"

Provider

apiVersion: strata.huybrechts.xyz/v1
kind: provider
meta:
  name: aws_eu_west_1
  annotations:
    description: AWS Europe (Ireland) region
  labels:
    version: "1.0.0"
  tags: [aws, provider, ireland]
spec:
  properties:
    type: aws
    region: eu-west-1

Network

VPC with public and private subnets across two availability zones.

apiVersion: strata.huybrechts.xyz/v1
kind: network
meta:
  name: aws_net_vpc
  annotations:
    description: AWS VPC for EKS platform and supporting services
  labels:
    version: "1.0.0"
  tags: [aws, network, vpc]
spec:
  networks:
    - name: vpc_platform
      description: Platform VPC with multi-AZ subnets
      address_space:
        - value: "10.0.0.0/16"
      subnets:
        - name: subnet_eks_private_a
          cidr:
            value: "10.0.0.0/19"
          description: EKS private subnet (AZ-a)
        - name: subnet_eks_private_b
          cidr:
            value: "10.0.32.0/19"
          description: EKS private subnet (AZ-b)
        - name: subnet_rds_a
          cidr:
            value: "10.0.64.0/24"
          description: RDS subnet (AZ-a)
        - name: subnet_rds_b
          cidr:
            value: "10.0.65.0/24"
          description: RDS subnet (AZ-b)
        - name: subnet_public_a
          cidr:
            value: "10.0.128.0/24"
          description: Public subnet for ALB (AZ-a)
        - name: subnet_public_b
          cidr:
            value: "10.0.129.0/24"
          description: Public subnet for ALB (AZ-b)

Resources

EKS Cluster

apiVersion: strata.huybrechts.xyz/v1
kind: resource
meta:
  name: aws_eks_cluster
  annotations:
    description: AWS EKS cluster with managed node group
  labels:
    version: "1.0.0"
  tags: [aws, eks, resource, kubernetes]
spec:
  properties:
    provider_type: aws
    resource_type: eks_cluster
    category: compute
    subcategory: kubernetes
  configuration:
    kubernetes_version: "1.30"
    node_group_instance_types: ["m5.xlarge"]
    node_group_desired: 3
    node_group_min: 2
    node_group_max: 6
    endpoint_private_access: true
    endpoint_public_access: false

RDS PostgreSQL

apiVersion: strata.huybrechts.xyz/v1
kind: resource
meta:
  name: aws_rds_postgres
  annotations:
    description: AWS RDS PostgreSQL instance with Multi-AZ
  labels:
    version: "1.0.0"
  tags: [aws, resource, rds, postgresql, database]
spec:
  properties:
    provider_type: aws
    resource_type: rds_instance
    category: database
    subcategory: relational
  configuration:
    engine: postgres
    engine_version: "16.3"
    instance_class: db.r6g.large
    allocated_storage: 100
    max_allocated_storage: 500
    multi_az: true
    storage_encrypted: true
    deletion_protection: true
    backup_retention_period: 14

Elastic Container Registry

apiVersion: strata.huybrechts.xyz/v1
kind: resource
meta:
  name: aws_ecr
  annotations:
    description: AWS Elastic Container Registry for container images
  labels:
    version: "1.0.0"
  tags: [aws, resource, ecr, registry]
spec:
  properties:
    provider_type: aws
    resource_type: ecr_repository
    category: container
    subcategory: registry
  configuration:
    image_tag_mutability: IMMUTABLE
    scan_on_push: true
    encryption_type: KMS
    lifecycle_policy:
      max_image_count: 50

S3 Artifacts Bucket

apiVersion: strata.huybrechts.xyz/v1
kind: resource
meta:
  name: aws_s3_artifacts
  annotations:
    description: AWS S3 bucket for build artifacts and deployment state
  labels:
    version: "1.0.0"
  tags: [aws, resource, s3, storage]
spec:
  properties:
    provider_type: aws
    resource_type: s3_bucket
    category: storage
    subcategory: object
  configuration:
    versioning: true
    encryption: aws:kms
    block_public_access: true
    lifecycle_rules:
      - transition_days: 90
        storage_class: GLACIER
      - expiration_days: 365

Namespace

apiVersion: strata.huybrechts.xyz/v1
kind: namespace
meta:
  name: aws_eks_ns_platform
  annotations:
    description: Platform namespace — ingress controller and monitoring
  labels:
    version: "1.0.0"
  tags: [aws, eks, namespace, platform]
spec:
  modules:
    - name: alb_controller
      file: "@aws_eks/stack/aws-mod-alb-controller.yaml"

Module

AWS Load Balancer Controller

apiVersion: strata.huybrechts.xyz/v1
kind: module
meta:
  name: aws_eks_mod_alb_controller
  annotations:
    description: AWS Load Balancer Controller for EKS ingress
  labels:
    version: "1.0.0"
  tags: [aws, eks, module, alb, ingress]
spec:
  type: helm
  source:
    chart_repository: https://aws.github.io/eks-charts
    chart_name: aws-load-balancer-controller
    chart_version: "1.7.0"
  kubernetes_namespace: kube-system
  services:
    - name: aws-load-balancer-controller
      configuration:
        clusterName: "${EKS_CLUSTER_NAME}"
        serviceAccount:
          create: true
          name: aws-load-balancer-controller

Environment

apiVersion: strata.huybrechts.xyz/v1
kind: environment
meta:
  name: aws_eks_env_prd
  annotations:
    description: Production environment for AWS EKS platform
  labels:
    version: "1.0.0"
  tags: [aws, eks, production, environment]
spec:
  variables:
    - key: WORKSPACE
      store: constant
      value: aws_eks
    - key: ENVIRONMENT
      store: constant
      value: prd
    - key: AWS_REGION
      store: constant
      value: eu-west-1
    - key: AWS_ACCOUNT_ID
      store: environment
      value: AWS_ACCOUNT_ID
    - key: EKS_CLUSTER_NAME
      store: constant
      value: eks-platform-prd
    - key: VPC_CIDR
      store: constant
      value: "10.0.0.0/16"
    - key: RDS_INSTANCE_NAME
      store: constant
      value: rds-platform-prd
    - key: ECR_REGISTRY
      store: constant
      value: "${AWS_ACCOUNT_ID}.dkr.ecr.eu-west-1.amazonaws.com"
    - key: S3_ARTIFACTS_BUCKET
      store: constant
      value: platform-artifacts-prd-eu-west-1

  secrets:
    - key: AWS_ACCESS_KEY_ID
      store: environment
      value: AWS_ACCESS_KEY_ID
    - key: AWS_SECRET_ACCESS_KEY
      store: environment
      value: AWS_SECRET_ACCESS_KEY

Deployment

apiVersion: strata.huybrechts.xyz/v1
kind: deployment
meta:
  name: aws_eks_deploy_prd
  annotations:
    description: Production deployment for AWS EKS platform
  labels:
    version: "1.0.0"
  tags: [aws, eks, production, deployment]
spec:
  layers:
    environment: prd

  properties:
    environment: prd

  workspace:
    name: aws_eks_platform
    description: AWS EKS Platform
    file: "@aws_eks/stack/aws-ws-platform.yaml"

  environments:
    - "@aws_eks/environments/aws-eks-env-prd.yaml"

  stages:
    - name: infrastructure
      provisioner: terraform
      scope: all
      on_failure: stop

    - name: platform
      provisioner: helm
      scope: all
      depends_on: [infrastructure]
      on_failure: stop