home / skills / first-fluke / fullstack-starter / terraform-state-manager
This skill helps you safely manage Terraform state by importing, moving, or removing resources while preserving stability.
npx playbooks add skill first-fluke/fullstack-starter --skill terraform-state-managerReview the files below or copy the command above to add this skill to your agents.
---
name: terraform-state-manager
description: Manages Terraform state operations such as importing, moving, and removing resources. Use this skill when the user needs to refactor Terraform state, import existing infrastructure, fixing state drift, or migrate backends without destroying resources.
---
# Terraform State Manager
This skill guides you through safe Terraform state manipulation operations.
## When to Use
- Importing existing cloud resources into Terraform management (`terraform import`)
- Renaming resources or moving them into/out of modules (`terraform state mv`)
- Removing resources from Terraform control without destroying them (`terraform state rm`)
- Migrating state between backends (e.g., local to GCS/S3)
- Fixing state locks or corruption
## Critical Safety Rules
> [!IMPORTANT]
> **ALWAYS** follow these rules to prevent data loss or service downtime.
1. **Backup First**: Create a backup of your state file (`.tfstate`) before ANY operation.
```bash
terraform state pull > backup.tfstate
```
2. **Plan After**: Run `terraform plan` immediately after any state change to verify the result is a "no-op" (no changes detected) or matches expectation.
3. **One by One**: Perform operations incrementally rather than in bulk.
4. **Communicate**: Ensure no one else is running Terraform during maintenance.
## Common Operations
### 1. Importing Resources
Use when you have a resource in the cloud but not in Terraform state.
1. **Write Config**: Create the `resource` block in your `.tf` files.
2. **Import**:
```bash
terraform import <resource_address> <cloud_id>
# Example: terraform import google_storage_bucket.my_bucket my-project-bucket-name
```
3. **Verify**: Run `terraform plan`. It should be empty or show only minor metadata updates.
### 2. Moving Resources (Refactoring)
Use when renaming resources or moving them into modules.
```bash
terraform state mv <source_address> <destination_address>
# Example: terraform state mv google_storage_bucket.old_name module.storage.google_storage_bucket.new_name
```
### 3. Removing Resources
Use when you want to stop managing a resource with Terraform but keep it running.
```bash
terraform state rm <resource_address>
```
### 4. Migrating Backend
Use to change where state is stored.
1. **Update Config**: Change the `backend` block in `versions.tf` or `backend.tf`.
2. **Migrate**:
```bash
terraform init -migrate-state
```
Answer "yes" to copy the state to the new location.
## Troubleshooting
- **State Lock**: If a process crashed and left a lock:
```bash
terraform force-unlock <LOCK_ID>
```
*Warning: Be absolutely sure no other process is running.*
This skill manages Terraform state operations such as importing existing resources, moving resources between addresses or modules, removing resources from state without destroying them, and migrating state backends. It provides step-by-step commands and safety guardrails to refactor state safely in production environments. Use it to fix state drift, migrate backends, or reorganize resource layouts without unintended downtime.
The skill describes the precise Terraform CLI commands and workflow for common state tasks: terraform import, terraform state mv, terraform state rm, and terraform init -migrate-state. It emphasizes pre- and post-operation verification steps like pulling a backup of the .tfstate file and running terraform plan to confirm no unexpected changes. It also covers handling state locks and safe unlock procedures with terraform force-unlock when appropriate.
What should I do before running terraform import or terraform state mv?
Pull and save a backup of the current state, update or add the matching resource block in your config, then run the CLI command and follow with terraform plan to verify no unintended changes.
Can I migrate state to a new backend without downtime?
Yes—update the backend configuration and run terraform init -migrate-state to copy state. Confirm the new backend and run terraform plan to ensure the migration succeeded.