Skip to content

Instantly share code, notes, and snippets.

@banyudu
Last active March 7, 2020 08:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save banyudu/2723014e3ff1d8526988b21882963f3d to your computer and use it in GitHub Desktop.
Save banyudu/2723014e3ff1d8526988b21882963f3d to your computer and use it in GitHub Desktop.
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:

$ npm i -g dynalite

启动 dynalite:

$ dynalite

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

连接本地的DynamoDB

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

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

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

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

import * as dynamoose from 'dynamoose'

dynamoose.local('http://localhost:4567')

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

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

import * as dynamoose from 'dynamoose'

if (process.env.IS_OFFLINE) {
  // 如果是离线模式,就设置下DynamoDB使用本地连接
  dynamoose.local('http://localhost:4567')
}

管理本地的DynamoDB

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

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

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

用法如下:

$ npm install -g dynamodb-admin
 
# For Windows: 
$ export DYNAMO_ENDPOINT=http://localhost:4567
$ dynamodb-admin
 
# For Mac/Linux: 
$ DYNAMO_ENDPOINT=http://localhost:4567 dynamodb-admin

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment