Başlangıç6 dakikalık okuma

Bir DynamoDB Tablosunu Başka Bir Hesaba veya Bölgeye Nasıl Kopyalarsınız

DynamoDB'nin tek tıkla "tablo kopyala" komutu yoktur — ne AWS CLI'de ne de konsolda. Bir tabloyu hesaplar veya bölgeler arasında kopyalamak ya da taşımak, her biri farklı maliyet, kesinti süresi ve doğruluk ödünleşimine sahip dört yaklaşımdan birini seçmek demektir. Bu kılavuz dördünü de ele alır, ayrıca üretimde sizi ısıran operasyonel tuzakları da.

Bir DynamoDB tablosunu başka bir hesaba veya bölgeye nasıl kopyalarım?

Yerel bir tablo-kopyalama komutu yoktur. Dört yaklaşımdan birini seçin: küçük, tek seferlik kopyalar için bir Scan + BatchWriteItem betiği, büyük tablolar için bir S3 dışa aktarma-sonra-içe aktarma, tam doğrulukla hesaplar arası taşımalar için AWS Backup kopyalama + geri yükleme ya da sürekli canlı çoğaltma için global tablolar. Her geri yükleme veya içe aktarma yeni bir tablo oluşturur.

DurumEn iyi yaklaşım
Küçük tablo, tek seferlik, tam kontrolScan + BatchWriteItem betiği
Büyük tablo, bir anlık görüntüye tahammül edilebilirS3 dışa → içe aktarma (yeni tablo oluşturur)
Geri yüklemeli hesaplar/bölgeler arasıAWS Backup kopyalama + geri yükleme
Sürekli canlı çoğaltma (tek seferlik kopya değil)Global tablolar

Hiçbir yaklaşım evrensel olarak "doğru" değildir — tablo boyutuna, bir noktaya-zamana anlık görüntü mü yoksa canlı veri mi gerektiğinize ve hedefin yeni mi yoksa mevcut bir tablo mu olduğuna bağlıdır.

Yaklaşım 1: Scan + BatchWriteItem (betik)

En düşük teknolojili seçenek: kaynaktaki her item'ı Scan ile okuyun, hedefe BatchWriteItem ile yazın. Betiğiniz her iki taraf için de kimlik bilgileri tuttuğu (veya hedef hesapta bir rol üstlendiği) sürece hesaplar ve bölgeler arası çalışır.

# Taslak — kaynağı oku, hedefe yaz (sözde kod; gerçek hayatta SDK kullanın)
aws dynamodb scan --table-name SourceTable --region us-east-1 \
  > items.json
# Items[]'ı BatchWriteItem RequestItems'a dönüştürün, ardından:
aws dynamodb batch-write-item --request-items file://batch.json \
  --region eu-west-1

Tuzaklar gerçektir ve gözden kaçırması kolaydır:

  • BatchWriteItem çağrı başına 25 item veya 16 MB ile sınırlıdır — parçalara bölmeniz gerekir ve tek bir çağrı, üstel geri çekilmeyle yeniden denemeniz gereken işlenmemiş item'lar döndürebilir (API referansı).
  • Yazma işlemleri yazma kapasitesi tüketir. Sağlanan bir hedefte hızla ProvisionedThroughputExceededException'a çarparsınız; on-demand daha fazlasını emer ama yine de partition başına yumuşak sınırları vardır. Başlamadan önce yazma yükünü hedefin kapasitesine karşı boyutlandırın.
  • Scan tüm tabloyu okur ve her item'ı ölçer — klasik Query ve Scan maliyeti. Büyük bir tablo aynı zamanda LastEvaluatedKey üzerinden sayfalandırma anlamına gelir; bkz. sayfalandırma.
  • Atomik değildir. Scan uçuştayken yazılan item'lar gözden kaçabilir — yalnızca kaynak sessizse tutarlı bir anlık görüntü alırsınız.

