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 table

Kontrol 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/UPDATING iken bir indeks oluşturmak, silmek ya da güncellemek.
  • Bir yarış — iki sürecin aynı tabloyu eşzamanlı oluşturması.

Nasıl düzeltilir

  1. İşlem yapmadan önce durumu kontrol edin. DescribeTable → yalnızca TableStatus ACTIVE olduğunda devam edin; yerleşene kadar bloklamak için bir bekleyici (waitUntilTableExists) kullanın.
  2. Oluşturmayı idempotent yapın. CreateTable'da ResourceInUseException'ı yakalayın ve onu başarı olarak ele alın (istediğiniz tablo var).
  3. 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 ⌘KTabloyu 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

Kaynaklar

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.