DynamoDB: Table already exists

TL;DR — Operasi ingin membuat tabel targetnya, dan nama sudah dipakai di akun + region ini. Restore (RestoreTableFromBackup / RestoreTableToPointInTime) melempar TableAlreadyExistsException; CreateTable dan ImportTable melaporkan situasi yang sama sebagai ResourceInUseException. Pilih nama target baru — restore dan import tidak pernah bisa menulis ke tabel yang sudah ada.

Apa artinya

TableAlreadyExistsException: A target table with the specified name already exists
ResourceInUseException: Table already exists: my-table

Operasi restore dan import selalu membuat tabel yang benar-benar baru — mereka tidak dapat menggabungkan ke atau menimpa tabel yang aktif. Jika nama target teruraikan ke tabel yang ada (apa pun keadaannya) di akun dan region yang sama, permintaan gagal di awal. Exception mana yang Anda lihat bergantung pada API: keluarga restore punya TableAlreadyExistsException-nya sendiri, sementara CreateTable dan ImportTable memunculkan ResourceInUseException generik.

Mengapa terjadi

  • Memulihkan backup ke nama asli — naluri alami ("kembalikan tabel saya") bertabrakan dengan tabel yang masih ada.
  • Menjalankan ulang import atau deployment IaCImportTable yang dicoba ulang, atau stack CloudFormation/Terraform/CDK yang mencoba membuat tabel yang sudah ada di luar state stack.
  • Balapan create-then-retryCreateTable pertama berhasil (atau masih CREATING) dan retry menemukan nama dipakai.
  • Tabrakan lingkungan — dua stage/lingkungan berbagi akun dan keduanya ingin nama tanpa awalan.

Cara memperbaikinya

  1. Restore ke nama baru, lalu cut over — restore sebagai my-table-restored, verifikasi data, arahkan ulang aplikasi (atau hapus tabel lama dan restore lagi di bawah nama asli setelah hilang):

    aws dynamodb restore-table-from-backup \
      --target-table-name my-table-restored \
      --backup-arn arn:aws:dynamodb:...:table/my-table/backup/...
  2. Jika Anda bermaksud mengganti tabel, hapus yang ada terlebih dahulu dan tunggu sampai penghapusan selesai — nama tetap dipakai saat tabel dalam keadaan DELETING (restore yang dicoba kemudian gagal dengan TableInUseException; lihat ResourceInUseException untuk sisi CreateTable).

  3. Untuk import, pilih nama target yang tidak dipakai — ImportTable hanya membuat tabel baru. Untuk memuat data ke tabel yang ada, tulis dengan BatchWriteItem/PutItem sebagai gantinya.

  4. Untuk retry IaC, impor tabel yang ada ke state stack (atau ganti nama), daripada melawan create.

  5. Periksa apa yang sebenarnya adaaws dynamodb list-tables di region/akun yang sama menyelesaikan apakah nama benar-benar bebas.

Memverifikasi tabel yang dipulihkan sebelum cut-over adalah langkah aman yang orang lewatkan — aplikasi desktop DynoTable meletakkan tabel yang dipulihkan dan asli berdampingan sehingga Anda dapat mem-diff schema dan memeriksa item terlebih dahulu. Dan jika Anda memperkirakan biaya menjalankan tabel yang dipulihkan, kalkulator harga DynamoDB mencakup kedua mode kapasitas.

Kesalahan terkait

References

Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

DynoTable adalah klien desktop yang cepat untuk DynamoDB — jelajahi tabel, jalankan query gaya SQL, dan edit Item secara lokal.