Migrating Off Terraform Cloud/Enterprise: A Complete Guide
Compare Terraform self-hosting routes: TFE, Spacelift, Scalr. See setup demands, feature gaps, costs, and which platform fits your infra needs.
Sebastian StadilMarch 31, 2026
See how TV4 migrated 1,000 workspaces and 50,000 resources and Ably eliminated run queue bottlenecks by switching away from TFC.
The landscape of Terraform infrastructure automation has shifted dramatically in recent years. With the December 2025 announcement that HashiCorp's legacy free tier will reach end-of-life on March 31, 2026, along with ongoing feature restrictions and pricing changes, many teams are re-evaluating their infrastructure automation strategies. This comprehensive guide walks you through the complete migration process, from understanding your motivations to post-migration validation.
Whether you're forced to migrate due to HCP Terraform pricing constraints, seeking greater control over your infrastructure automation, or exploring more cost-effective alternatives, this guide provides everything you need to plan and execute a successful migration.
Part 1: Why Migrate Off Terraform Cloud/Enterprise?
HCP Terraform Changes and Free Tier Discontinuation
On December 15, 2025, HashiCorp announced the end-of-life for the legacy HCP Terraform Free plan, effective March 31, 2026. This was the third major change in a pattern of restrictions that accelerated after IBM's acquisition of HashiCorp closed in late 2024:
Key Timeline:
June 2023: Resources Under Management (RUM) pricing introduced; Free tier expanded to 500 resources
August 2023: Terraform license shifts to Business Source License (BSL); OpenTofu fork announced
April 2024: IBM announces $6.4 billion acquisition of HashiCorp
Late 2024: Acquisition closes; HashiCorp becomes IBM Software division
January 2025: terraform import command restricted to Business tier; state command limitations introduced
December 10, 2025: CDKTF deprecation announced
December 15, 2025: Free tier EOL announced via email
Why Migrate: Common Drivers
Cost Concerns
The Resources Under Management (RUM) pricing model charges per resource per hour, creating significant and often unpredictable operational expenses:
Managed Resources
Monthly Cost (Standard)
Annual Cost
1,000
~$350
~$4,200
5,000
~$2,450
~$29,400
10,000
~$10,200
~$122,400
Consider that every security group rule, IAM policy, and S3 lifecycle configuration counts as a resource. Real-world resource counts are typically 30-50% higher than initially expected.
Workflow Rigidity and Limitations
Lack of Native Dependency Workflows: Complex dependency management between workspaces requires external tooling
Limited Control Over Runner Phases: Restricted ability to inject custom logic at specific Terraform run lifecycle points
Run Task Limitations: Pricing tier restrictions limit comprehensive automation efforts
Feature Tier Gating: Specific capabilities locked behind higher-priced tiers
Desire for Greater Control
Vendor Lock-in Concerns: Long-term reliance on a single vendor's ecosystem
Customization Constraints: Prescriptive platform limits tailoring to internal standards
Business Source License Uncertainty: BSL concerns prompt consideration of fully open-source alternatives like OpenTofu
Specific Business Requirements
Integration Challenges: Seamless integration with evolving security and monitoring tools
Scalability Bottlenecks: Performance limits in high-demand scenarios
Compliance Requirements: Stringent governance requirements difficult to implement within platform constraints
Part 2: Planning Your Migration
Pre-Migration Assessment
Before embarking on migration, conduct a thorough audit of your current TFC/TFE setup:
Inventory Existing Infrastructure
Identify All Workspaces: Compile a comprehensive list including:
Purpose and environment (e.g., networking-prod, app-staging-eu)
Primary owners or teams responsible
Document VCS Repositories: For each workspace linked to VCS:
Specific repository URL
Branch(es) used for deployments
Working directory within repository (if non-root)
Record Terraform Versions: Document version discrepancies that impact migration
Map Variables and Variable Sets: Document all Terraform and environment variables with scope and sensitivity
Identify Run Triggers and Notifications: Note how runs are triggered and configured notifications
State File Audit and Backup
This is the most critical preparatory step. State files are your source of truth.
Backup Methods:
TFC/TFE API: Script downloading state file versions
terraform state pull: Individual workspaces using terraform state pull > workspace_name.tfstate
Secure Storage: Store backups in protected S3 buckets with versioning, artifact repositories, or equivalent
Additional Considerations:
Verify deployed infrastructure aligns with state (run terraform plan to check drift)
Understand state file size and complexity
Resolve significant drift before migration
Part 3: Core Migration Steps
Step 1: Final State Backup and Freeze Changes
Perform one final backup of each workspace state file
Implement temporary freeze on infrastructure changes for affected workspaces
Communicate freeze clearly to relevant teams to minimize state drift
Step 2: Prepare Your New Backend
Choose and set up your target backend:
AWS S3:
Create S3 bucket with versioning enabled
Enable server-side encryption
Create DynamoDB table for state locking
Configure appropriate IAM permissions
Azure Blob Storage:
Create Azure Storage Account with Blob Container
Enable versioning and configure access controls
Azure Blob Storage provides native state locking
Google Cloud Storage (GCS):
Create GCS bucket with versioning enabled
Configure encryption and native locking
Step 3: Update Terraform Backend Configuration
Modify your Terraform configuration to point to the new backend.
# Navigate to Terraform configuration directorycd /path/to/terraform# Initialize new backendterraform init# If automatic migration is offered, review carefully and confirm# If manual control preferred (recommended for critical workloads):terraform init -migrate-state# Push backed-up state to new backendterraform state push downloaded_workspace.tfstate
Verification:
# Run plan to verify successful migrationterraform plan# Should show "No changes" or only intentional changes# Any unexpected destructions indicate migration issues
Step 5: Manage Variables and Environment Configuration
Variables previously in TFC/TFE UI now require new management:
vault kv put secret/terraform/prod/db-password value=password-value
GitHub Encrypted Secrets:
gh secret set TF_VAR_db_password --body 'password-value'
Variable Hierarchies
Implement variable scoping appropriate to your platform:
Global variables: Applied across all workspaces
Environment-specific variables: Shared across workspaces within environment
Workspace-specific variables: Unique to individual workspace
Sensitive variables: Marked as sensitive, values masked in logs and UI
Part 7: Self-Hosted vs. Cloud Platforms Comparison
Self-Hosted Terraform Options
Terraform Enterprise (TFE)
Self-Hosting Nature: Fully self-managed Terraform platform within your infrastructure
Pros:
Maximum control over all aspects (data, security, execution)
Supports air-gapped deployments for regulated environments
Full ownership of operational lifecycle
Cons:
High operational responsibility for installation, upgrades, maintenance
Complex setup and management requirements
Significant ongoing operational overhead
Spacelift - Self-Hosted Version
Self-Hosting Nature: Fully self-hosted deployment within your AWS account
Pros:
Strong control within AWS ecosystem
Customizable to security and networking requirements
Avoids third-party SaaS control plane dependency
Cons:
Significant operational burden
Different feature release cadence than SaaS version
Scalr - Hybrid SaaS with Self-Hosted Agents
Self-Hosting Nature: SaaS control plane with self-hosted run and VCS agents
Pros:
Critical execution control within your network
Secure private VCS connection without internet exposure
Reduced operational overhead vs. full self-hosting
Cons:
Control plane remains SaaS and vendor-managed
Reliance on Scalr for control plane availability
Cloud Platform Options
Scalr (SaaS)
Key Features:
Per-run pricing model (50 free runs/month, then ~$0.99/run)
Built-in drift detection
Full GitOps support with Atlantis-style commands
Unlimited run concurrency
OpenTofu native support
Cost Model: No resource limits; scales with activity, not infrastructure size
Spacelift (SaaS)
Key Features:
Concurrency-based pricing (~$399/month)
Multi-IaC support (Terraform, OpenTofu, Pulumi, CloudFormation)
Stack dependencies for complex orchestration
Built-in drift detection and remediation
Cost Model: Unlimited deployments; cost based on parallelism
Concurrency-based pricing — structural trade-offs. Spacelift's pricing metric is parallel run slots: the bill scales with the number of slots purchased. The structural problems compared with usage-based, per-run pricing: the customer is always paying the wrong amount (too few slots queues engineers during releases, too many rents idle capacity, no setting is correct); capacity planning is offloaded to the buyer (forecasting peaks, monitoring utilization, engaging procurement to purchase additional slots as needs increase); it fails hardest exactly when you need it most, with the slot cap throttling parallel fixes during incident response and additional slots requiring procurement under pressure; and slot jumps are discontinuous — one more slot can push the customer into the next bracket and a much larger bill. Usage-based, per-run pricing scales smoothly with one more run costing one more run, with no slot to mis-provision.
env0
Key Features:
Deployment-based model
Built-in cost visibility
TTL environments for automatic cleanup
Flexible approval workflows
Cost Model: Deployments + run minutes; free tier: 3 users, 50 deployments, 500 min
Comparison Matrix
Feature
Self-Hosted TFE
Spacelift Self-Hosted
Scalr (Hybrid)
Cloud Platforms
Control
Maximum
Very High
High
Medium-High
Operational Overhead
Very High
Very High
Medium
Low
Setup Time
Weeks-Months
Weeks-Months
Days
Hours-Days
Cost Model
License + Operations
License + Operations
SaaS + Operations
SaaS
Vendor Lock-in
Lowest
Low
Medium
Medium
Built-in Governance
Extensive
Extensive
Extensive
Varies
Part 8: Step-by-Step Migration to Scalr
Scalr offers the fastest migration path with automated tooling and drop-in replacement capabilities.
Pre-Migration Checklist
[ ] All state files backed up externally
[ ] VCS access token ready
[ ] Cloud provider credentials prepared
[ ] Team members notified of migration timeline
[ ] Temporary freeze on infrastructure changes implemented
Migration Method 1: Automated Migration Module
Scalr provides a Terraform module that automates migration of most objects:
Start Planning Now: With March 31, 2026 deadline for free tier users, begin assessment immediately
Run Pilots: Test migration with non-critical workspaces first
Document Everything: Keep detailed records of current setup for smooth transition
Involve Your Team: Get buy-in from platform engineers and application teams early
Plan for Iteration: Your initial choice isn't permanent; evaluate and adjust as needed
The Terraform ecosystem continues to evolve. By choosing a platform aligned with your team's strengths and your organization's needs, you'll be positioned for success regardless of future industry changes.
See how Sierra Cedar migrated to Scalr in less than a day from homegrown Terraform tooling.
About the author
Sebastian StadilCEO at Scalr
Sebastian Stadil is the CEO at Scalr. He has over 15 years of devops experience, and started his career with AWS in 2004. Sebastian was also an early advisor to Microsoft Azure and Google Cloud.