DynamoDB Local ve LocalStack'e Nasıl Bağlanılır
Çalışan bir local DynamoDB'niz var ve kodunuz onunla sorunsuz konuşuyor — ancak
her seferinde bir scan betiği yazmak yerine tabloları görmek istiyorsunuz. Bir
istemciyi bir local endpoint'e bağlamak iki değişikliktir: doğru URL'ye yönlendirin
ve ona bir kullan-at kimlik bilgisi 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 localhost üzerinde AWS hesabı olmadan bir DynamoDB API'si sunar,
ancak farklı şeylerdir:
- DynamoDB Local, tek bir işlemdeki indirilebilir DynamoDB motorudur — AWS onu
bir JAR ve bir Docker imajı
(
amazon/dynamodb-local) olarak sunar. Yalnızca DynamoDB'dir, başka bir şey değil. Varsayılan port 8000 (AWS docs). DynamoDB Local'i Docker ile çalıştırma sayfasına bakın. - LocalStack, tek bir endpoint arkasında bir AWS servisleri yığınını taklit eder. DynamoDB'si de DynamoDB Local tarafından güçlendirilir, ancak her şey LocalStack'in tek edge portu 4566 üzerinden geçer.
Yani bağlanmak için tek pratik fark endpoint URL'sidir: bağımsız DynamoDB Local
için :8000, LocalStack üzerinden DynamoDB için :4566. Diğer her şey — API,
kimlik bilgisi hilesi, GUI yapılandırması — aynıdır.
Herkesin takıldığı endpoint + sahte kimlik bilgisi kurulumu
AWS SDK'leri ve CLI, bir local endpoint ile 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 "local olarak çalışmak için geçerli AWS değerleri olması gerekmediğini" söyler (AWS docs).
Belirgin olmayan iki tuzak:
- Bölge/erişim anahtarı verilerinizi 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ölge ile bağlanın, tablolarınız kaybolmuş gibi görünür; sadece başka bir dosyadadırlar.-sharedDbile çalıştırın (her istemci için tek birshared-local-instance.db) veya uygulamanızın kullandığı anahtar + bölgeyle tam olarak eşleştirin. - Erişim anahtarı kimliği DynamoDB Local'de alfanümerik olmalıdır — sembol yok.
AWS docs,
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+) 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 görmezden gelir
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öner —
test gibi rastgele bir anahtarın çözümlendiği aynı hesap. test ile kalın.
AWS CLI ile bağlanma (sağlık kontrolü)
Bir GUI'yi ona yönlendirmeden önce, endpoint'in CLI'dan canlı olduğunu doğrulayın.
CLI'nin
yerleşik varsayılan local endpoint'i yoktur,
bu yüzden komut başına --endpoint-url iletin veya
AWS_ENDPOINT_URL_DYNAMODB=http://localhost:8000 ayarlayın (CLI v2.13+).
DynamoDB Local:
aws dynamodb list-tables --endpoint-url http://localhost:8000LocalStack (aynı komut, farklı port):
aws dynamodb list-tables --endpoint-url http://localhost:4566Hiç kimlik bilgisi yapılandırılmışsa (hatta ~/.aws/credentials içinde veya
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY aracılığıyla sahte olanlar 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: DynoTable'da local tabloları görüntüleme 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 ise 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 — örneğin
us-east-1. Burada bir etikettir, gerçek bir AWS bölgesi değil, ancak aynı veri ad alanına inmeniz için eşleşmelidir. - Erişim anahtarı / gizli anahtar: herhangi bir şey (
test/testgelenekseldir). DynamoDB Local'de erişim anahtarı için yalnızca alfanümerik.
Oradan item'ları görüntüler, bir Query veya Scan çalıştırır ve satırları CLI'da
elle JSON yapmak yerine görsel olarak düzenlersiniz.
Fixture yüklediğinizde,
DynamoDB-JSON dönüştürücü düz JSON'u tel biçimine
çevirir ve Query ve Scan hangi okumaya başvuracağınızı ele
alır. Bir LocalStack DynamoDB görüntüleyicisi için aynı
işlem — yalnızca port 4566 olarak değişir.
DynoTable yalnızca-local masaüstü yazılımıdır, bu yüzden onu localhost'a
yönlendirmek fixture'larınızı makinenizde tutar. GUI ortamına daha geniş bir bakış
için DynamoDB GUI karşılaştırması sayfasına bakın.
Yaygın hatalar (bölge uyuşmazlığı, port, kimlik bilgileri)
- Connection refused. Yanlış port —
8000DynamoDB Local,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, servisinhttp://localhost:4566/_localstack/healthadresinde çalıştığını kontrol edin. - DynamoDB Local'de
The Access Key ID or Security Token is Invalid. 2.0.0 (ve 1.23.0+) imajından bu yana, 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 harf/rakamlarla değiştirin (örneğintest) ve her aracı eşleşecek şekilde güncelleyin. - LocalStack'e karşı
The security token included in the request is invalid. Bu neredeyse her zaman bir endpoint sorunudur, bir kimlik bilgisi sorunu değil — SDK istemciniz--endpoint-url/endpoint_url'i düşürdü ve sahte anahtarınızı reddeden gerçek AWS endpoint'ine gitti. İstemcinin gerçektenhttp://localhost:4566'ya yönlendirildiğini doğrulayın. - SDK/CLI'dan kimlik bilgisi hataları. Local endpoint'ler bile bazı kimlik
bilgilerinin mevcut olmasını gerektirir. SDK'nın kimlik bilgisi zincirinin
çözümlenmesi için
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY(veya sahte bir profil) ayarlayın. httpilehttps. Local 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 — local ve bulut tamamen ayrı depolardır. DynamoDB Local (ve LocalStack'in DynamoDB'si) veriyi bir local dosyada veya bellekte tutar; asla AWS hesabınıza dokunmaz ve AWS Bölgeleri/hesapları local olarak istemci düzeyinde desteklenmez. Amaç bu: geliştirme ve test içindir. Aynı fixture'ları daha sonra bulutta istiyorsanız, AWS önerir ki local 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, single-table design ve GSI ve LSI, local ile üretim arasında değişmeyen kararları ele alır.
Local'in size kazandırdıkları (ve üretimin faturalandırmaya devam ettikleri)
DynamoDB Local hiçbir şeyi ölçmez — RCU yok, WCU yok, transfer yok. Aynı GetItem,
us-east-1 bölgesindeki yönetilen DynamoDB'de on-demand modda ≤ 4 KB bir item
için nihai tutarlı okumada 0,5 RCU, güçlü tutarlı okumada 1 RCU
faturalandırır. --endpoint-url'i gerçek endpoint ile değiştirdiğinizde, her
görüntüleme ve sorgu yeniden faturalandırılmaya başlar. Bu geçişi
fiyatlandırma hesaplayıcısı ile modelleyin ve
temsili item'ları
item boyutu hesaplayıcısı ile
boyutlandırın.
SSS
Gerçek AWS kimlik bilgilerine ihtiyacım var mı? Hayır. Hem DynamoDB Local hem de LocalStack sahte değerleri kabul eder. Yalnızca mevcut olmaları, alfanümerik olmaları (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öler. -sharedDb kullanın veya bu değerleri her yerde aynı tutun.
8000 ve 4566 portları arasındaki fark nedir? 8000, bağımsız DynamoDB Local'in
varsayılanıdır; 4566, DynamoDB dahil tüm taklit edilen servislerinin önünde duran
LocalStack'in tek edge portudur.
Tek bir GUI her 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'i bir JAR ve bir Docker imajı olarak ücretsiz dağıtır — "sağlanan verim, veri depolama veya veri transferi maliyeti yoktur"; yalnızca geliştirme ve test için tasarlanmıştır, üretim için değil.
Local tablolarıma karşı SQL çalıştırabilir miyim? Local 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 şeklindedir — JOIN yok, GROUP BY
yok ve COUNT/SUM/AVG gibi
gruplama agregasyon fonksiyonları yok
(bkz. PartiQL ile SQL). DynoTable'ın
'i bu analitik sorguları local dahil herhangi bir bağlantı
üzerinde çalıştırır.
DynoTable'ı deneyin ve doğrudan localhost:8000 veya
localhost:4566'ya bağlanarak local tablolarınızı bir GUI ile görüntüleyin,
sorgulayın ve düzenleyin.