Küçük tablolar için veya kopyalama sırasında dönüştürme/filtreleme yapmanız gerektiğinde en iyisidir.

Yaklaşım 2: S3'e dışa aktar, sonra yeni bir tabloya içe aktar

Büyük tablolar için, DynamoDB'nin yönetilen S3'e dışa aktarması artı S3'ten içe aktarması, kapasitenizi hiç zorlamamaktan kaçınır.

Dışa aktarma, tabloyu bir S3 kovasına anlık görüntü olarak alır (nasıl çalışır):

  • Kaynak tabloda noktaya zamana kurtarmanın (PITR) etkinleştirilmesini gerektirir.
  • Okuma kapasitesi tüketmez ve tablo performansına hiçbir etkisi yoktur — canlı tablodan değil, sürekli yedeklerden okur.
  • DynamoDB JSON veya Amazon Ion formatı üretir. (DynamoDB-JSON wire formatı, tip etiketleriyle birlikte S3'e inendir.)
  • Başka bir hesabın sahip olduğu ve farklı bir bölgedeki bir S3 kovasına yazabilir.
  • Tam ve artımlı dışa aktarmaları destekler (artımlı dışa aktarma GA, Eylül 2023).

İçe aktarma ardından o S3 verisinden yeni bir tablo oluşturur (nasıl çalışır):

  • Yalnızca yepyeni bir tabloya içe aktarır — mevcut bir tabloya içe aktaramazsınız.
  • Yeni tabloda yazma kapasitesi tüketmez.
  • CSV, DynamoDB JSON veya Amazon Ion kabul eder (isteğe bağlı olarak GZIP/ZSTD sıkıştırılmış).
  • Kaynak S3 kovası başka bir hesapta veya başka bir bölgede olabilir.
  • İçe aktarma zamanında ikincil index'ler tanımlayabilirsiniz; içe aktarma tamamlanır tamamlanmaz sorgulanabilir olurlar.

Bu, noktaya zamana bir anlık görüntünün (canlı veri değil) kabul edilebilir olduğu büyük bir hesaplar/bölgeler arası taşıma için en temiz yoldur.

Yaklaşım 3: AWS Backup kopyalama + geri yükleme

Zaten AWS Backup kullanıyorsanız, kurtarma noktalarını hesaplar ve bölgeler arası kopyalar (hesaplar arası taşıma kılavuzu):

  1. Kaynak tabloyu bir yedek kasasına yedekleyin.
  2. Yedeği hedef hesaptaki/bölgedeki bir kasaya kopyalayın.
  3. Onu hedefte yeni bir tabloya geri yükleyin.

Temel kısıtlamalar:

  • Hesaplar arası kopyalama, her iki hesabın da aynı AWS Organization'da olmasını gerektirir.
  • Geri yükleme her zaman yeni bir tablo oluşturur — mevcut bir tablonun üzerine geri yükleyemezsiniz.
  • Global ikincil index'ler varsayılan olarak korunur (geri yükleme süresinden/maliyetinden tasarruf etmek için bazılarını veya hepsini hariç tutun); geri yüklemede yeni index'ler ekleyemezsiniz.
  • Şifreleme tuzağı: bölgeler arası bir geri yüklemede aynı KMS anahtarını korumak için bir çok bölgeli anahtara ihtiyacınız vardır; hesaplar arası için anahtarı hedef hesapla paylaşmanız gerekir. AWS'nin sahip olduğu ve AWS tarafından yönetilen anahtarlar paylaşılamaz veya çok bölgeli yapılamaz (geri yükleme şifreleme notları).

Yaklaşım 4: Global tablolar (canlı çoğaltma, tek seferlik kopya değil)

Global tablolar, bir tabloyu bölgeler arası — ve artık isteğe bağlı olarak hesaplar arası (çok hesaplı GA, Şubat 2026) — sürekli çoğaltır. Herhangi bir replika okuma ve yazma sunar (çok-etkin), asenkron, son-yazan-kazanır çoğaltmayla (global tablolar belgeleri).

Bu bir "kopyala ve uzaklaş" aracı değildir — sürekli çoğaltmadır. Hedef bölgenin süresiz olarak senkronize kalmasını istediğinizde kullanın (felaket kurtarma, düşük gecikmeli yerel okumalar), temiz tek seferlik bir taşıma için değil. Mevcut bir tabloya bir bölge ekleyin ve DynamoDB mevcut veriyi yeni replikaya geri doldurur.

Operasyonel tuzaklar (tüm yaklaşımlar)

  • GSI'leri yeniden oluşturmak ücretsiz değildir. Bir scan+yazma kopyası index'leri taşımaz — onları hedefte tanımlarsınız ve geri dolarlar (ve ayrıca maliyetlidirler). GSI ve LSI düzeninizi hedefte önceden planlayın; LSI'ler yalnızca tablo oluşturma zamanında oluşturulabilir (LSI belgeleri).
  • Kapasite modu aktarılmaz. Yeni tablo, kaynağınkiyle değil, sizin ayarladığınız her ne modla başlar. Bir scan+yazma kopyasından önce yazma yükünü tahmin edin — item boyutu hesaplayıcısı ile temsili bir item'ı boyutlandırın ve WCU'ları kabaca hesaplamak için item sayısıyla çarpın.
  • TTL, akışlar, otomatik ölçeklendirme ve etiketler veri değil, tablo ayarlarıdır — kopyalama yöntemlerinin hiçbiri hepsini taşımaz. Onları hedefte yeniden uygulayın.
  • DynamoDB JSON ≠ düz JSON. Dışa aktarmalar ve scan'ler tip etiketli DynamoDB-JSON üretir; yol boyunca dönüştürüyorsanız, DynamoDB JSON dönüştürücü marshalling'i halleder.

SSS

Bir DynamoDB tablosunu kopyalamak için bir AWS CLI komutu var mı? Hayır. Yerel bir copy-table komutu yoktur. scan + batch-write-item'ı birleştirir ya da yönetilen dışa/içe aktarma veya AWS Backup özelliklerini kullanırsınız.

Bir DynamoDB tablosunu başka bir hesaba nasıl kopyalarım? Üç seçenek: her iki hesap için de kimlik bilgileri olan bir scan+yazma betiği, bir S3 dışa/içe aktarma (kova hesaplar arası olabilir) veya AWS Backup kopyalama+geri yükleme (her iki hesap da aynı AWS Organization'da olmalıdır).

Bir DynamoDB tablosunu başka bir bölgeye nasıl kopyalarım? S3 dışa/içe aktarma ve AWS Backup'ın ikisi de bölgeler arasını destekler. Tek seferlik bir kopya yerine sürekli bölgeler arası senkronizasyon için, hedef bölgeye bir global-tablo replikası ekleyin.

Bir tabloyu kopyalamak index'lerini de kopyalar mı? S3 içe aktarma ve AWS Backup geri yükleme, ikincil index'leri korumanıza/tanımlamanıza izin verir; bir scan+yazma betiği bunu yapmaz — index'leri hedefte kendiniz oluşturursunuz ve ayrıca geri dolarlar.

Mevcut bir DynamoDB tablosuna içe aktarabilir miyim? Hayır. DynamoDB'nin S3 içe aktarması ve AWS Backup geri yüklemesinin ikisi de yeni bir tablo oluşturur. Mevcut bir tabloya birleştirmek için bir scan+yazma betiği kullanın.


Bir GUI geçişi mantıklı kılar: kaynağa ve hedefe yan yana göz atın, kopyadan sonra item sayılarını ve birkaç örnek kaydı doğrulayın ve bir scan betiği yazmadan anlık kontroller çalıştırın. Bir taşıma sırasında hesaplar ve bölgeler arasındaki tabloları incelemek için DynoTable'ı indirin.

Güncellendi