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.