您能以某种方式运行AWS DynamoDB的本地副本吗?

时间:2013-06-27 23:59:26

标签: amazon-web-services development-environment amazon-dynamodb

如果您想编写代码以使用AWS DynamoDB,有没有办法让它在您的本地开发环境中运行?或者您是否必须使用实际产品?

您是否必须在AWS上配置开发环境?这不是很烦人,因为你必须使用vim并且无法访问你喜欢的IDE吗?或者,每当你想看看你写的是否有效时,你必须将代码推送到它?

8 个答案:

答案 0 :(得分:21)

是的 - 你现在可以。

http://aws.typepad.com/aws/2013/09/dynamodb-local-for-desktop-development.html http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.html

警告包括:

  • DynamoDB Local忽略您的预配置吞吐量设置
  • DynamoDB Local没有耐久性或可用性SLA,不建议用于生产

答案 1 :(得分:3)

有一个可以在本地运行的DynamoDB轻量级版本,请参阅:

https://aws.amazon.com/blogs/aws/dynamodb-local-for-desktop-development/

我发现记住所有设置步骤有点痛苦,因此还创建了一个包装它的Docker Image,这意味着您也可以使用此命令运行DynamoDB Local:

# Run DynamoDB
docker run -p 8000:8000 dwmkerr/dynamodb

# Open the shell to show it's working!
open http://localhost:8000/shell

Docker镜像位于:

https://hub.docker.com/r/dwmkerr/dynamodb/

答案 2 :(得分:2)

是的,您可以运行它,我建议使用jcabi-dynamodb-maven-plugin自动执行此过程(如果您使用的是Apache Maven)。

看看这篇文章:http://www.yegor256.com/2014/05/01/dynamodb-local-maven-plugin.html

答案 3 :(得分:2)

DynamoDB Local有几个生产奇偶校验缺陷,有一个替代的开源本地实现,试图匹配更多名为“dynalite”的实时API。可在https://github.com/mhart/dynalite获得。

答案 4 :(得分:2)

如果您可以从Maven存储库中提取并使用基于JVM的语言,则可以now run it in the same process

<!--Dependency:-->
<dependencies>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>DynamoDBLocal</artifactId>
        <version>1.10.5.1</version>
    </dependency>
</dependencies>
<!--Custom repository:-->
<repositories>
    <repository>
        <id>dynamodb-local</id>
        <name>DynamoDB Local Release Repository</name>
        <url>http://dynamodb-local.s3-website-us-west-2.amazonaws.com/release</url>
    </repository>
</repositories>

这是一个来自awslabs/aws-dynamodb-examples Github存储库的示例:

AmazonDynamoDB dynamodb = null;
try {
    // Create an in-memory and in-process instance of DynamoDB Local that skips HTTP
    dynamodb = DynamoDBEmbedded.create();
    // use the DynamoDB API with DynamoDBEmbedded
    listTables(dynamodb.listTables(), "DynamoDB Embedded");
} finally {
    // Shutdown the thread pools in DynamoDB Local / Embedded
    if(dynamodb != null) {
        dynamodb.shutdown();
    }
}

// Create an in-memory and in-process instance of DynamoDB Local that runs over HTTP
final String[] localArgs = { "-inMemory" };
DynamoDBProxyServer server = null;
try {
    server = ServerRunner.createServerFromCommandLineArgs(localArgs);
    server.start();
    dynamodb = new AmazonDynamoDBClient();
    dynamodb.setEndpoint("http://localhost:8000");

    // use the DynamoDB API over HTTP
    listTables(dynamodb.listTables(), "DynamoDB Local over HTTP");
} finally {
    // Stop the DynamoDB Local endpoint
    if(server != null) {
        server.stop();
    }
}

答案 5 :(得分:2)

在MacOS上,您可以使用brew:

安装并运行它作为后台服务

如果您没有,请下载Brew:

Brew是MacOS的包管理器

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null

使用Brew安装DynamoDB Local:

brew install dynamodb-local

将DynamoDB作为本地服务运行:

这将确保在重新启动计算机时启动DynamoDB本地。

brew services start dynamodb-local

将DynamoDB Local作为一次性启动运行:

此方法将在本地运行DynamoDB一次。您需要在重新启动时重新运行它。

/usr/local/bin/dynamodb-local

然后,您可以在浏览器的shell中点击dynamoDB:

http://localhost:8000/shell/

您可以使用Javascript与DynamoDB进行交互。

DynamoDB Javascript shell in browser

查看此文章以获取有关Running a AWS DynamoDB instance locally

的更详细说明

答案 6 :(得分:0)

有一些方法可以在不实际使用DynamoDB的情况下测试代码。

我个人使用Mockito模拟来模拟我的单元测试中的服务响应。

如果你想要一个'本地'服务器用于实验目的,除了单元测试之外,还有一些由社区维护的开源实现,例如Alternator for Java AWS列出了一些here

答案 7 :(得分:0)

2018年8月Amazon announcedDocker image上安装了Amazon DynamoDB Local。它不需要下载和运行任何JAR,也不需要使用第三方特定于操作系统的二进制文件进行添加。

这就像启动Docker容器一样简单:

docker run -p 8000:8000 amazon/dynamodb-local

如上所述,您可以手动进行本地开发,也可以在CI管道中使用它。许多CI服务都提供了在管道中启动其他容器的功能,这些容器可以为测试提供依赖关系。