DynamoDB ResourceInUseException
TL;DR — Anda mencoba operasi tabel pada tabel yang sudah ada atau masih bertransisi (CREATING / UPDATING / DELETING). Periksa status tabel terlebih dahulu, atau buat idempoten dengan mengabaikan "sudah ada".
Apa artinya
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 tableMengapa itu terjadi
- Menjalankan kembali
CreateTableuntuk tabel yang sudah ada (migrasi berulang/deploy, pengujian yang tidak selesai). - Beroperasi selama transisi — membuat indeks, menghapus, atau memperbarui saat tabel masih
CREATING/UPDATING. - A race — dua proses yang membuat tabel yang sama secara bersamaan.
Bagaimana cara memperbaikinya
- Periksa status sebelum bertindak.
DescribeTable→ hanya dilanjutkan jikaTableStatusadalahACTIVE; gunakan pelayan (waitUntilTableExists) untuk memblokir sampai mengendap. - Buat buat idempoten. Tangkap
ResourceInUseExceptiondiCreateTabledan anggap itu sukses (tabel yang Anda inginkan ada). - Serialisasi operasi tabel di tes/migrations sehingga dua operasi tidak berjalan sekaligus; membersihkan tabel uji dalam pembongkaran.
Contoh
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.
}FAQ
Apa arti ResourceInUseException di DynamoDB?
Operasi bidang kontrol (CreateTable, DeleteTable, UpdateTable) menargetkan tabel yang sudah ada atau masih bertransisi melalui CREATING, UPDATING, atau DELETING. DynamoDB tidak akan menerima operasi lain sampai tabel menjadi ACTIVE.
Bagaimana cara membuat CreateTable idempoten?
Tangkap ResourceInUseException dan anggap itu sukses — tabel yang Anda inginkan ada. Alternatifnya, periksa DescribeTable terlebih dahulu dan hanya buat saat tabel tidak ada, gunakan pelayan seperti waitUntilTableExists untuk memblokir hingga selesai.
Jalur di DynoTable
Saat migrasi menjalankan kembali CreateTable, DynoTable segera menampilkan tabelnya
ada — buka dengan ⌘K → Buka tabel berdasarkan nama saat skrip Anda
percobaan ulang. Pengaturan tabel pada tab terbuka menampilkan TableStatus (CREATING,
UPDATING, ACTIVE) sehingga Anda dapat menunggu ACTIVE sebelum mengeluarkan yang berikutnya
perubahan bidang kendali. Untuk iterasi lokal, arahkan profil Lokal ke
http://localhost:8000 (Menjalankan DynamoDB Lokal) dan
gunakan konverter DynamoDB JSON untuk memuat benih
item setelah tabel selesai.
Untuk tabel cloud yang terjebak di UPDATING, Pengaturan tabel juga mencantumkan GSI dalam penerbangan
pengisian ulang — tunggu ACTIVE di setiap indeks sebelum UpdateTable berikutnya masuk
skrip penerapan Anda.
Terhadap DynamoDB Lokal, ResourceInUseException sama muncul saat tes
menjalankan kembali CreateTable terhadap instance dalam memori yang tidak pernah dihapus - treat
Lokal seperti cloud dan tangkap kesalahannya atau tunggu ACTIVE.
Kesalahan terkait
- ResourceNotFoundException — tabel tidak ada.
- ThrottlingException — terlalu banyak operasi bidang kendali.
- Pelajari: migrasi DynamoDB
Sumber
- Penanganan kesalahan dengan DynamoDB — Panduan Pengembang Amazon DynamoDB (diverifikasi 13-07-2026)
- CreateTable — Referensi Amazon DynamoDB API (diverifikasi 13-07-2026)
- UpdateTable — Referensi Amazon DynamoDB API (diverifikasi 13-07-2026)
- DeleteTable — Referensi Amazon DynamoDB API (diverifikasi 13-07-2026)