Skip to main content

State Migration

Learn how to migrate your infrastructure state into Harness workspaces using the IaCM migration tool.

Prerequisites

Process Overview

  • Local Setup - Configure workspace settings
  • Workspace Creation - Create Harness workspaces
  • State Import - Import infrastructure state

Phase 1: Local Setup

Get the Migration Tool

Clone the IaCM migration repository:

git clone git@github.com:harness/iacm-migration.git

Alternatively, you can fork the repository if you prefer.

Configure Your Variables

Create a new <filename>.tfvars file in your local repository. This file will define:

  • Your Harness account details
  • Workspace configurations
  • Provider settings

See the example below for reference:

Sample tfvars file
account_id = "<harness-account-id>"
org = "<harness-org>"
project = "<harness-project>"
default_provisioner_type = "terraform"
default_provisioner_version = "1.5.7"
default_cost_estimation_enabled = true
default_provider_connector = "<cloud-provider-connector-name>"
default_repository_connector = "<git-repo-connector-name>"
workspaces = [
{
identifier = "workspace_demo_1"
repository = "<repo-directory>"
repository_path = "migration-demo-1"
repository_branch = "<repo-branch>"
terraform_variables = [
{
key = "instance_type"
value = "t2.micro"
value_type = "string"
}
],
},
{
identifier = "workspace_demo_2"
repository = "<repo-directory>"
repository_path = "migration-demo-2"
repository_branch = "<repo-branch>"
terraform_variables = [
{
key = "instance_type"
value = "t2.micro"
value_type = "string"
}
],
},
]

Apply Your Configuration

Run the following command in your repository directory:

terraform apply -refresh=true -var-file=<filename>.tfvars

When prompted, review the proposed changes and type yes to proceed.

What Happens Next?

This will generate an out folder containing:

  • Your new main.tf file listing your Harness workspaces
  • A migration pipeline configured to import your state

Phase 2: Create Workspaces

Now that your configuration is ready:

  • Set Up Authentication

    cd out
    export HARNESS_PLATFORM_API_KEY=<your-harness-api-key>
  • Create the Workspaces

    terraform init && terraform apply
  • Verify Creation: Check your Harness account to confirm the new workspaces are created.

Phase 3: Import Your State

  • Run Migration Pipeline

    • Navigate to your new migration pipeline in Harness
    • Select the target workspace for state import
    • Start the pipeline
  • Verify State Import

    • Go to your workspace
    • Open the State tab
    • Confirm your infrastructure state is imported correctly
  • Complete Migration Repeat the import process for each workspace you created.

🔍 Example Infrastructure Configuration

Here's a sample Terraform configuration that sets up an AWS S3 backend with a single AWS resource:

terraform {
backend "s3" {
bucket = "migration-demo"
key = "terraform.tfstate"
region = "us-east-1"
}
}

provider "aws" {
region = "us-east-1"
}

resource "aws_instance" "app1" {
instance_type = var.instance.type
ami = "ami-0bb7d64eeag57c9a9"
tags = {
"team" = "app-team"
"costcentre" = "engineering"
}
}
tip

Make sure your AWS S3 bucket contains these resources before starting the migration to avoid errors.