hashicorp/terraform · critical
Error loading state
Error message
Error loading state: %s
What it means
Thrown when back.StateMgr(workspace) returns diagnostics with errors during init. StateMgr constructs the state manager for the resolved workspace; failures typically originate from the backend (e.g., remote state store misconfiguration, auth failure, unreachable backend).
Solutions
- Inspect the wrapped sDiags for the backend-specific cause.
- Verify backend config (bucket, key, region, credentials) and network reachability.
- Confirm IAM/permissions on the remote state location and re-run init.
Defensive patterns
Strategy: try-catch
Validate before calling
// Sanity-check backend config reachability before init (S3 example).
func s3BackendReachable(bucket, region string) error {
cfg, err := aws.NewConfig(region)
if err != nil { return err }
return cfg.HeadBucket(bucket)
} Try / catch
// Inspect sDiags for backend-specific errors.
if sDiags.HasErrors() {
for _, d := range sDiags { log.Printf("backend: %s", d.Description().Summary) }
} Prevention
- Validate backend config (bucket/key/region/credentials) before init.
- Confirm credentials are unexpired and have state-object permissions.
- Pre-test remote backend reachability from the runner.
When it happens
Trigger: Backend returns errors constructing the state manager: invalid remote state config (S3 bucket/DynamoDB table missing, HTTP backend auth failure, Consul/HTTP unreachable), or unsupported backend operation for the workspace.
Common situations: Misconfigured S3 backend (missing bucket/table/region); expired cloud credentials; remote backend endpoint down; backend type mismatch; insufficient IAM permissions on state objects.
Related errors
- Error refreshing state
- Error selecting workspace
- Failed to load state
- backendDiags.Err()
- Error inspecting states in the
AI-assisted analysis of hashicorp/terraform@d32a084675 (2026-08-11).
Data as JSON: /api/errors/d23406d6e65a9648.
Report an issue: GitHub.
Appendix: source
Thrown at internal/command/init_run.go:322
rootModule: rootModEarly,
}
var state *states.State
// If we have a functional backend (either just initialized or initialized
// on a previous run) we'll use the current state as a potential source
// of provider dependencies.
if back != nil {
c.ignoreRemoteVersionConflict(back)
workspace, err := c.Workspace()
if err != nil {
diags = diags.Append(fmt.Errorf("Error selecting workspace: %s", err))
view.Diagnostics(diags)
return 1
}
sMgr, sDiags := back.StateMgr(workspace)
if sDiags.HasErrors() {
diags = diags.Append(fmt.Errorf("Error loading state: %s", sDiags.Err()))
view.Diagnostics(diags)
return 1
}
if err := sMgr.RefreshState(); err != nil {
diags = diags.Append(fmt.Errorf("Error refreshing state: %s", err))
view.Diagnostics(diags)
return 1
}
state = sMgr.State()
}
if initArgs.Get {
modsOutput, modsAbort, modsDiags := c.getModules(ctx, path, initArgs.TestsDirectory, rootModEarly, initArgs.Upgrade, view, policyClient)
diags = diags.Append(modsDiags)
if modsAbort || modsDiags.HasErrors() {
view.Diagnostics(diags)View on GitHub (pinned to d32a084675)