Migrating From Terraform Cloud
Introduction
If you are currently using Terraform Cloud and looking into alternatives, the information below will give you the full picture of how Scalr compares to Terraform Cloud in terms of features and pricing. The guide also covers migration methods ranging from fully automated to a manual process depending on your needs.
Feature Comparison
Pipeline
Feature | Scalr | TFC/HCP |
---|---|---|
IaC Tooling | Terraform OpenTofu Terragrunt | Terraform |
Workspace Types | Native Terraform CLI VCS based (GitOps) No Code API-Driven | Native Terraform CLI VCS based (GitOps) No Code API-Driven |
Support for Atlantis Style Workflows | Yes | No |
Remote Backend Options | Scalr All supported backend types | TFC Only |
Drift Detection | Yes | Yes |
Run Triggers | Yes | Yes |
Ephemeral Workspaces | Yes | Yes |
Comments Posted to PR | Yes | No |
Run Tasks | Yes, see list here | Yes, see list here |
Security
Feature | Scalr | TFC/HCP |
---|---|---|
State Storage | Scalr GCP Bucket S3 Bucket | TFC Only |
Audit Logs | Yes | Yes |
OIDC Authentication to cloud providers (Dynamic Credentials) | Yes | Yes |
RBAC | System + Granular User-Defined Roles | System Only |
SAML 2.0 Support | Yes | Yes |
SCIM Protocol Support | Yes | No |
Policy as Code | OPA & Checkov | OPA & Sentinel |
Self-Hosted Agents | Yes, for runs and VCS connections | Runs only |
Integrations
Feature | Scalr | TFC/HCP |
---|---|---|
All Major VCS Providers | Yes | Yes |
Slack | Yes - Notifications & Approvals | Yes - Notification Only |
Teams | Yes - Notifications & Approvals | Yes - Notification Only |
Datadog | Yes - Audit Logs, Events, & Metrics | No |
Splunk | No | Yes |
AWS EventBridge | Yes - Audit Logs, Events, & Metrics | No |
Checkov | Yes | No |
OPA | Yes | Yes |
Infracost | Yes | Yes |
OpenMetrics | Yes | No |
Terragrunt | Yes | No |
ServiceNow | No | Yes |
Registries
Feature | Scalr | TFC/HCP |
---|---|---|
Module Registry | Yes | Yes |
Provider Registry | No - Coming Soon | Yes |
Reporting
Feature | Scalr | TFC/HCP |
---|---|---|
Reporting | Yes | Yes |
Cross Account Workspace Dashboard | Yes | No |
Cross Account Runs Dashboard | Yes | No |
Pricing Comparison
Component | Scalr | TFC |
---|---|---|
Concurrency | Starts at 5, increased free of charge as customers grow | Standard Tier: 3 Plus Tier: 10 |
Pricing Unit | Per Run - No other factors in the price | Per Resource Under Management |
Support | Included in price (24x7x365) | Tiered Options |
Feature Gating | All features included on the paid and free plan | Different feature sets per tier |
Scalr Cost Estimation
Interested in migrating to Scalr, but not sure what it will cost you? This script can be used to call the TFC API to get the total number of runs that have ever been executed in your TFC account. Unfortunately, the API doesn't allow for date filters so you will still need to estimate the per-month or year usage.
Scalr does not charge for all runs, see the following as a guideline to understand what runs you will not be charged for:
- Runs executed based on the drift detector schedule.
- Runs that use local execution mode in the workspace.
- Runs that are stopped by an OPA policy in the pre-plan phase.
- Runs that Checkov stops due to security violations in the pre-plan phase.
- All runs that fail during the Terraform init due to. A couple examples of this, but not limited to are:
- Missing folder or var file
- Terraform code parsing errors
- Connectivity errors (registries, docker, etc)
- Broken provider configs errors
- Runs that fail during the cost-estimate phase.
- Runs failed due to an internal Scalr error.
Migration Guide
Before you migrate from TFC to Scalr, it's important to understand the terminology of both products so it's easier to understand what a migration would look like:
TFC Term | Scalr Term |
---|---|
Organization | Equivalent to a Scalr environment. Environments are logical groupings of workspaces, teams, users, provider configurations, policies, and more. |
Workspaces | Equivalent to a Scalr workspace. This is where end users mainly operate by executing, storing state, and more. |
Terraform & Environment Variables | Equivalent to Terraform and shell variables. |
State Files | Same as a Scalr state file. |
Before Migrating
Regardless of the method that is used, the following steps should be taken before starting the migration:
- Stop any runs or processes that might start runs in TFC to avoid runs executing in two places.
- Add or amend the remote backend settings in the Terraform configuration files if the Terraform/Tofu CLI will be needed:
terraform {
backend "remote" {
hostname = "<account-name>.scalr.io"
organization = "<scalr-environment-name>"
workspaces {
name = "<workspace-name>"
}
}
}
NOTE: It is possible to use the cloud
backend as well.
Terraform Cloud Migration Module
If you are currently using Terraform Cloud or Enterprise and planning to migrate to Scalr, the quickest way to do this is by using our TFC migration module here. The module will migrate the following objects:
- Organizations - Will be migrated into Scalr environments.
- Workspaces - Will be migrated into Scalr workspaces. Only VCS-based workspaces will be migrated. CLI-driven workspaces have to be migrated manually.
- Workspace variables - Terraform and non-sensitive environment variables will be created as Terraform and shell variables in Scalr.
- State files - The current workspace state file will be migrated.
See the full description and instructions in the module readme.
Migrating with the Terraform CLI
If you would prefer to migrate workspaces one by one, this can be done with the Terraform CLI:
First, pull down the state from Terraform Cloud:
terraform state pull > terraform.state
Next, get the API token from Scalr:
terraform login <account-name>.scalr.io
Update your Terraform code and add Scalr as the new cloud backend. You will need to add the hostname field:
terraform {
backend "remote" {
hostname = "<account-name>.scalr.io"
organization = "<scalr-environment-name>"
workspaces {
name = "<workspace-name>"
}
}
}
To initialize Scalr as the backend by running:
terraform init
Run the following to push the state into Scalr:
terraform state push terraform.state
Updated 7 days ago