You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform状态锁获取失败,DynamoDB相关报错求助

Terraform状态锁获取失败问题解决

问题场景

terraform init执行成功,但运行terraform plan -var-file="variables.tfvars"时触发状态锁报错,具体信息如下:

Error: Error acquiring the state lock
│
│ Error message: 2 errors occurred:
│ * operation error DynamoDB: PutItem, https response error StatusCode: 400, RequestID: GR14O7ASBU1MPCN838P2JSCL97VV4KQNSO5AEMVJF66Q9ASUAAJG, api error ValidationException: One or more
│ parameter values were invalid: Missing the key id in the item
│ * Unable to retrieve item from DynamoDB table "Lock-Files": operation error DynamoDB: GetItem, https response error StatusCode: 400, RequestID:
│ DU7CSJE7862EV8O4IBG4GBEU6BVV4KQNSO5AEMVJF66Q9ASUAAJG, api error ValidationException: The provided key element does not match the schema

当前使用的backend.tf配置代码:

terraform {
  backend "s3" {
    bucket         = "my-ews-baket1.0"
    region         = "ap-southeast-1"
    key            = "End-to-End-Kubernetes-Three-Tier-DevSecOps-Project/Jenkins-Server-TF/terraform.tfstate"
    dynamodb_table = "Lock-Files"
    encrypt        = true
  }
  required_version = ">=0.13.0"
  required_providers {
    aws = {
      version = ">= 2.7.0"
      source  = "hashicorp/aws"
    }
  }
}

已执行操作:创建Lock-Files DynamoDB表、为IAM用户分配全权限、尝试terraform force-unlock但无效。

解决步骤

报错核心是DynamoDB表结构不符合Terraform状态锁的强制要求,Terraform对锁表有固定结构规范:

  • 必须包含名为id的字符串类型分区键,无需排序键
  • 不需要额外属性或索引

按以下流程修复:

  1. 删除现有Lock-Files表(确认无其他业务数据依赖)
  2. 重新创建符合要求的DynamoDB表:
    • 表名保持Lock-Files
    • 分区键名称设为id,类型选择「字符串」
    • 其余配置保持默认即可
  3. 重新执行terraform init确保后端配置加载生效
  4. 再次运行terraform plan -var-file="variables.tfvars"

若无法删除现有表,注意:DynamoDB不支持直接修改分区键的名称或类型,这种场景下重新建表是更高效的处理方式。


内容的提问来源于stack exchange,提问作者ch-ru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 15:06:11