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

FeatureScalrTFC/HCP
All Major VCS ProvidersYesYes
SlackYes - Notifications & ApprovalsYes - Notification Only
TeamsYes - Notifications & ApprovalsYes - Notification Only
DatadogYes - Audit Logs, Events, & MetricsNo
SplunkNoYes
AWS EventBridgeYes - Audit Logs, Events, & MetricsNo
CheckovYesNo
OPAYesYes
InfracostYesYes
OpenMetricsYesNo
TerragruntYesNo
ServiceNowNoYes

Registries

FeatureScalrTFC/HCP
Module RegistryYesYes
Provider RegistryNo - Coming SoonYes

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 vs TFC Cost Comparison

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.

Free Migration Period

Scalr offers free migration periods to avoid being charged for two products simultaneously. If interested in applying for the migration period, please open a support ticket with the title "Free migration period" and supply the following:

  • TFC renewal date
  • Total number of workspaces

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 TermScalr Term
OrganizationEquivalent to a Scalr environment. Environments are logical groupings of workspaces, teams, users, provider configurations, policies, and more.
WorkspacesEquivalent to a Scalr workspace. This is where end users mainly operate by executing, storing state, and more.
Terraform & Environment VariablesEquivalent to Terraform and shell variables.
State FilesSame as a Scalr state file.

Check out this video if you want to see the migration in action:

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 script here. The script will migrate the following objects:

  • Organizations - Will be migrated into Scalr environments.
  • Workspaces - Will be migrated into Scalr workspaces.
  • Workspace variables - Terraform and 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