17

If you want to write code to use AWS DynamoDB, is there any way to have it run on your local development environment? Or do you have to use the actual product?

Do you have to provision a development environment on AWS? Isn't that annoying because you'd have to work with vim and not have access to your favorite IDE? Or you have to push code to it every time you want to see if what you wrote is working?

4

8 回答 8

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,不建议用于生产
于 2013-09-13T05:24:01.333 回答
3

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

看这个帖子:http ://www.yegor256.com/2014/05/01/dynamodb-local-maven-plugin.html

于 2013-09-21T18:50:46.080 回答
3

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

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

我发现记住所有设置步骤有点痛苦,因此还创建了一个包装它的 Docker 映像,这意味着您也可以使用以下命令运行 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/

于 2017-04-03T03:38:40.000 回答
2

在 MacOS 上,您可以使用 brew 将其安装并作为后台服务运行:

如果您没有 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

查看本文以获取有关在本地运行 AWS DynamoDB 实例的更详细说明

于 2016-09-21T18:28:22.393 回答
1

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

于 2014-08-18T07:40:04.063 回答
1

如果您可以从 Maven 存储库中提取并使用基于 JVM 的语言,您现在可以在同一进程中运行它

<!--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();
    }
}
于 2015-09-24T03:40:13.790 回答
0

2018 年 8 月, Amazon 宣布了新的Docker 映像,其中包含 Amazon DynamoDB Local。它不需要下载和运行任何 JAR,也不需要使用第三方操作系统特定的二进制文件进行添加。

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

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

如上所述,您可以手动为本地开发执行此操作,或在 CI 管道中使用它。许多 CI 服务提供了在管道期间启动其他容器的能力,这些容器可以为您的测试提供依赖项。

于 2019-09-27T10:02:50.210 回答
-1

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

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

如果您想要一个“本地”服务器用于单元测试之外的实验目的,则社区维护了一些开源实现,例如Alternator for Java AWS在这里列出了一些:

于 2013-07-15T08:51:46.300 回答