Orta6 dakikalık okuma

DynamoDB Local ve LocalStack'e Nasıl Bağlanılır

Çalışan bir yerel DynamoDB'niz var ve kodunuz onunla sorunsuz konuşuyor — ama her seferinde bir scan betiği yazmak yerine tabloları görmek istiyorsunuz. Bir istemciyi yerel bir endpoint'e bağlamak iki değişikliktir: doğru URL'ye yöneltin ve ona kullanıp atılacak kimlik bilgileri verin. Aşağıdaki ayrıntılar, insanların takıldığı yerlerdir — bölge ad alanı, alfanümerik anahtar kuralı ve 8000 ile 4566 port ayrımı.

DynamoDB Local ve LocalStack: neye bağlanıyorsunuz

Her ikisi de size AWS hesabı olmadan localhost üzerinde bir DynamoDB API'si verir, ancak bunlar farklı şeylerdir:

Yani bağlanmak için tek pratik fark endpoint URL'sidir: tek başına DynamoDB Local için :8000, LocalStack üzerinden DynamoDB için :4566. Diğer her şey — API, kimlik bilgileri hilesi, GUI yapılandırması — aynıdır.

Herkesi tökezleten endpoint + sahte kimlik bilgileri kurulumu

AWS SDK'leri ve CLI, yerel bir endpoint'le konuşurken bile bir erişim anahtarı ve bir bölge gerektirir — ancak bu değerlerin gerçek olması gerekmez. AWS'nin kendi belgeleri, bu değerlerin "yerel olarak çalıştırmak için geçerli AWS değerleri olması gerekmediğini" söyler (AWS belgeleri).

Açık olmayan iki tuzak:

  • Bölge/erişim anahtarı, verinizi sessizce ad alanına ayırır. -sharedDb bayrağı olmadan, DynamoDB Local her erişim-anahtarı-kimliği + bölge kombinasyonu için ayrı bir myaccesskeyid_region.db dosyası yazar — AWS'nin tam adlandırması. Uygulamanızın kullandığından farklı bir anahtar veya bölgeyle bağlanın ve tablolarınız kaybolmuş gibi görünür; sadece başka bir dosyadalar. -sharedDb ile çalıştırın (her istemci için tek bir shared-local-instance.db) veya uygulamanızın kullandığı tam anahtar + bölgeyi eşleştirin.
  • Erişim anahtarı kimliği DynamoDB Local'da alfanümerik olmalıdır — sembol yok. AWS belgeleri, AWS_ACCESS_KEY_ID'nin yalnızca A–Z, a–z ve 0–9 içerebileceğini belirtir; AWS bunu DynamoDB Local 2.0.0'da (ve 1.23.0+'da) tanıttı, bu yüzden daha eski bir imajda çalışan özel karakterli bir anahtar artık başarısız olur (AWS re:Post). Aşağıdaki hataya bakın.

LocalStack için güvenli varsayılan test / test'tir: gizli anahtarı tamamen yok sayar ve gizli değeri asla doğrulamaz. Gerçek görünümlü AKIA…/ASIA… anahtarları bir önlem olarak reddedilir ve sahte hesap 000000000000'a geri düşertest gibi rastgele bir anahtarın çözümlendiği aynı hesap. test ile devam edin.

AWS CLI ile bağlanma (akıl sağlığı kontrolü)

Bir GUI'yi ona yöneltmeden önce, endpoint'in CLI'den canlı olduğunu doğrulayın. CLI, yerel bir endpoint'e varsayılan olarak geçemez, bu yüzden her komutta --endpoint-url geçirirsiniz.

DynamoDB Local:

aws dynamodb list-tables --endpoint-url http://localhost:8000

LocalStack (aynı komut, farklı port):

aws dynamodb list-tables --endpoint-url http://localhost:4566

Eğer hiç kimlik bilgisi yapılandırdıysanız (~/.aws/credentials içinde sahte olanlar veya AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY aracılığıyla bile), bu, tablo listenizi döndürür. Hatasız boş bir liste, endpoint'in çalıştığı ancak farklı bir anahtar/bölge ad alanına baktığınız anlamına gelir — yukarıdaki tuzağa bakın.

DynamoDB Local GUI'si: DynoTable'da yerel tablolara göz atma ve sorgulama

CLI çalıştığında, bir GUI aynı üç değere ihtiyaç duyar: endpoint, bölge ve herhangi bir sahte kimlik bilgisi. CLI, gözle okuduğunuz DynamoDB-JSON'ı döndürür; bir GUI aynı veriyi sıralayabileceğiniz, filtreleyebileceğiniz ve düzenleyebileceğiniz bir tablo olarak işler.

DynoTable'da bir bağlantı ekleyin ve özel bir endpoint ayarlayın:

  • Endpoint: http://localhost:8000 (DynamoDB Local) veya http://localhost:4566 (LocalStack)
  • Bölge: uygulamanızın kullandığı her ne ise — örn. us-east-1. Burada gerçek bir AWS bölgesi değil, bir etikettir, ancak aynı veri ad alanına inmeniz için eşleşmesi gerekir.
  • Erişim anahtarı / gizli anahtar: herhangi bir şey (test / test gelenekseldir). DynamoDB Local'da erişim anahtarı için yalnızca alfanümerik.

