ProvisionedThroughputExceededException terraform resource_error ai_generated true

错误:获取状态锁时出错:ConditionalCheckFailedException:条件请求失败:ProvisionedThroughputExceededException

Error: Error acquiring the state lock: ConditionalCheckFailedException: The conditional request failed: ProvisionedThroughputExceededException

ID: terraform/state-lock-dynamodb-throughput-exceeded

其他格式: JSON · Markdown 中文 · English
85%修复率
87%置信度
1证据数
2023-11-05首次发现

版本兼容性

版本状态引入弃用备注
Terraform v1.5 active — — —
Terraform v1.6 active — — —
Terraform v1.7 active — — —
AWS SDK v1.44 active — — —

根因分析

用于状态锁定的 DynamoDB 表的读写容量单位不足,无法处理并发锁定请求,导致节流。

English

The DynamoDB table used for state locking has insufficient read/write capacity units to handle the concurrent lock requests, causing throttling.

generic

官方文档

https://developer.hashicorp.com/terraform/language/settings/backends/s3#dynamodb-state-locking

解决方案

  1. Increase DynamoDB table provisioned capacity: `aws dynamodb update-table --table-name terraform-locks --provisioned-throughput ReadCapacityUnits=10,WriteCapacityUnits=10` or switch to on-demand billing mode.
  2. Implement a retry with jitter in your CI/CD script: `for i in 1 2 3 4 5; do terraform apply && break || sleep $((RANDOM % 10 + 5)); done`
  3. Use `terraform apply -lock=false` to bypass locking entirely (only for non-critical environments, as it risks state corruption).

无效尝试

常见但无效的做法:

  1. Increasing DynamoDB table read capacity units without increasing write capacity 80% 失败

    State locking uses write operations (PutItem, DeleteItem) for lock acquisition and release; increasing only read capacity doesn't help with throttled writes.

  2. Switching to a different DynamoDB table with same capacity settings 90% 失败

    The issue is capacity, not table identity; any table with low capacity will throttle under high concurrency.

  3. Adding a delay in CI/CD pipeline but not using exponential backoff 75% 失败

    Fixed delays are ineffective because concurrent lock attempts can still cluster; Terraform's default retry uses exponential backoff, but if capacity is too low, all retries fail.