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-tableOperasi 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 IaC —
ImportTableyang dicoba ulang, atau stack CloudFormation/Terraform/CDK yang mencoba membuat tabel yang sudah ada di luar state stack. - Balapan create-then-retry —
CreateTablepertama berhasil (atau masihCREATING) dan retry menemukan nama dipakai. - Tabrakan lingkungan — dua stage/lingkungan berbagi akun dan keduanya ingin nama tanpa awalan.
Cara memperbaikinya
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/...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 denganTableInUseException; lihat ResourceInUseException untuk sisiCreateTable).Untuk import, pilih nama target yang tidak dipakai —
ImportTablehanya membuat tabel baru. Untuk memuat data ke tabel yang ada, tulis denganBatchWriteItem/PutItemsebagai gantinya.Untuk retry IaC, impor tabel yang ada ke state stack (atau ganti nama), daripada melawan create.
Periksa apa yang sebenarnya ada —
aws dynamodb list-tablesdi 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
- ResourceInUseException — varian
CreateTabledari tabrakan yang sama. - Backup not found
- Export requires PITR
- Pelajari: Backups & point-in-time recovery
References
- RestoreTableFromBackup — Amazon DynamoDB API Reference
- RestoreTableToPointInTime — Amazon DynamoDB API Reference
- CreateTable — Amazon DynamoDB API Reference
- Amazon S3 import validation errors — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.