hashicorp/terraform · error
error getting bucket
Error message
error getting bucket %s: %#v
What it means
Thrown by RemoteClient.Delete when ossClient.Bucket(c.bucketName) fails before deleting the state object. Same SDK bucket-resolution failure seen elsewhere, on the delete path.
Solutions
- Validate the bucket name and endpoint in the backend block.
- Refresh credentials and re-run the workspace delete.
- Re-run 'terraform init' to rebuild the OSS client.
- Check SDK/alibaba-cloud-go version compatibility.
Defensive patterns
Strategy: validation
Validate before calling
if !validBucketName(c.bucketName) { return fmt.Errorf("invalid bucket name %q", c.bucketName) } Type guard
func validBucketName(name string) bool {
if len(name) < 3 || len(name) > 63 { return false }
m, _ := regexp.MatchString(`^[a-z0-9][a-z0-9.-]*[a-z0-9]$`, name); return m
} Prevention
- Refresh credentials before workspace deletes.
- Validate backend config in CI.
- Re-run 'terraform init' after credential changes.
When it happens
Trigger: Bucket() returns an error during workspace state deletion — invalid bucket name, misconfigured client, or expired credentials at delete time.
Common situations: Attempting 'terraform workspace delete <name>' with stale STS credentials, wrong endpoint, or a malformed bucket name in backend config.
Related errors
- error getting bucket: %#v
- error deleting state
- can't delete default state
- error getting bucket: %#v
- failed to create bucket
AI-assisted analysis of hashicorp/terraform@d32a084675 (2026-08-11).
Data as JSON: /api/errors/14da9495f89464e8.
Report an issue: GitHub.
Appendix: source
Thrown at internal/backend/remote-state/oss/client.go:138
if err := bucket.PutObject(c.stateFile, body, options...); err != nil {
return diags.Append(fmt.Errorf("failed to upload state %s: %#v", c.stateFile, err))
}
}
sum := md5.Sum(data)
if err := c.putMD5(sum[:]); err != nil {
// if this errors out, we unfortunately have to error out altogether,
// since the next Get will inevitably fail.
return diags.Append(fmt.Errorf("failed to store state MD5: %s", err))
}
return diags
}
func (c *RemoteClient) Delete() tfdiags.Diagnostics {
var diags tfdiags.Diagnostics
bucket, err := c.ossClient.Bucket(c.bucketName)
if err != nil {
return diags.Append(fmt.Errorf("error getting bucket %s: %#v", c.bucketName, err))
}
log.Printf("[DEBUG] Deleting remote state from OSS: %#v", c.stateFile)
if err := bucket.DeleteObject(c.stateFile); err != nil {
return diags.Append(fmt.Errorf("error deleting state %s: %#v", c.stateFile, err))
}
if err := c.deleteMD5(); err != nil {
log.Printf("[WARN] Error deleting state MD5: %s", err)
}
return diags
}
func (c *RemoteClient) Lock(info *statemgr.LockInfo) (string, error) {
if c.otsTable == "" {
return "", nil
}View on GitHub (pinned to d32a084675)