

# 在计算机上本地部署 DynamoDB
<a name="DynamoDBLocal.DownloadingAndRunning"></a>

**注意**  
DynamoDB local 有三个版本可用：v3.x（当前版）、v2.x（旧版）和 v1.x（已弃用）。
建议将 DynamoDB v3.x 用于本地测试和开发用途。
从 DynamoDB local V2.x 迁移到 V3.x 要求将导入语句从 `com.amazonaws.services.dynamodbv2` 更新为 `software.amazon.dynamodb` 并更新 Maven 用户的 Maven 依赖关系。
如果您要将使用适用于 Java 的 SDK v1.x 的应用程序迁移到适用于 Java 的 SDK 2.x，请按照 [Amazon SDK for Java 2.x](https://docs.amazonaws.cn/sdk-for-java/latest/developer-guide/migration.html) 的步骤进行操作。

## 下载 DynamoDB local
<a name="DynamoDBLocal.DownloadingAndRunning.V2"></a>

按照以下步骤操作，在您的计算机上设置并运行 DynamoDB。

**在您的计算机上设置 DynamoDB**

1. 从以下位置之一免费下载 DynamoDB local。  
****    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/amazondynamodb/latest/developerguide/DynamoDBLocal.DownloadingAndRunning.html)
**重要**  
 要在您的计算机上运行 DynamoDB v2.6.0 或更高版本，您必须具有 Java 运行时环境（JRE）17.x 或更高版本。此应用程序无法在早期的 JRE 版本上运行。

1.  下载存档后，提取内容，并将提取的目录复制到您选择的某个位置。

1.  要在计算机上启动 DynamoDB，请打开命令提示符窗口，导航到您提取 `DynamoDBLocal.jar` 的目录，并输入以下命令。

   ```
   java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
   ```
**注意**  
 如果您使用的是 Windows PowerShell，请务必将参数名称或整个名称和值括起，如下所示：  
 ` java -D"java.library.path=./DynamoDBLocal_lib" -jar DynamoDBLocal.jar `   
 DynamoDB 将处理传入请求，直到您将其停止为止。要停止 DynamoDB，请在命令提示符处按 Ctrl\$1C。  
 默认情况下，DynamoDB 使用端口 8000。如果端口 8000 不可用，此命令将引发异常。有关 DynamoDB 运行时选项的完整列表（包括 `-port`），请输入此命令。  
 ` java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -help ` 

