DynamoDB ResourceInUseException
TL;DR — Zaten var olan ya da hâlâ geçiş yapan (CREATING / UPDATING / DELETING) bir tabloda bir tablo işlemi denediniz. Önce tablonun durumunu kontrol edin ya da "zaten var"ı yoksayarak oluşturmayı idempotent yapın.
Ne anlama gelir
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 tableKontrol düzlemi işlemleri (CreateTable, DeleteTable, UpdateTable), tablonun uyumlu bir durumda olmasını gerektirir. Bu hata öyle olmadığı anlamına gelir — ya zaten var ya da geçiş aşamasında ve DynamoDB, ACTIVE'e yerleşene kadar başka bir işlem kabul etmez. DynamoDB onu HTTP durum kodu 400 ile döndürür ve olduğu gibi yeniden denenebilir değildir — özdeş isteği yeniden denemek, durum değişene kadar başarısız olur (geçişin bitmesini bekleyin ya da isteği değiştirin).
Neden olur
- Zaten var olan bir tablo için
CreateTable'ı yeniden çalıştırmak (tekrarlanan bir taşıma/dağıtım, temizlemeyen testler). - Bir geçiş sırasında işlem yapmak — tablo hâlâ
CREATING/UPDATINGiken bir indeks oluşturmak, silmek ya da güncellemek. - Bir yarış — iki sürecin aynı tabloyu eşzamanlı oluşturması.
Nasıl düzeltilir
- İşlem yapmadan önce durumu kontrol edin.
DescribeTable→ yalnızcaTableStatusACTIVEolduğunda devam edin; yerleşene kadar bloklamak için bir bekleyici (waitUntilTableExists) kullanın. - Oluşturmayı idempotent yapın.
CreateTable'daResourceInUseException'ı yakalayın ve onu başarı olarak ele alın (istediğiniz tablo var). - Testlerde/taşımalarda tablo işlemlerini sıralı yürütün, böylece iki tanesi aynı anda çalışmasın; test tablolarını kaldırmada temizleyin.
Örnek
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.
}SSS
DynamoDB'de ResourceInUseException ne anlama gelir?
Bir kontrol düzlemi işlemi (CreateTable, DeleteTable, UpdateTable), zaten var olan ya da CREATING, UPDATING veya DELETING boyunca hâlâ geçiş yapan bir tabloyu hedefledi. DynamoDB, tablo ACTIVE'e yerleşene kadar başka bir işlem kabul etmez.
CreateTable'ı nasıl idempotent yaparım?
ResourceInUseException'ı yakalayın ve onu başarı olarak ele alın — istediğiniz tablo var. Alternatif olarak önce DescribeTable'ı kontrol edin ve tablo yokken yalnızca oluşturun, yerleşene kadar bloklamak için waitUntilTableExists gibi bir bekleyici kullanın.
DynoTable yolu
Bir geçiş CreateTable yeniden çalıştırıldığında, DynoTable en kısa sürede tabloyu gösterir
mevcutsa — komut dosyanız çalışırken ⌘K → Tabloyu ada göre aç ile açın
yeniden dener. Tablo ayarları açık bir sekmede TableStatus (CREATING,
UPDATING, ACTIVE) böylece bir sonraki mesajı vermeden önce ACTIVE’i bekleyebilirsiniz.
kontrol düzlemi değişimi. Yerel yineleme için Yerel profili şuraya yönlendirin:
http://localhost:8000 (Running DynamoDB Local) ve
tohum yüklemek için DynamoDB JSON converter tuşunu kullanın
tablo yerleştikten sonra öğeler.
Tablo ayarları ayrıca UPDATING'de takılıp kalan bulut tabloları için GSI'u da listeler.
dolgular — sonraki UpdateTable'dan önce her dizinde ACTIVE'i bekleyin
dağıtım komut dosyanız.
DynamoDB Yerel'e karşı, bir test yapıldığında aynı ResourceInUseException görünür
CreateTable'i hiçbir zaman temizlenmeyen bir bellek içi örneğe karşı yeniden çalıştırır - tedavi edin
Yerel olarak bulutu beğenin ve hatayı yakalayın veya ACTIVE'yi bekleyin.
İlgili hatalar
- ResourceNotFoundException — tablo yok.
- ThrottlingException — çok fazla kontrol düzlemi işlemi.
- Öğrenin: DynamoDB migrations
Kaynaklar
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- CreateTable — Amazon DynamoDB API Reference
- UpdateTable — Amazon DynamoDB API Reference
- DeleteTable — Amazon DynamoDB API Reference
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.