DynamoDB ResourceInUseException
TL;DR — 你對一張已經存在或仍在轉換中(CREATING / UPDATING / DELETING)的表嘗試了一個表操作。先檢查表的狀態,或者透過忽略"已經存在"來讓建立具有冪等性。
這是什麼意思
ResourceInUseException: Table already exists: <name>
ResourceInUseException: Attempt to change a resource which is still in use: Table is being created/deleted
# what the engine actually returns, reproduced against DynamoDB Local:
ResourceInUseException: Cannot create preexisting table控制平面操作(CreateTable、DeleteTable、UpdateTable)要求表處於一個相容的狀態。這個錯誤意味著它不是——要麼它已經存在,要麼它正處於轉換中,DynamoDB 在它穩定到 ACTIVE 之前不會接受另一個操作。DynamoDB 以 HTTP 狀態碼 400 返回它,且原樣不可重試——重試同樣的請求會一直失敗,直到狀態改變(等待轉換完成,或更改請求)。
為什麼會發生
- 對一張已經存在的表重新執行
CreateTable(重複的遷移/部署、不清理的測試)。 - 在轉換期間操作——在表仍處於
CREATING/UPDATING時建立索引、刪除或更新。 - 一次競速——兩個程序並行建立同一張表。
如何修正
- 在操作之前檢查狀態。
DescribeTable→ 只有當TableStatus為ACTIVE時才繼續;使用一個等待器(waitUntilTableExists)阻塞直到它穩定。 - 讓建立具有冪等性。 在
CreateTable上捕獲ResourceInUseException並把它當作成功(你想要的表存在)。 - 在測試/遷移中序列化表操作,使得兩個不會同時執行;在拆除時清理測試表。
範例
import {DynamoDBClient, CreateTableCommand, ResourceInUseException} from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({});
try {
await client.send(new CreateTableCommand(tableDef));
} catch (err) {
if (!(err instanceof ResourceInUseException)) throw err;
// Table already exists — that's fine, carry on.
}常見問題
ResourceInUseException 在 DynamoDB 中意味著什麼?
控制平面操作(CreateTable、DeleteTable、UpdateTable)針對已存在或仍在透過 CREATING、UPDATING 或 DELETING 進行轉換的表。在表穩定為 ACTIVE 之前,DynamoDB 不會接受其他操作。
如何使 CreateTable 冪等?
捕獲 ResourceInUseException 並將其視為成功 — 你想要的表存在。或者首先檢查DescribeTable,並且僅在桌子不存在時建立,使用像waitUntilTableExists這樣的服務員來阻塞,直到它解決。
DynoTable 中的路徑
當遷移重新執行 CreateTable 時,DynoTable 會立即顯示該表存在 — 使用 ⌘K 開啟它 → 在指令碼中按名稱開啟表
重試。開啟選項卡上的 表格設定 顯示 TableStatus(CREATING,
UPDATING、ACTIVE),這樣你就可以等待ACTIVE,然後再發出下一個控制平面的變化。對於本地迭代,將本地設定檔案指向
http://localhost:8000 (Running DynamoDB Local) 和使用DynamoDB JSON converter在資料表穩定後載入種子項目。對於停留在 UPDATING 的雲表,表格設定 還會列出正在執行的 GSI
回填 — 在每個索引上等待 ACTIVE,然後再進行下一個 UpdateTable
你的部署指令碼。針對DynamoDB Local,測試時會出現相同的ResourceInUseException
針對從未清除的記憶體例項重新執行 CreateTable — treat
本地(如雲)並捕獲錯誤或等待 ACTIVE。
相關錯誤
- ResourceNotFoundException——表不存在。
- ThrottlingException——控制平面操作過多。
- 學習:DynamoDB migrations
來源
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide(2026-07-13 驗證)
- CreateTable — Amazon DynamoDB API Reference(2026-07-13 驗證)
- UpdateTable — Amazon DynamoDB API Reference(2026-07-13 驗證)
- DeleteTable — Amazon DynamoDB API Reference(2026-07-13 驗證)