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