Das Produkt, an dem ich gerade arbeite, verwendet AppSync und ich verwende häufig Lambda als Backend. Zu dieser Zeit habe ich einen Unit-Test für Lambdas Logik geschrieben, aber ich habe die Interaktion mit DynamoDB gestoppt. Im Verlauf der Entwicklung kamen verschiedene Prozesse hinzu, und in der Situation, in der "Ich weiß es nicht, bis ich tatsächlich darauf zugegriffen habe", traten verschiedene Unannehmlichkeiten auf. Deshalb entschied ich mich, einen Test durchzuführen und ihn zu untersuchen. Ich werde.
Der gesamte Code in diesem Artikel wurde auf yu-croco / DynamoDB-local-Sample hochgeladen Bitte benutzen Sie es.
Ich habe es nach dem Posten bemerkt und es hinzugefügt. Es scheint unmöglich zu sein, über den lokalen Circle CI (Beispiel: http: // localhost: 8000) auf den auf Circle CI basierenden Docker-Container zuzugreifen. Daher habe ich ihn wie in diesem Artikel als Docker auf Circle CI erstellt. Wenn Sie DynamoDB local verwenden, konvertieren Sie bitte auch Golang-Ressourcen in Docker.
DynamoDB local DynamoDB local ist eine von AWS bereitgestellte DynamoDB, die lokal gestartet werden kann. Laut dem AWS-Beamten Einrichten von DynamoDB Local
Mit der herunterladbaren Version von Amazon DynamoDB können Sie Ihre Anwendung entwickeln und testen, ohne auf den DynamoDB-Webdienst zugreifen zu müssen. Stattdessen ist die Datenbank auf dem Computer in sich geschlossen. Wenn Sie bereit sind, Ihre Anwendung für die Produktion bereitzustellen, löschen Sie den lokalen Endpunkt in Ihrem Code. Dies bezieht sich dann auf den DynamoDB-Webdienst.
Die Verwendung dieser lokalen Version erleichtert das Sparen von Durchsatz-, Datenspeicherungs- und Datenübertragungsgebühren. Außerdem müssen Sie während der Entwicklung Ihrer Anwendung nicht mit dem Internet verbunden sein.
... anscheinend ... "Es ist mühsam, DynamoDB einzeln zu starten", daher habe ich das Gefühl, dass sie etwas Praktischeres anbieten.
Dieses Mal werde ich dies verwenden.
Ich möchte DynamoDB nicht jedes Mal direkt lokal installieren, da ich es auf CI verwenden möchte. Glücklicherweise wird diesmal DynamoDB local verwendet, da AWS das Image offiziell auf Docker Hub veröffentlicht. amazon/dynamodb-local - Docker Hub
Das Dockerfile sieht so aus. Ich denke, Sie sollten sich für Optionen an den Beamten wenden. DynamoDB Local Usage Notes
FROM amazon/dynamodb-local
CMD ["-jar", "DynamoDBLocal.jar", "-sharedDb", "-dbPath", ".", "-optimizeDbBeforeStartup"]
$ docker build -t dynamodb_sample .
$ docker run -p 8000:8000 -v dynamodb:/home/dynamodblocal dynamodb_sample
Wenn Sie dies tun, wird es sich ungefähr bewegen.
Erstellen Sie eine Tabelle und geben Sie Daten in die gestartete lokale DynamoDB ein. Es ist mühsam, Code dafür zu schreiben, daher werde ich diesmal die Daten über die AWS-CLI speichern. Starten Sie den Container für AWS CLI und führen Sie das folgende Skript aus, um Tabellenoperationen für den lokalen DynamoDB-Container auszuführen.
** Zur Tabellenerstellung **
#!/usr/bin/env bash
aws dynamodb \
--region ap-northeast-1 \
--endpoint-url http://dynamodb:8000 \
create-table \
--table-name SampleTable \
--attribute-definitions \
AttributeName=userId,AttributeType=N \
AttributeName=userName,AttributeType=S \
--key-schema \
AttributeName=userId,KeyType=HASH AttributeName=userName,KeyType=RANGE \
--billing-mode PAY_PER_REQUEST
** Zur Dateneingabe **
#!/usr/bin/env bash
aws dynamodb \
--region ap-northeast-1 \
--endpoint-url http://dynamodb:8000 \
put-item \
--table-name SampleTable \
--item '
{
"userId": {
"N": "1"
},
"userName": {
"S": "Yamada Taro"
},
"age": {
"N": "29"
},
"contactNumber": {
"S": "080-1234-5678"
}
}
'
Am Ende sieht es wie folgt aus.
** Dockerfile (für AWS CLI) **
FROM amazon/aws-cli:2.0.56
ENV AWS_ACCESS_KEY_ID=fake_access_key\
AWS_SECRET_ACCESS_KEY=fake_secret_access_key\
DYNAMODB_REGION=ap-northeast-1
#Erstellen Sie den Prozess, den Sie ausführen möchten, über die AWS-CLI mit Shellscript unter bin
COPY bin bin
docker-compose.yml
version: '3'
services:
dynamodb:
image: amazon/dynamodb-local
command: -jar DynamoDBLocal.jar -sharedDb -dbPath . -optimizeDbBeforeStartup
volumes:
- dynamodb:/home/dynamodblocal
ports:
- 8000:8000
awscli:
build: .
entrypoint: [""]
tty: true
command:
- /bin/sh
volumes:
dynamodb:
driver: local
Dadurch werden die lokalen DynamoDB- und AWS CLI-Container vom Docker erstellt und gestartet. Klicken Sie anschließend auf das in der bin-Datei enthaltene Shell-Skript, um eine Tabelle zu erstellen.
Es wäre schön, wenn die Tabelle nach dem Start des Containers automatisch erstellt werden könnte, aber das wäre eine weitere Gelegenheit.
Wenn Sie im Fall von Golang den Endpunkt beim Definieren einer Sitzung für DynamoDB auf "http: //0.0.0.0: 8000" setzen, funktioniert der vorhandene DynamoDB-Prozess.
const region = "ap-northeast-1"
var svc = dynamodb.New(session.New(&aws.Config{
Region: aws.String(region),
Endpoint: aws.String("http://0.0.0.0:8000"),
})
)
Lass uns ein glückliches DynamoDB-Leben haben!
Recommended Posts