Erstellen Sie DynamoDB local mit Docker

Hintergrund

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.

Nachtrag

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.

Versuchen Sie es Docker zu machen

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.

Daten in DynamoDB einfügen

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"
      }
    }
  '

Ungefähre Übersicht

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.

Sitzungseinstellungen

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"),
	})
)

Zusammenfassung

Lass uns ein glückliches DynamoDB-Leben haben!

Recommended Posts

Erstellen Sie DynamoDB local mit Docker
Erstellen Sie mit Docker eine lokale Couchbase-Umgebung
Erstellen einer Docker-Umgebung mit WSL
Erstellen Sie mit Docker eine Node.js-Umgebung
Erstellen Sie mit Laradock eine Docker + Laravel-Umgebung
Erstellen Sie mit Docker eine PureScript-Entwicklungsumgebung
Erstellen Sie mit Docker eine Wordpress-Entwicklungsumgebung
[Docker] Erstellen Sie die Ausführungsumgebung von Jupyter Lab mit Docker
Erstellen Sie eine Umgebung mit Docker unter AWS
Erstellen Sie mit Docker eine TensorFlow-Betriebsüberprüfungsumgebung
So erstellen Sie eine Rails 6-Umgebung mit Docker
Erstellen Sie mit Docker eine lokale Entwicklungsumgebung für Rails-Tutorials (Rails 6 + PostgreSQL + Webpack)
Erstellen Sie eine Laravel / Docker-Umgebung mit VSCode devcontainer
Erstellen Sie mit Docker schnell eine WordPress-Entwicklungsumgebung
Erstellen Sie mit Docker (Ubuntu) eine Mecab-Umgebung (NEologd Dictionary).
[Rails] So erstellen Sie eine Umgebung mit Docker
Konstruktions- und Entwicklungsverfahren für lokale WordPress-Umgebungen mit Docker
Starten Sie MariaDB mit Docker
Explodiere Docker mit WSL2
Verwenden Sie Puphpeteer mit Docker
Bedienen Sie Emby mit Docker
Führen Sie Payara mit Docker aus
Baue Growai mit Centos7
Erstellen Sie Java mit Wercker
Einweg-PHP mit Docker
Bazel mit Alpen bauen
So erstellen Sie eine Docker-Umgebung mit Gradle for IntelliJ
Erstellen Sie mit Docker eine Ruby2.7.x + Rails6.0.x + MySQL8.0.x-Umgebung
[Hinweis] Erstellen Sie eine Python3-Umgebung mit Docker in EC2
(Für mich) Baue ein Git-Labor mit Ubuntu 18.04 + Docker für zu Hause (Hinweis)
Build Rails (API) x MySQL x Nuxt.js Umgebung mit Docker
Erstellen Sie mit Docker ein Android-Image für Orange Pi 4
Verwenden Sie GDAL mit Python mit Docker
Erstellen Sie GitLab / Mattermost mit DockerForWindows
Erstellen Sie mit Centos7 ein Softether-VPN.
Bereitstellung mit EC2 / Docker / Laravel
Führen Sie TAO Core mit Docker aus
Docker-Management mit VS-Code
Richten Sie GitLab mit Docker ein