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:
- DynamoDB Local, tek bir süreçteki indirilebilir DynamoDB motorudur — AWS onu bir
JAR ve bir Docker imajı olarak gönderir
(
amazon/dynamodb-local). Bu DynamoDB'dir ve başka bir şey değildir. Varsayılan port 8000 (AWS belgeleri). DynamoDB Local'ı Docker ile çalıştırmaya bakın. - LocalStack, tek bir endpoint'in arkasında bir AWS hizmetleri yığınını taklit eder. DynamoDB'si bizzat DynamoDB Local tarafından desteklenir, ancak her şey LocalStack'in tek kenar portu 4566 üzerinden geçer.
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.
-sharedDbbayrağı olmadan, DynamoDB Local her erişim-anahtarı-kimliği + bölge kombinasyonu için ayrı birmyaccesskeyid_region.dbdosyası 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.-sharedDbile çalıştırın (her istemci için tek birshared-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ızcaA–Z,a–zve0–9iç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üşer —
test 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:8000LocalStack (aynı komut, farklı port):
aws dynamodb list-tables --endpoint-url http://localhost:4566Eğ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) veyahttp://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/testgelenekseldir). 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 —
8000DynamoDB Local'dır,4566LocalStack'tir. Ayrıca konteynerin portu gerçekten yayımladığını doğrulayın (docker run -p 8000:8000 amazon/dynamodb-local). LocalStack için, hizmetinhttp://localhost:4566/_localstack/healthadresinde ç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çektenhttp://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. httpvehttps. Yerel endpoint'ler düzhttp'dir. Birhttps://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.