ProvisionedThroughputExceededException terraform resource_error ai_generated true

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

ID: terraform/state-lock-dynamodb-throttling

Also available as: JSON · Markdown · 中文
80%Fix Rate
85%Confidence
1Evidence
2024-04-05First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
Terraform 1.5.0 active — — —
Terraform 1.6.0 active — — —
Terraform 1.7.0 active — — —

Root Cause

DynamoDB table used for state locking is experiencing throttling due to high request rates, exceeding its provisioned read/write capacity.

generic

中文

用于状态锁定的 DynamoDB 表因请求速率过高而受到限流,超出了预置的读写容量。

Official Documentation

https://developer.hashicorp.com/terraform/language/settings/backends/s3#dynamodb-table-configuration

Workarounds

  1. 85% success Increase the DynamoDB table's provisioned read and write capacity units (RCU/WCU) to handle the peak load. Switch to on-demand capacity if workload is unpredictable.
    Increase the DynamoDB table's provisioned read and write capacity units (RCU/WCU) to handle the peak load. Switch to on-demand capacity if workload is unpredictable.
  2. 75% success Implement client-side retry logic by wrapping terraform commands in a bash script with exponential backoff.
    Implement client-side retry logic by wrapping terraform commands in a bash script with exponential backoff.
  3. 70% success Reduce the frequency of terraform apply/plan operations during peak hours, or stagger multiple CI/CD pipelines to avoid concurrent lock attempts.
    Reduce the frequency of terraform apply/plan operations during peak hours, or stagger multiple CI/CD pipelines to avoid concurrent lock attempts.

中文步骤

  1. 增加 DynamoDB 表的预置读写容量单元以处理峰值负载。如果工作负载不可预测,切换到按需容量模式。
  2. 通过将 terraform 命令包装在带有指数退避的 bash 脚本中,实现客户端重试逻辑。
  3. 在高峰时段减少 terraform apply/plan 操作的频率,或错开多个 CI/CD 管道以避免并发锁尝试。

Dead Ends

Common approaches that don't work:

  1. 90% fail

    The lock acquisition failed due to throttling, not because the lock is held. Force-unlock doesn't address the throughput issue.

  2. 80% fail

    Deleting the table removes all state lock items but also any existing locks. Recreating with default settings still has low throughput.

  3. 95% fail

    Terraform's retry mechanism is for provider operations, not for state lock acquisition. The lock mechanism is internal and not configurable.