Skip to main content
All projects
Infrastructure & DevOps
/projects/iac-migration

Infrastructure as Code Migration

  • 40% lower MTTR
  • Full AWS coverage in Terraform
  • Auditable change trail
project.iac-migration.local
Infrastructure as Code Migration project screenshot

Problem: Manual infrastructure changes led to drift, inconsistency, and slow recovery.

Solution: Led comprehensive ClickOps→Terraform migration for all AWS assets with full audit trail.

Impact: MTTR down 40%, infrastructure versioned, repeatability guaranteed.

Overview

Replaced ad-hoc console changes with Terraform-managed infrastructure and reviewable workflows so recovery and scaling follow predictable patterns.

Before / after

Change safety

Before: Drift and tribal knowledge

After: Versioned infra and reviewed applies

Decisions

Key trade-offs and design calls that shaped the final delivery.

Terraform over CloudFormation

Context: ClickOps was error-prone and unreviewable—console changes had no audit trail

Decision: Terraform for version-controlled, reviewable infrastructure—all changes go through PR review

Gradual migration over big-bang

Context: Critical services couldn't have downtime during migration

Decision: Import existing resources incrementally using terraform import rather than recreating infrastructure

Terraform Cloud over local state

Context: Team needed collaboration and state locking for concurrent changes

Decision: Remote state with CI/CD integration—prevents state conflicts and enables team-wide visibility

Architecture

The primary system boundaries, runtime pieces, and how the project was structured in production.

Terraform Cloud

State Management

Remote state with workspace isolation per environment—state locking prevents concurrent modifications.

CloudFormation to Terraform

Legacy Migration

Imported existing CloudFormation stacks to Terraform using terraform import workflows—gradual, not big-bang.

Pre-apply checks

Validation

terraform plan and custom policy checks required before any apply reaches production.

Pipeline

How changes moved from development through validation and deployment.

1

Validate

Terraform

terraform fmt, validate, and plan on every PR

2

Plan Review

GitHub PR

Infrastructure changes require human approval before production apply

3

Apply

Terraform Cloud

Automated apply after merge with state locking and audit trail

Incidents

Operational failures, rehearsals, or recovery moments that changed how the system was run.

Generic resource names causing import conflicts

P3

Resolution: Established naming conventions with environment prefixes and resource types before importing

Lesson: Use descriptive, consistent naming schemes—generic names like 'instance-1' cause confusion and import errors

Terraform import state drift

P2

Resolution: Imported existing CloudFormation resources with terraform import and immediately ran terraform plan to reconcile state

Lesson: Import then immediately plan to catch drift between actual infrastructure and desired state