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

- **ID:** `terraform/state-lock-dynamodb-throughput-exceeded`
- **Domain:** terraform
- **Category:** resource_error
- **Error Code:** `ProvisionedThroughputExceededException`
- **Verification:** ai_generated
- **Fix Rate:** 85%

## Root Cause

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

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| Terraform v1.5 | active | — | — |
| Terraform v1.6 | active | — | — |
| Terraform v1.7 | active | — | — |
| AWS SDK v1.44 | active | — | — |

## Workarounds

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.** (95% success)
   ```
   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`** (70% success)
   ```
   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).** (60% success)
   ```
   Use `terraform apply -lock=false` to bypass locking entirely (only for non-critical environments, as it risks state corruption).
   ```

## Dead Ends

- **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% fail)
- **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% fail)
- **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% fail)