1. 您必须先配置凭证以便为您的应用程序启用授权，然后才能以编程方式或通过 Amazon Command Line Interface（Amazon CLI）访问 DynamoDB。可下载的 DynamoDB 需要具有任何凭证才能工作，如以下示例所示。

   ```
   Amazon Access Key ID: "fakeMyKeyId" 
   Amazon Secret Access Key: "fakeSecretAccessKey"
   Default Region Name: "fakeRegion"
   ```

    您可以使用 `aws configure` 的 Amazon CLI 命令设置凭证。有关更多信息，请参阅 [使用 Amazon CLI](AccessingDynamoDB.md#Tools.CLI)。

1.  开始编写应用程序。要使用 Amazon CLI 访问本地运行的 DynamoDB，请使用 `--endpoint-url ` 参数。例如，使用以下命令列出 DynamoDB 表。

   ```
   aws dynamodb list-tables --endpoint-url http://localhost:8000
   ```

## 以 Docker 映像的形式运行 DynamoDB local
<a name="DynamoDBLocal.DownloadingAndRunning.Docker"></a>

 Amazon DynamoDB 的可下载版本作为 Docker 映像的一部分提供。有关更多信息，请参阅 [dynamodb-local](https://hub.docker.com/r/amazon/dynamodb-local)。要检查 DynamoDB local 的当前版本，请输入以下命令：

```
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -version
```

 有关使用作为 Amazon Serverless Application Model (Amazon SAM) 上构建的 REST 应用程序的一部分的 DynamoDB Local 的示例，请参阅[用于管理订单的 SAM DynamoDB 应用程序](https://github.com/aws-samples/aws-sam-java-rest)。此样本应用程序演示如何使用 DynamoDB Local 进行测试。

 如果要运行也是使用 DynamoDB 本地容器的多容器应用程序，请使用 Docker Compose 来定义和运行应用程序中的所有服务，包括 DynamoDB Local。

**使用 Docker compose 安装和运行 DynamoDB local：**

1.  下载并安装 [Docker desktop](https://www.docker.com/products/docker-desktop)。

1.  将以下代码复制到文件中并将其保存为 `docker-compose.yml`。

   ```
   services:
    dynamodb-local:
      command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data"
      image: "amazon/dynamodb-local:latest"
      container_name: dynamodb-local
      ports:
        - "8000:8000"
      volumes:
        - "./docker/dynamodb:/home/dynamodblocal/data"
      working_dir: /home/dynamodblocal
   ```

    如果您希望应用程序和 DynamoDB Local 位于单独的容器中，请使用以下 yaml 文件。

   ```
   version: '3.8'
   services:
    dynamodb-local:
      command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data"
      image: "amazon/dynamodb-local:latest"
      container_name: dynamodb-local
      ports:
        - "8000:8000"
      volumes:
        - "./docker/dynamodb:/home/dynamodblocal/data"
      working_dir: /home/dynamodblocal
    app-node:
      depends_on:
        - dynamodb-local
      image: amazon/aws-cli
      container_name: app-node
      ports:
       - "8080:8080"
      environment:
        AWS_ACCESS_KEY_ID: 'DUMMYIDEXAMPLE'
        AWS_SECRET_ACCESS_KEY: 'DUMMYEXAMPLEKEY'
      command:
        dynamodb describe-limits --endpoint-url http://dynamodb-local:8000 --region us-west-2
   ```

    此 docker-compose.yml 脚本将创建一个 `app-node` 容器和一个 `dynamodb-local` 容器。此脚本会在 `app-node` 容器中运行一个命令，该命令使用 Amazon CLI 连接到 `dynamodb-local` 容器，并描述账户和表限制。

    要与您自己的应用程序映像一起使用，请将以下示例中的 `image` 值替换为应用程序的相应值：

   ```
   version: '3.8'
   services:
    dynamodb-local:
      command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data"
      image: "amazon/dynamodb-local:latest"
      container_name: dynamodb-local
      ports:
        - "8000:8000"
      volumes:
        - "./docker/dynamodb:/home/dynamodblocal/data"
      working_dir: /home/dynamodblocal
    app-node:
      image: location-of-your-dynamodb-demo-app:latest
      container_name: app-node
      ports:
        - "8080:8080"
      depends_on:
        - "dynamodb-local"
      links:
        - "dynamodb-local"
      environment:
        AWS_ACCESS_KEY_ID: 'DUMMYIDEXAMPLE'
        AWS_SECRET_ACCESS_KEY: 'DUMMYEXAMPLEKEY'
        REGION: 'eu-west-1'
   ```
**注意**  
 YAML 脚本要求您指定 Amazon 访问密钥和 Amazon 私有密钥，但它们不一定是您访问 DynamoDB local 的有效 Amazon 密钥。

1.  运行以下命令行命令：

   ```
   docker-compose up
   ```

## 将 DynamoDB local 作为 Apache Maven 依赖项运行
<a name="DynamoDBLocal.DownloadingAndRunning.Maven.v2"></a>

**注意**  
如果您要将使用适用于 Java 的 SDK v1.x 的应用程序迁移到适用于 Java 的 SDK 2.x，请按照 [Amazon SDK for Java 2.x](https://docs.amazonaws.cn/sdk-for-java/latest/developer-guide/migration.html) 的步骤进行操作。

 按照以下步骤操作，在应用程序中将 Amazon DynamoDB 用作依赖项。

**将 DynamoDB 部署为 Apache Maven 存储库**

1.  下载并安装 Apache Maven。有关更多信息，请参见[下载 Apache Maven](https://maven.apache.org/download.cgi) 和[安装 Apache Maven](https://maven.apache.org/install.html)。

1.  将 DynamoDB Maven 存储库添加到您的应用程序的项目对象模型 (POM) 文件。

   ```
   <!--Dependency:-->
   <dependencies>
      <dependency>
         <groupId>software.amazon.dynamodb</groupId>
         <artifactId>DynamoDBLocal</artifactId>
         <version>3.3.0</version>
      </dependency>
   </dependencies>
   ```

    用于 Spring Boot 3 和/或 Spring Framework 6 的模板示例：

   ```
   <?xml version="1.0" encoding="UTF-8"?>
   <project xmlns="http://maven.apache.org/POM/4.0.0"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   
   <groupId>org.example</groupId>
   <artifactId>SpringMavenDynamoDB</artifactId>
   <version>1.0-SNAPSHOT</version>
   
   <properties>
      <spring-boot.version>3.0.1</spring-boot.version>
      <maven.compiler.source>17</maven.compiler.source>
      <maven.compiler.target>17</maven.compiler.target>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   
      <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>3.1.0</version>
      </parent>
   
   <dependencies>
      <dependency>
          <groupId>software.amazon.dynamodb</groupId>
          <artifactId>DynamoDBLocal</artifactId>
          <version>3.3.0</version>
      </dependency>
      <!-- Spring Boot -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
          <version>${spring-boot.version}</version>
      </dependency>
      <!-- Spring Web -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
          <version>${spring-boot.version}</version>
      </dependency>
      <!-- Spring Data JPA -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-jpa</artifactId>
          <version>${spring-boot.version}</version>
      </dependency>
      <!-- Other Spring dependencies -->
      <!-- Replace the version numbers with the desired version -->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>6.0.0</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>6.0.0</version>
      </dependency>
      <!-- Add other Spring dependencies as needed -->
      <!-- Add any other dependencies your project requires -->
   </dependencies>
   </project>
   ```
**注意**  
 您也可以使用 [Maven Central 存储库](https://mvnrepository.com/artifact/com.amazonaws/DynamoDBLocal?repo=dynamodb-local-release) URL。

## 在 Amazon CloudShell 中运行 DynamoDB local
<a name="DynamoDBLocal.DynamoDB.Local.CloudShell"></a>

Amazon CloudShell 是一个已经事先完成身份验证的浏览器式 Shell，您可以直接从 Amazon Web Services 管理控制台启动它。可以通过几种不同的方式从 Amazon Web Services 管理控制台导航到 Amazon CloudShell。有关更多信息，请参阅[开始使用 Amazon CloudShell](https://docs.amazonaws.cn/cloudshell/latest/userguide/getting-started.html)。

按照以下步骤从 Amazon Web Services 管理控制台中的任何位置在 Amazon CloudShell 中运行 DynamoDB local。

**通过 Amazon Web Services 管理控制台在 Amazon CloudShell 中运行 DynamoDB local**

1. 从控制台界面启动 Amazon CloudShell，选择可用的 Amazon Web Services 区域，然后切换到您的首选 Shell，例如 Bash、PowerShell 或 Z Shell。

1. 要选择 Amazon Web Services 区域，请转至**选择区域**菜单，然后选择[支持的 Amazon Web Services 区域](https://docs.amazonaws.cn/cloudshell/latest/userguide/supported-aws-regions.html)。（可用区域突出显示。）

1. 从 Amazon Web Services 管理控制台中，通过选择以下选项之一来启动 Amazon CloudShell：

   1. 在导航栏上选择 **Amazon CloudShell** 图标。

   1. 在**搜索**框中，键入单词 CloudShell，然后选择 **CloudShell**。

   1. 在**最新访问**小部件中，选择 **CloudShell**。

   1. 从控制台工具栏中选择 **CloudShell**。

1. 要在 Amazon CloudShell 中运行 DynamoDB local，可以使用 `dynamodb-local` 别名。您可以指定其它命令行选项来更改 DynamoDB local 设置。有关可用的选项，请参阅 [DynamoDB local 使用说明](DynamoDBLocal.UsageNotes.md)。
**注意**  
要在后台运行 DynamoDB local，请在 Amazon CloudShell 中使用 `dynamodb-local &` 运行 DynamoDB local。

1. 要使用 Amazon CLI 在 Amazon CloudShell 中访问本地运行的 DynamoDB，请使用 `--endpoint-url` 参数。例如，使用以下命令来列出 DynamoDB 表：

   `aws dynamodb list-tables --endpoint-url http://localhost:8000`

有关展示多种设置和使用 DynamoDB local 的方法（包括下载 JAR 文件、将其作为 Docker 映像运行以及将其用作 Maven 依赖项）的示例项目，请参阅 [DynamoDB Local 示例 Java 项目](https://github.com/awslabs/amazon-dynamodb-local-samples/tree/main)。