logo

鱼肚的博客

Don't Repeat Yourself

DynamoDB 本地安装、连接和管理

DynamoDB是AWS提供的一套Serverless数据库,理论上具有极好的伸缩性,无需开发人员关心分库分表。

但是它和Mysql、PostgreSQL等数据库不同,它本身是个云数据库,无法在开发者本地运行。因此开发者在开发过程中如何连接数据库,就成为了一个问题。

如果能在本地运行DynamoDB,开发的时候会方便很多。

本地安装和运行DynamoDB

AWS提供了一套可以本地运行的 mini 版本,DynamoDB Local,你可以在这个网址中查看它的介绍以及下载它:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html

DynamoDB Local安装起来还是比较麻烦,需要jre,对于前端开发者来说,有个更方便使用的基于JS的版本:dynalite https://www.npmjs.com/package/dynalite。

安装dynalite:

1$ npm i -g dynalite

启动 dynalite:

1$ dynalite

它会默认监听4567端口,也可以使用--port选项改变默认端口

连接本地的DynamoDB

本地的DynamoDB启动之后,还需要配置下程序中的连接参数。

如果使用的是 aws-sdk,可以用如下的方式:

1var AWS = require('aws-sdk')
2 
3var dynamo = new AWS.DynamoDB({endpoint: 'http://localhost:4567'})
4 
5dynamo.listTables(console.log.bind(console))

如果是用的 dynamoose,则可以用这样的配置:

1import * as dynamoose from 'dynamoose'
2
3dynamoose.local('http://localhost:4567')

顺便提一下,推荐使用dynamoose来操作DynamoDB,避免直接与DynamoDB繁琐的查询语法打交道,提高编程效率。

如果在使用serverless-offline本地运行代码,则还可以加入如下的判断,在本地模式自动使用本机的数据库:

1import * as dynamoose from 'dynamoose'
2
3if (process.env.IS_OFFLINE) {
4  // 如果是离线模式,就设置下DynamoDB使用本地连接
5  dynamoose.local('http://localhost:4567')
6}

管理本地的DynamoDB

现在本地的数据库搭建和连接都有了,还差一个管理工具。

万能的npm仓库中有一个名为 dynamodb-admin 的包,可以用来做这个事。

https://www.npmjs.com/package/dynamodb-admin

用法如下:

1$ npm install -g dynamodb-admin
2 
3# For Windows: 
4$ export DYNAMO_ENDPOINT=http://localhost:4567
5$ dynamodb-admin
6 
7# For Mac/Linux: 
8$ DYNAMO_ENDPOINT=http://localhost:4567 dynamodb-admin

它会提供一套还算美观的界面,具备增删改查的能力。