Construire DynamoDB local avec Docker

Contexte

Le produit sur lequel je travaille actuellement utilise AppSync et j'utilise souvent Lambda comme backend. À ce moment-là, j'ai écrit un test unitaire pour la logique de Lambda, mais j'ai suspendu l'interaction avec DynamoDB. Au fur et à mesure que le développement progressait, divers processus sont intervenus, et dans la situation où «je ne sais pas tant que je n'y ai pas réellement accès», divers inconvénients sont apparus, alors j'ai pensé à faire un test et l'ai étudié. Je vais.

Le code entier de cet article a été téléchargé sur yu-croco / DynamoDB-local-Sample, alors n'hésitez pas à Veuillez l'utiliser.

Postscript

Je l'ai remarqué après avoir posté, alors je l'ai ajouté. Il semble impossible d'accéder au conteneur Docker construit sur Circle CI depuis le local de Circle CI (exemple: http: // localhost: 8000), donc je l'ai fait Docker sur Circle CI comme dans cet article. Lorsque vous utilisez DynamoDB local, veuillez également convertir les ressources Golang en Docker.

DynamoDB local DynamoDB local est un DynamoDB fourni par AWS qui peut être démarré localement. Selon le responsable AWS Setting Up DynamoDB Local

La version téléchargeable d'Amazon DynamoDB vous permet de développer et de tester votre application sans accéder au service Web DynamoDB. Au lieu de cela, la base de données est autonome sur l'ordinateur. Lorsque vous êtes prêt à déployer votre application en production, supprimez le point de terminaison local dans votre code. Ensuite, cela fait référence au service Web DynamoDB.

L'utilisation de cette version locale facilite les économies sur le débit, le stockage des données et les frais de transfert de données. De plus, vous n'avez pas besoin d'être connecté à Internet pour développer votre application.

... Apparemment ... "C'est un problème de frapper DynamoDB un par un," on a donc l'impression qu'ils proposent quelque chose de plus pratique.

Cette fois, je vais l'utiliser.

Essayez de le rendre Docker

Je ne veux pas installer DynamoDB local directement à chaque fois parce que je veux l'utiliser sur CI. Heureusement, DynamoDB local est officiellement publié par AWS sur Docker Hub, je vais donc l'utiliser cette fois. amazon/dynamodb-local - Docker Hub

Le Dockerfile ressemble à ceci. Je pense que vous devriez vous référer au fonctionnaire pour les options. 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

Si vous le faites, il bougera approximativement.

Mettre les données dans DynamoDB

Créez une table et entrez les données dans le local DynamoDB démarré. C'est un problème d'écrire du code pour cela, donc cette fois je vais mettre les données via l'AWS CLI. Démarrez le conteneur pour AWS CLI et exécutez le script suivant pour effectuer des opérations de table sur le conteneur local DynamoDB.

** Pour la création de table **

#!/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

** Pour la saisie de données **

#!/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"
      }
    }
  '

Aperçu approximatif

En fin de compte, cela ressemble à ce qui suit.

** Dockerfile (pour 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
#Créez le processus que vous souhaitez exécuter à partir de l'AWS CLI avec shellscript sous 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

Cela créera un docker et lancera respectivement les conteneurs DynamoDB local et AWS CLI. Après cela, appuyez sur le script shell contenu dans le fichier bin pour créer une table.

Ce serait bien si la table pouvait être créée automatiquement après le démarrage du conteneur, mais ce serait une autre opportunité.

Paramètres de session

Dans le cas de Golang, si vous définissez Endpoint sur http: //0.0.0.0: 8000 lors de la définition d'une session sur DynamoDB, le processus DynamoDB existant fonctionnera.

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

Sommaire

J'ai utilisé DynamoDB local pour tester le processus d'accès à DynamoDB. Comme il est difficile de saisir des données de test dans DynamoDB local, il est recommandé de démarrer Docker pour AWS CLI et d'entrer les données dans DynamoDB local à partir de là (car il peut également être utilisé sur CI).

Ayons une vie DynamoDB heureuse!

Recommended Posts

Construire DynamoDB local avec Docker
Créer un environnement local Couchbase avec Docker
Créer un environnement Docker avec WSL
Créer un environnement Node.js avec Docker
Créez un environnement Docker + Laravel avec Laradock
Créer un environnement de développement PureScript avec Docker
Créer un environnement de développement Wordpress avec Docker
[Docker] Construisez l'environnement d'exécution de Jupyter Lab avec Docker
Créer un environnement avec Docker sur AWS
Créer un environnement de vérification des opérations TensorFlow avec Docker
Comment créer un environnement Rails 6 avec Docker
Créez un environnement de développement local pour les didacticiels Rails avec Docker (Rails 6 + PostgreSQL + Webpack)
Créer un environnement Laravel / Docker avec VSCode devcontainer
Créez rapidement un environnement de développement WordPress avec Docker
Créer un environnement mecab (dictionnaire NEologd) avec Docker (ubuntu)
[Rails] Comment créer un environnement avec Docker
Procédure de construction et de développement de l'environnement local Wordpress avec Docker
Lancez MariaDB avec Docker
Exploser Docker avec WSL2
Utiliser Puphpeteer avec Docker
Exploitez Emby avec Docker
Exécutez Payara avec Docker
Construisez Growai avec Centos7
Construire Java avec Wercker
PHP jetable avec Docker
Construisez bazel avec alpin
Comment créer un environnement Docker avec Gradle pour IntelliJ
Créez un environnement Ruby2.7.x + Rails6.0.x + MySQL8.0.x avec Docker
[Note] Créez un environnement Python3 avec Docker dans EC2
(Pour moi-même) Construisez un laboratoire git avec ubuntu 18.04 + docker pour la maison (Remarque)
Environnement Build Rails (API) x MySQL x Nuxt.js avec Docker
Créer une image Android pour Orange Pi 4 avec Docker
Utiliser GDAL avec Python avec Docker
Construire GitLab / Mattermost avec DockerForWindows
Créez un VPN softether avec Centos7.
Déployer avec EC2 / Docker / Laravel
Exécutez TAO Core avec Docker
Gestion Docker avec VS Code
Configurer GitLab avec docker