Oradan item'lara göz atar, bir Query veya Scan çalıştırır ve satırları CLI'de elle JSON marshal etmek yerine görsel olarak düzenlersiniz. Sabit veri yüklediğinizde, DynamoDB-JSON dönüştürücü düz JSON'ı wire formatına çevirir ve Query ve Scan hangi okumaya başvurulacağını ele alır. LocalStack DynamoDB görüntüleyici için de aynı düzen — yalnızca port 4566'ya değişir.

DynoTable yalnızca yerel masaüstü yazılımıdır, bu yüzden onu localhost'a yöneltmek sabit verilerinizi makinenizde tutar. GUI ortamına daha geniş bir bakış için DynamoDB GUI karşılaştırmasına bakın.

Yaygın hatalar (bölge uyumsuzluğu, port, kimlik bilgileri)

  • Bağlantı reddedildi. Yanlış port — 8000 DynamoDB Local'dır, 4566 LocalStack'tir. Ayrıca konteynerin portu gerçekten yayımladığını doğrulayın (docker run -p 8000:8000 amazon/dynamodb-local). LocalStack için, hizmetin http://localhost:4566/_localstack/health adresinde çalıştığını kontrol edin.
  • DynamoDB Local'da The Access Key ID or Security Token is Invalid. 2.0.0 (ve 1.23.0+) imajından beri, erişim anahtarı kimliği yalnızca alfanümerik olmalıdır. Daha eski bir imajda çalışan sembollü bir anahtar artık başarısız olur — onu harflerle/rakamlarla değiştirin (örn. test) ve eşleşmesi için her aracı güncelleyin.
  • LocalStack'e karşı The security token included in the request is invalid. Bu neredeyse her zaman bir kimlik bilgisi sorunu değil, bir endpoint sorunudur — SDK istemciniz --endpoint-url / endpoint_url'i düşürdü ve sahte anahtarınızı reddeden gerçek AWS endpoint'ine çarptı. İstemcinin gerçekten http://localhost:4566'ya yöneltildiğini doğrulayın.
  • SDK/CLI'den kimlik bilgisi hataları. Yerel endpoint'ler bile bir miktar kimlik bilgisinin mevcut olmasını gerektirir. SDK'nin kimlik bilgisi zincirinin çözülmesi için AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY'i (veya sahte bir profili) ayarlayın.
  • http ve https. Yerel endpoint'ler düz http'dir. Bir https:// URL'si TLS el sıkışmasında başarısız olur.

DynamoDB Local, gerçek AWS tablolarımla aynı veri mi?

Hayır — yerel ve bulut tamamen ayrı depolardır. DynamoDB Local (ve LocalStack'in DynamoDB'si) veriyi yerel bir dosyada veya bellekte tutar; AWS hesabınıza asla dokunmaz ve yerel olarak AWS Bölgeleri/hesapları istemci düzeyinde desteklenmez. Asıl mesele de bu: bu geliştirme ve test içindir. Aynı sabit verileri daha sonra bulutta istiyorsanız, AWS şunu önerir: yerel olarak geçerli görünümlü anahtar/bölge değerleri kullanın, böylece taşındığınızda yalnızca endpoint'i değiştirirsiniz. O şemayı göndermeden önce modellemek için, tek tablo tasarımı ve GSI ve LSI, yerel ile üretim arasında değişmeyen kararları ele alır.

SSS

Gerçek AWS kimlik bilgilerine ihtiyacım var mı? Hayır. Hem DynamoDB Local hem de LocalStack sahte değerleri kabul eder. Sadece mevcut, alfanümerik (DynamoDB Local için) ve araçlarınız genelinde tutarlı olmaları gerekir.

Araç değiştirdiğimde tablolarım neden kayboluyor? -sharedDb olmadan, DynamoDB Local veriyi erişim anahtarı + bölgeye göre ayrı myaccesskeyid_region.db dosyalarına bölümler. -sharedDb kullanın veya o değerleri her yerde aynı tutun.

Port 8000 ile 4566 arasındaki fark nedir? 8000 tek başına DynamoDB Local'ın varsayılanıdır; 4566, taklit edilen tüm hizmetlerini, DynamoDB dahil, önyüzleyen LocalStack'in tek kenar portudur.

Tek bir GUI ikisine de bağlanabilir mi? Evet — aynı DynamoDB API'sini konuşurlar. Yalnızca endpoint URL'si değişir (:8000 ve :4566).

DynamoDB Local ücretsiz mi? Evet. AWS, DynamoDB Local'ı bir JAR ve bir Docker imajı olarak ücretsiz dağıtır — "sağlanan iş hacmi, veri depolama veya veri aktarım maliyeti yoktur"; bu yalnızca geliştirme ve test içindir, üretim için değil.

Yerel tablolarıma karşı SQL çalıştırabilir miyim? Yerel DynamoDB, bulutla aynı API'yi konuşur, bu yüzden aynı erişim modeli kuralları geçerlidir — ve aynı sınırlar: DynamoDB'nin PartiQL SELECT dilbilgisi yalnızca SELECT … FROM … WHERE … ORDER BY'dır — JOIN yok, GROUP BY yok ve COUNT/SUM/AVG gibi gruplama toplama işlevleri yok (bkz. PartiQL ve SQL). DynoTable'ın SQL Workbench'i, bu analitik sorguları yerel dahil herhangi bir bağlantı üzerinde çalıştırır.

DynoTable'ı deneyin ve doğrudan localhost:8000 veya localhost:4566'ya bağlanın; yerel tablolarınıza bir GUI ile göz atın, sorgulayın ve düzenleyin.

Güncellendi