Labs
Do the thing. Every lab has success criteria you verify yourself, and a challenge that removes the instructions.
Each lab comes in two tiers: guided, then the same goal without the steps.
- terraformAWS VPC, Subnets, Gateways & Route TablesWrite modular Infrastructure as Code (IaC) using Terraform (>= 1.6).47mIntermediateChallenge
- terraformIAM Roles, IRSA Policies & Security GroupsCreate least-privilege IAM Roles for EKS Cluster, EKS Node Group, and Jenkins EC2.23mIntermediateChallenge
- terraformAmazon ECR Container Registry & S3 Storage BucketsAmazon ECR Container Registry & S3 Storage Buckets23mIntermediateChallenge
- terraformAmazon RDS PostgreSQL & AWS Secrets Manager IntegrationProvision a Multi-AZ Amazon RDS PostgreSQL 16 database instance (modules/rds/main.tf).31mIntermediateChallenge
- terraformAmazon EKS Cluster & Managed Node Group ProvisioningProvision Amazon EKS Cluster v1.34 (modules/eks/main.tf).31mIntermediateChallenge
- terraformTerraform FundamentalsProvider, resource, variable, output, state — the five pieces, on infrastructure small enough to read in one screen.45mBeginnerChallenge
- terraformJenkins EC2 Instance, S3 Backend & AWS Backup VaultConfigure S3 remote state backend (backend.tf) with DynamoDB lock table.23mIntermediateChallenge
- terraformTerraform ModulesTurn a working configuration into a network module and a compute module, called twice with different inputs.50mIntermediateChallenge
- ansibleAnsible Architecture, Configuration & Automated InventoryConfigure master Ansible settings in ansible.cfg (SSH keys, host key checking, privilege escalation).39mIntermediateChallenge
- terraformTerraform Remote State & LockingMove state off your laptop into an encrypted, versioned, locked backend — and prove the lock works by breaking it deliberately.45mIntermediateChallenge
- ansibleAutomated Jenkins Server & Toolchain ProvisioningStructure 8 modular Ansible roles under roles/.31mIntermediateChallenge
- dockerProduction-Grade Multi-Stage Dockerfile for Django & GunicornWrite a production multi-stage Dockerfile (python:3.13-slim).31mBeginnerChallenge
- dockerNginx Reverse Proxy & Multi-Container Docker Compose StackWrite Nginx reverse proxy configuration (nginx/nginx.conf) to proxy dynamic requests to Gunicorn and serve static assets directly.39mBeginnerChallenge
- kubernetesCore Kubernetes Workloads, ConfigMaps & SecretsCreate custom namespace nti-devops (namespace.yaml).31mIntermediateChallenge
- kubernetesApplication Routing with K8s Ingress & AWS Load Balancer ControllerCreate Kubernetes Ingress manifest ingress.yaml with AWS ALB annotations.23mIntermediateChallenge
- kubernetesKubernetes Security Hardening (NetworkPolicies) & HPAImplement zero-trust network isolation using Kubernetes NetworkPolicy (networkpolicy.yaml).47mIntermediateChallenge
- helmCreating a Custom Helm Chart for Django MicroservicesBuild a production-grade custom Helm Chart directory structure under myapp/.47mIntermediateChallenge
- helmManaging EKS Cluster Add-ons with Helm & IRSAProvision IAM Role for AWS Load Balancer Controller using Terraform IRSA module (irsa/lbc-irsa.tf).39mIntermediateChallenge
- jenkinsEnterprise Multibranch CI/CD Pipeline with SonarQube & TrivyWrite declarative Jenkinsfile multibranch pipeline script with 6 automated stages.31mAdvancedChallenge
- prometheusDeploying Kube-Prometheus-Stack on AWS EKSDeploy kube-prometheus-stack on EKS using Helm and custom values (kube-prometheus-stack-values.yaml).31mAdvancedChallenge
- prometheusCustom Prometheus Alert Rules & Grafana DashboardsCustom Prometheus Alert Rules & Grafana Dashboards23mAdvancedChallenge
- sreFull Platform Operations, Security & Troubleshooting GuideFull Platform Operations, Security & Troubleshooting Guide20mAdvancedChallenge
- kubernetesKubernetes Workloads: Pod, ReplicaSet, DeploymentWatch a Deployment create a ReplicaSet create Pods, then delete each in turn and see which come back.45mBeginnerChallenge
- linuxLinux Server AdministrationCreate users and groups, set permissions that actually hold, and manage services and packages on a server you did not build.45mBeginnerChallenge
- kubernetesKubernetes Services & Service DiscoveryGive disposable Pods a stable address, then break the selector and watch the endpoints empty.45mBeginnerChallenge
- networkingLinux Networking & TroubleshootingWork a connection failure from the outside in: DNS, route, port, firewall, application — and know which layer you are on.50mBeginnerChallenge
- kubernetesKubernetes Storage: PVC, PV and StorageClassProve a container's filesystem is disposable, then attach storage that survives, and meet the access mode that blocks a rollout.50mIntermediateChallenge
- linuxBash Automation: A Script You Can TrustWrite a backup script that fails loudly instead of silently, and schedule it so a missed run does not go unnoticed.40mBeginnerChallenge
- gitGit Branching & CollaborationWork a change through a branch, a rebase and a conflict, and recover from the three mistakes everyone makes.45mBeginnerChallenge
- awsStatic Site on S3 + CloudFrontServe a site from a private bucket through a CDN with HTTPS, correct cache headers, and a cleanup you actually run.55mBeginnerChallenge