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

- **ID:** `terraform/state-lock-dynamodb-throughput-exceeded`
- **领域:** terraform
- **类别:** resource_error
- **错误码:** `ProvisionedThroughputExceededException`
- **验证级别:** ai_generated
- **修复率:** 85%

## 根因

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

## 版本兼容性

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

## 解决方案

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).
   ```

## 无效尝试

- **Increasing DynamoDB table read capacity units without increasing write capacity** — State locking uses write operations (PutItem, DeleteItem) for lock acquisition and release; increasing only read capacity doesn't help with throttled writes. (80% 失败率)
- **Switching to a different DynamoDB table with same capacity settings** — The issue is capacity, not table identity; any table with low capacity will throttle under high concurrency. (90% 失败率)
- **Adding a delay in CI/CD pipeline but not using exponential backoff** — 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. (75% 失败率)
