🚀 Terraback
Multi-Cloud Infrastructure as Code Tool
Terraback is an advanced CLI tool that reverse-engineers existing cloud infrastructure into clean, production-ready Terraform code with intelligent dependency discovery.
Transform legacy cloud environments into infrastructure-as-code in minutes, not months.
✨ Why Terraback?
- 🎯 90% Faster: Reduce infrastructure documentation time from weeks to hours
- 🧠 Intelligent Discovery: Automatic dependency mapping across 50+ cloud services
- 🏢 Enterprise-Ready: Production-ready templates with lifecycle management
- Multi-Cloud: Full support for AWS, Azure, and GCP
- 🔒 Security-First: Read-only permissions, no credential storage, enterprise compliance
🌟 Features
📊 Comprehensive Cloud Coverage
Core Infrastructure (Community Edition - Free):
- AWS: EC2 Instances, VPCs, Subnets, Security Groups, S3 Buckets, IAM Roles
- Azure: Virtual Machines, Virtual Networks, Subnets, Network Security Groups, Storage Accounts
- GCP: Compute Instances, Networks, Subnets, Storage Buckets
- Basic Commands: list, import, scan
- ✨ Unlimited core resources
- Basic dependency mapping
Advanced Services (Professional & Enterprise):
AWS Services:
- Container Platform: ECS Clusters, Services, Task Definitions, ECR Repositories
- Advanced Networking: CloudFront CDN, Route 53 DNS, NAT/Internet Gateways, VPC Endpoints
- Database & Caching: RDS instances, ElastiCache Redis/Memcached clusters
- Monitoring & Security: CloudWatch, Auto Scaling, ACM Certificates
- Serverless & APIs: Lambda Functions, API Gateway, SQS, SNS
- Storage: EFS, EBS Volumes/Snapshots, S3 advanced features
- Load Balancing: ALB/NLB with advanced features, listener rules, SSL policies
Azure Services:
- Compute: Virtual Machines with OS detection, Managed Disks, SSH Keys
- Networking: Virtual Networks, Subnets with delegations, NSGs with rules
- Storage: Storage Accounts with blob properties, static websites, encryption
- Load Balancing: Application Gateway, Load Balancers
- Database: Azure SQL, Cosmos DB
- Container: AKS, Container Instances
GCP Services:
- Compute: VM Instances, Persistent Disks, Machine Images
- Networking: VPC Networks, Subnets, Firewall Rules
- Storage: Cloud Storage, Persistent Disks
- Container: GKE Clusters, Node Pools
🔗 Intelligent Dependency Discovery
The --with-deps flag automatically discovers and maps complete infrastructure stacks:
terraback ec2 scan --with-deps
terraback vm scan --with-deps
🚀 Advanced Features
- Performance Optimization: API response caching, parallel scanning, smart dependency resolution
- Multi-Account/Subscription: Scan across multiple AWS accounts or Azure subscriptions
- Module Generation: Create reusable Terraform modules automatically
- State Management: Import existing resources directly into Terraform state
- Compliance Ready: Generate code following HashiCorp and cloud provider best practices
- Name Deduplication: Automatically append numeric suffixes to resource names when duplicates are detected
- SSH Key Sanitization: Generated public keys are collapsed to a single line automatically
MCP Server for AI Agents
Terraback ships an MCP (Model Context Protocol) server so AI agents such as
Claude Code, Claude Desktop, Cursor, and Windsurf can import existing cloud
infrastructure into Terraform deterministically - no LLM-guessed HCL.
uvx terraback mcp
claude mcp add terraback -- terraback mcp
Six tools over the same engine as the CLI: scan_infrastructure,
detect_unmanaged, codify_resource, codify_batch, verify_plan, and
list_supported_resources. The verify_plan tool runs a real
terraform plan and returns a parsed drift summary so agents can iterate
until the plan is imports-only. Read-only by design: bring read-only cloud
credentials (AWS ReadOnlyAccess + SecurityAudit, Azure Reader, GCP
roles/viewer); everything runs locally over stdio and nothing transits any
external service. See docs/mcp/README.md for the full tool contract.
📦 Installation
Prerequisites
- Python 3.10+ (for pip installation)
- Terraform 1.0+ (for import functionality)
- Cloud CLI tools:
- AWS:
aws CLI configured
- Azure:
az CLI configured and logged in
- GCP:
gcloud CLI configured
- (Optional)
xxhash for faster cache hashing
Install via pip (Recommended)
pip install terraback
Install via Binary
Linux/macOS:
curl -L https://dist.terraback.dev.io/releases/latest/terraback-linux -o terraback
chmod +x terraback
sudo mv terraback /usr/local/bin/
curl -L https://dist.terraback.dev.io/releases/latest/terraback-macos -o terraback
chmod +x terraback
sudo mv terraback /usr/local/bin/
Windows:
Download from releases
🚀 Quick Start
AWS Scanning
aws configure
terraback ec2 scan
terraback vpc scan --with-deps
terraback ec2 scan --region eu-west-1
terraback s3 scan --profile production
Azure Scanning
az login
terraback vm scan
terraback vm scan --resource-group production-rg
terraback vnet scan --subscription-id YOUR-SUBSCRIPTION-ID
terraback storage scan --location westeurope
Multi-Cloud Commands
terraback scan-all aws --region us-east-1
terraback scan-all azure --resource-group my-rg
terraback scan-all gcp --region us-central1 --cache-ttl 30
terraback auth-check
terraback scan-recursive ec2 --use-cache --cache-ttl 120
terraback scan-recursive vm --use-cache --parallel-workers 10
After scanning completes, Terraback automatically runs terraform fmt, terraform init and terraform validate on the generated code. Use --skip-check with any scan-all command to bypass this validation step. If you skip the checks, run terraback aws scan-all --check (or python -m terraback.utils.template_syntax_fixer <output_dir>) before invoking terraform init manually.
📋 Supported Resources
AWS Resources (Full Support)
| EC2 | Instances, Volumes, Snapshots, AMIs, Key Pairs, Launch Templates, Network Interfaces | ✅ Full Support |
| VPC | VPCs, Subnets, Security Groups, Internet/NAT Gateways, Route Tables, VPC Endpoints | ✅ Full Support |
| IAM | Roles, Policies, Instance Profiles | ✅ Full Support |
| S3 | Buckets, Versioning, Lifecycle, ACLs, Policies | ✅ Full Support |
| RDS | Instances, Subnet Groups, Parameter Groups | ✅ Full Support |
| Load Balancing | ALB, NLB, CLB, Target Groups, Listeners, SSL Policies | ✅ Full Support |
| Lambda | Functions, Layers, Permissions | ✅ Full Support |
| Route 53 | Hosted Zones, Records | ✅ Full Support |
| CloudWatch | Log Groups, Alarms, Dashboards | ✅ Full Support |
| Auto Scaling | Groups, Launch Templates, Policies | ✅ Full Support |
| ECS/ECR | Clusters, Services, Task Definitions, Repositories | ✅ Full Support |
| CloudFront | Distributions, Origin Access Controls, Cache Policies | ✅ Full Support |
| ElastiCache | Redis/Memcached Clusters, Parameter Groups | ✅ Full Support |
| ACM | Certificates | ✅ Full Support |
| EFS | File Systems, Mount Targets, Access Points | ✅ Full Support |
| API Gateway | REST APIs, Resources, Methods, Deployments | ✅ Full Support |
| SQS/SNS | Queues, Topics, Subscriptions | ✅ Full Support |
| Secrets Manager | Secrets, Versions | ✅ Full Support |
| Systems Manager | Parameters, Documents | ✅ Full Support |
Azure Resources
| Compute | Virtual Machines, Managed Disks, Availability Sets, SSH Keys | ✅ Full Support |
| Networking | Virtual Networks, Subnets, Network Security Groups, Network Interfaces | ✅ Full Support |
| Storage | Storage Accounts, Blob Storage, File Shares | ✅ Full Support |
| Load Balancing | Load Balancers, Application Gateways | ✅ Full Support |
| Database | SQL Database, Cosmos DB | ✅ Full Support |
| Container | AKS, Container Instances | ✅ Full Support |
| Identity | Managed Identities, Service Principals | ✅ Full Support |
GCP Resources
| Compute Engine | Instances, Disks, Images | ✅ Full Support |
| VPC | Networks, Subnets, Firewalls | ✅ Full Support |
| Cloud Storage | Buckets, Objects | ✅ Full Support |
| GKE | Clusters, Node Pools | ✅ Full Support |
🎯 Advanced Usage
Dependency Scanning
terraback ec2 scan --with-deps --output-dir ./infrastructure
terraback vm scan --with-deps --output-dir ./infrastructure
Enterprise Module Generation
Transform generated Terraform into production-ready enterprise modules with standardized structure:
terraback scan all aws --enterprise-modules
terraback scan all azure --enterprise-modules
terraback scan all gcp --enterprise-modules
Features:
- Automatically groups related resources into logical modules
- Creates standard module files (variables.tf, outputs.tf, locals.tf)
- Follows Terraform best practices and naming conventions
- Supports 150+ AWS, Azure, and GCP resource types
- Maintains proper resource dependencies
- Production-ready module structure out of the box
Supported Module Types:
- AWS: ALB, ASG, ECS, RDS, Lambda, S3, CloudFront, OpenSearch, and 40+ more
- Azure: VMs, AKS, App Services, Databases, Networking, Storage, and 30+ more
- GCP: Compute, GKE, Cloud Run, Cloud SQL, Networking, Storage, and 30+ more
Caching & Performance
terraback scan-all aws --cache-ttl 45
terraback scan-recursive ec2 --use-cache --cache-ttl 60
terraback cache stats
terraback cache clear
terraback scan-recursive vm --parallel-workers 10
Import to Terraform
terraback aws list-resources -o ./generated
terraback aws import -o ./generated --method auto --yes
terraback aws import -o ./generated --method bulk --yes
terraback aws import -o ./generated --method sequential --yes
terraback aws import -o ./generated --method bulk --plan-check
terraback azure import -o ./generated --method auto --yes
terraback gcp import -o ./generated --method auto --yes
terraback aws ec2 import i-1234567890abcdef0
Template Formatting Check
After scanning or when editing .tf files manually, run one of the following commands before running terraform init:
terraback aws scan-all --check
python -m terraback.utils.template_syntax_fixer <output_dir>
Before executing these validation commands, ensure the base Python dependencies
are installed. The template checker relies on packages from requirements.txt,
including Jinja2. Install them with:
pip install -r requirements.txt
This prevents "Missing newline after argument" errors.
Example command sequence:
terraback scan-all aws --skip-check --output-dir ./generated
terraback aws scan-all --check
cd generated
terraform init
The --method option controls how state is imported:
auto (default) – automatically selects the best method based on your Terraform version.
bulk – for Terraform 1.5+, Terraback generates import blocks that Terraform applies in a single operation. This is the fastest method (roughly 2-3 minutes for hundreds of resources).
sequential – imports each resource one at a time. Slower (roughly 4 seconds per resource) but avoids state-lock conflicts and works on any Terraform version.
If --method is not specified, Terraback automatically chooses bulk on Terraform 1.5+ and falls back to sequential on older versions.
Use --plan-check to run a full terraform plan validation before importing. If
the plan reports adds, changes, or destroys, the import aborts unless you also pass
--allow-drift.
⚖️ License & Pricing
Terraback uses a multi-tier licensing model:
- ✅ Core resources for AWS, Azure, GCP
- ✅ EC2, VPC, S3 (AWS)
- ✅ VMs, VNets, Storage (Azure)
- ✅ Compute, Networks, Storage (GCP)
- ✅ ✨ Unlimited core resources
- ✅ Basic dependency mapping
- ✅ Community support via GitHub
- ❌ Advanced services (RDS, Lambda, etc.)
- ❌ Multi-account support
Professional License ($499 one-time, lifetime access)
- All 50+ cloud services
- Unlimited resources and accounts
- Advanced dependency mapping
- Multi-account/subscription scanning
- RDS, Lambda, EKS, and more
- Module generation and best practices
- State file management
- Priority email support
- API access for automation
- Lifetime updates included
Enterprise Edition (Coming Soon)
- Everything in Professional
- ✅ Enterprise Module Generation - Automatic organization into production-ready modules
- ✅ Annual/multi-year licensing
- ✅ SSO integration (SAML, OIDC)
- ✅ Custom resource scanners
- ✅ On-premise deployment options
- ✅ SLA with guaranteed uptime
- ✅ Dedicated training & onboarding
- ✅ Dedicated customer success manager
- ✅ Volume licensing & team management
- ✅ Compliance reporting
📚 Documentation
Logging
Terraback respects two environment variables for logging:
TERRABACK_LOG_LEVEL controls the log verbosity (e.g. DEBUG or INFO).
TERRABACK_LOG_FILE can specify a path to write logs to a file.
Set these variables before running any command to adjust log output.
🐛 Troubleshooting
AWS Issues
aws sts get-caller-identity
export AWS_PROFILE=production
terraback ec2 scan --debug
Azure Issues
az account show
az account set --subscription "My Subscription"
az account list --output table
Common Issues
- Permission Denied: Ensure your cloud credentials have read access to resources
- Rate Limiting: Use
--use-cache flag for large infrastructures
- Module Not Found: Install with
pip install -e . for development
🚀 Roadmap
🏗️ Template System
Terraback generates Terraform files from a collection of Jinja2 templates. All
provider templates inherit from templates/common/base_resource.tf.j2, giving
them a shared set of helper macros and a common block to override. To create a
new template, extend the base file and implement the resources block:
{% extends "common/base_resource.tf.j2" %}
{% from "common/base_resource.tf.j2" import render_common_tags %}
{% block resources %}
resource "aws_my_service" "{{ item.name | tf_resource_name }}" {
name = "{{ item.name }}"
{{ render_common_tags(item, indent=2) }}
}
{% endblock %}
Complex-data macros
templates/common/macros.j2 exposes utilities for rendering lists and nested
structures. Examples include:
render_block_list – iterate over complex objects and emit nested blocks
render_json_list – output JSON formatted lists
render_depends_on – add a depends_on array when dependencies exist
These macros keep templates concise while handling deeply nested data.
Automatic dependency generation
During scanning Terraback records relationships between resources. When a
template uses render_depends_on, the discovered dependencies are inserted
automatically. For example:
resource "aws_launch_template" "example" {
...
{{ macros.render_depends_on(template.depends_on, indent=2) }}
}
If an IAM role and security group were detected as dependencies, the rendered
Terraform code becomes:
depends_on = [
aws_iam_role.example_role,
aws_security_group.example_sg,
]
Terraback calculates these relationships automatically, but you can still supply
additional items in the depends_on list to enforce custom ordering.
🧪 Development & Testing
Install the additional packages used by the test suite:
pip install -r requirements-dev.txt
Then run all tests from the project root:
pytest
📝 Line Endings
This project enforces LF line endings for all text files. Git uses .gitattributes to normalize line endings and a pre-commit hook (end-of-file-fixer) ensures files end with a single newline.
📞 Support
🙏 Acknowledgments
Built with ❤️ by DevOps engineers who understand the pain of manual cloud documentation.
Copyright © 2025 Terraback
mcp-name: io.github.bmoldo/terraback