

# 设置 DynamoDB
<a name="SettingUp"></a>

 除了 Amazon DynamoDB Web 服务之外，AWS 还提供可在计算机上运行的 DynamoDB 的可下载版本。可下载的版本有助于开发和测试您的代码。此版本可让您在不访问 DynamoDB Web 服务的情况下在本地编写和测试应用程序。

 本部分中的主题描述如何设置 DynamoDB（可下载版本）和 DynamoDB Web 服务。

**Topics**
+ [设置 DynamoDB（Web 服务）](SettingUp.DynamoWebService.md)
+ [设置 DynamoDB local（可下载版本）](DynamoDBLocal.md)

# 设置 DynamoDB（Web 服务）
<a name="SettingUp.DynamoWebService"></a>

 使用 Amazon DynamoDB Web 服务：

1.  [注册 AWS。](#SettingUp.DynamoWebService.SignUpForAWS)

1.  [获取 AWS 访问密钥](#SettingUp.DynamoWebService.GetCredentials)（用于以编程方式访问 DynamoDB）。
**注意**  
 如果您计划仅通过 AWS 管理控制台 与 DynamoDB 交互，则不需要 AWS 访问密钥，并且您可以跳至 [使用控制台](AccessingDynamoDB.md#ConsoleDynamoDB)。

1.  [配置您的凭证](#SettingUp.DynamoWebService.ConfigureCredentials)（用于以编程方式访问 DynamoDB）。

## 注册 AWS
<a name="SettingUp.DynamoWebService.SignUpForAWS"></a>

 要使用 DynamoDB 服务，您必须拥有 AWS 账户。如果您还没有账户，系统会在您注册时提示您创建一个。如果您没有使用注册的任何 AWS 产品，系统将不会针对它们向您收费。

**注册 AWS**

1. 打开 [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)。

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册 AWS 账户 时，系统将会创建一个。*AWS 账户根用户*根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

## 授权以编程方式访问
<a name="SettingUp.DynamoWebService.GetCredentials"></a>

 您必须先具有编程访问权限，然后才能以编程方式或通过 AWS Command Line Interface（AWS CLI）访问 DynamoDB。如果您计划仅使用 DynamoDB 控制台，则无需编程访问权限。

如果用户需要在 AWS 管理控制台之外与 AWS 交互，则需要编程式访问权限。授予编程式访问权限的方法取决于访问 AWS 的用户类型。

要向用户授予编程式访问权限，请选择以下选项之一。


****  

| 哪个用户需要编程式访问权限？ | 目的 | 方式 | 
| --- | --- | --- | 
| IAM | （推荐）使用控制台凭证作为临时凭证来签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/SettingUp.DynamoWebService.html)  | 
|  人力身份 （在 IAM Identity Center 中管理的用户）  | 使用临时凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/SettingUp.DynamoWebService.html)  | 
| IAM | 使用临时凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 | 按照《IAM 用户指南》中[将临时凭证用于 AWS 资源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)中的说明进行操作。 | 
| IAM | （不推荐使用）使用长期凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/SettingUp.DynamoWebService.html)  | 

## 配置凭证
<a name="SettingUp.DynamoWebService.ConfigureCredentials"></a>

 您必须先配置凭证以便为您的应用程序启用授权，然后才能以编程方式或通过 AWS CLI 访问 DynamoDB。

 我们可以通过多种方式来实现这一目的。例如，您可以手动创建凭证文件以存储您的访问密钥 ID 和秘密访问密钥。您还可以使用 AWS CLI 命令 `aws configure` 自动创建文件。或者，您也可以使用环境变量。有关配置您的凭证的更多信息，请参阅特定于编程的 AWS SDK 开发人员指南。

 要安装和配置 AWS CLI，请参阅 [使用 AWS CLI](AccessingDynamoDB.md#Tools.CLI)。

## 与其它 DynamoDB 服务集成
<a name="w2aab9c17b9c13"></a>

您可以将 DynamoDB 与许多其它 AWS 服务集成。有关更多信息，请参阅下列内容：
+ [将 DynamoDB 与其它 AWS 服务一起使用](OtherServices.md)
+ [CloudFormation适用于 DynamoDB 的](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html) 
+ [将 AWS Backup 与 DynamoDB 结合使用](backuprestore_HowItWorksAWS.md)
+ [AWS Identity and Access Management（IAM）和 DynamoDB](identity-and-access-mgmt.md)
+ [将 AWS Lambda 与 Amazon DynamoDB 结合使用](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html)

# 设置 DynamoDB local（可下载版本）
<a name="DynamoDBLocal"></a>

 利用 Amazon DynamoDB 的可下载版本，您可以在不访问 DynamoDB Web 服务的情况下开发和测试应用程序。相反，数据库可在计算机上独立使用。当您准备好在生产中部署应用程序时，可以在代码中删除本地端点，然后它将指向 DynamoDB Web 服务。

 拥有此本地版本将帮助您节省吞吐量、数据存储和数据传输费用。此外，您在开发应用程序时无需 Internet 连接。

 DynamoDB local 作为[下载](DynamoDBLocal.DownloadingAndRunning.md#DynamoDBLocal.DownloadingAndRunning.title)版本（需要 JRE）、作为 [Apache Maven 依赖项](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.DownloadingAndRunning.html#apache-maven)或作为 [Docker 映像](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.DownloadingAndRunning.html#docker)提供。

 如果您希望改用 Amazon DynamoDB Web 服务，请参阅 [设置 DynamoDB（Web 服务）](SettingUp.DynamoWebService.md)。

**Topics**
+ [在计算机上本地部署 DynamoDB](DynamoDBLocal.DownloadingAndRunning.md)
+ [DynamoDB local 使用说明](DynamoDBLocal.UsageNotes.md)
+ [DynamoDB local 的发布历史记录](DynamoDBLocalHistory.md)
+ [DynamoDB local 中的遥测](DynamoDBLocalTelemetry.md)

# 在计算机上本地部署 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，请按照 [AWS SDK for Java 2.x](https://docs.aws.amazon.com/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.aws.amazon.com/zh_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. 您必须先配置凭证以便为您的应用程序启用授权，然后才能以编程方式或通过 AWS Command Line Interface（AWS CLI）访问 DynamoDB。可下载的 DynamoDB 需要具有任何凭证才能工作，如以下示例所示。

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

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

1.  开始编写应用程序。要使用 AWS 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
```

 有关使用作为 AWS Serverless Application Model (AWS 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` 容器中运行一个命令，该命令使用 AWS 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 脚本要求您指定 AWS 访问密钥和 AWS 私有密钥，但它们不一定是您访问 DynamoDB local 的有效 AWS 密钥。

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

   ```
   docker-compose up
   ```

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

**注意**  
如果您要将使用适用于 Java 的 SDK v1.x 的应用程序迁移到适用于 Java 的 SDK 2.x，请按照 [AWS SDK for Java 2.x](https://docs.aws.amazon.com/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。

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

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

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

**通过 AWS 管理控制台在 AWS CloudShell 中运行 DynamoDB local**

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

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

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

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

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

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

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

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

1. 要使用 AWS CLI 在 AWS 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)。

# DynamoDB local 使用说明
<a name="DynamoDBLocal.UsageNotes"></a>

 除了端点之外，使用 Amazon DynamoDB 可下载版本运行的应用程序还应能使用 DynamoDB Web 服务运行。但是，在本地使用 DynamoDB 时，您应了解以下事项：
+  如果您使用 `-sharedDb` 选项，则 DynamoDB 将创建一个名为 *shared-local-instance.db* 的数据库文件。连接到 DynamoDB 的每个程序都将访问此文件。如果删除此文件，则将丢失存储在此文件中的所有数据。
+  如果省略 `-sharedDb`，则数据库文件出现在应用程序配置中时，将命名为 *myaccesskeyid\$1region.db*（包含 AWS 访问密钥 ID 和 AWS 区域）。如果删除此文件，则将丢失存储在此文件中的所有数据。
+  如果使用 `-inMemory` 选项，则 DynamoDB 完全不会编写任何数据库文件。相反，所有数据将被写入内存中，并且在您终止 DynamoDB 时不会保存这些数据。
+  如果您使用 `-inMemory` 选项，则 `-sharedDb` 选项也是必需的。
+  如果使用 `-optimizeDbBeforeStartup` 选项，则还必须指定 `-dbPath` 参数，以便 DynamoDB 可找到其数据库文件。
+  AWS SDK for DynamoDB 要求您的应用程序配置指定访问密钥值和 AWS 区域值。除非您使用的是 `-sharedDb` 或 `-inMemory` 选项，否则 DynamoDB 将使用这些值来命名本地数据库文件。这些值不必是有效的 AWS 值也能在本地运行。但是，您可能发现使用有效值非常方便，因为您以后可通过更改当前使用的端点来在云中运行您的代码。
+  DynamoDB local 始终为 `billingModeSummary.` 返回 null。
+  DynamoDB local `AWS_ACCESS_KEY_ID` 只能包含字母（A–Z，a–z）和数字 (0–9)。
+ DynamoDB Local 不支持[时间点故障恢复（PITR）](Point-in-time-recovery.md)。

**Topics**
+ [命令行选项](#DynamoDBLocal.CommandLineOptions)
+ [设置本地端点](#DynamoDBLocal.Endpoint)
+ [可下载的 DynamoDB 和 DynamoDB Web 服务之间的差异](#DynamoDBLocal.Differences)

## 命令行选项
<a name="DynamoDBLocal.CommandLineOptions"></a>

 您可将下列命令行选项用于 DynamoDB 的下载版本：
+  `-cors` `value` — 实现对适用于 JavaScript 的跨源资源共享 (CORS) 的支持。您必须提供特定域的逗号分隔“允许”列表。`-cors` 的默认设置是星号 (\$1)，这将允许公开访问。
+  `-dbPath` `value` — DynamoDB 写入数据库文件的目录。如果您未指定此选项，则文件将写入到当前目录。您不能同时指定 `-dbPath` 和 `-inMemory`。
+  `-delayTransientStatuses` — 导致 DynamoDB 为某些操作引入延迟。DynamoDB（可下载版本）几乎可以即时执行某些任务，如针对表和索引的创建/更新/删除操作。但是，DynamoDB 服务需要更多时间才能完成这些任务。设置此参数可帮助在您的计算机上运行的 DynamoDB 更逼真地模拟 DynamoDB Web 服务的行为。（目前，此参数仅为处于 *CREATING* 或 *DELETING* 状态的全局二级索引引入延迟。） 
+  `-help` — 打印使用摘要和选项。
+  `-inMemory` — DynamoDB 将在内存中运行，而不使用数据库文件。停止 DynamoDB 时，不会保存任何数据。您不能同时指定 `-dbPath` 和 `-inMemory`。
+  `-optimizeDbBeforeStartup` — 在计算机上启动 DynamoDB 之前优化底层数据库表。使用此参数时，您还必须指定 `-dbPath`。
+  `-port` `value` — DynamoDB 用于与您的应用程序进行通信的端口号。如果您未指定此选项，则默认端口是 `8000`。
**注意**  
 默认情况下，DynamoDB 使用端口 8000。如果端口 8000 不可用，此命令将引发异常。您可以使用 `-port` 选项指定其他端口号。有关 DynamoDB 运行时选项的完整列表（包括 `-port`），请键入此命令：  
 `java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -help` 
+  `-sharedDb` — 如果您指定 `-sharedDb`，则 DynamoDB 将使用单个数据库文件，而不是针对每个凭证和区域使用不同的文件。
+  `-disableTelemetry` — 指定后，DynamoDB local 将不发送任何遥测信息。
+ `-version` — 显示 DynamoDB local 的版本。

## 设置本地端点
<a name="DynamoDBLocal.Endpoint"></a>

 默认情况下，AWS SDK 和工具使用 Amazon DynamoDB Web 服务的端点。要将 SDK 和工具用于 DynamoDB 下载版本，您必须指定本地端点：

 `http://localhost:8000` 

### AWS Command Line Interface
<a name="DynamoDBLocal.Endpoint.CLI"></a>

 您可使用 AWS Command Line Interface (AWS CLI) 与可下载的 DynamoDB 交互。

 要访问本地运行的 DynamoDB，请使用 `--endpoint-url` 参数。以下是使用 AWS CLI 列出计算机上的 DynamoDB 中的表的示例。

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

**注意**  
 AWS CLI 不能使用 DynamoDB 的可下载版本作为默认端点。因此，您必须对每个`--endpoint-url` 命令指定 AWS CLI。

### AWS SDK
<a name="DynamoDBLocal.Endpoint.SDK"></a>

 指定端点的方法取决于要使用的编程语言和 AWS SDK。下面几节介绍如何执行此操作：
+  [Java：设置 AWS 区域和端点](CodeSamples.Java.md#CodeSamples.Java.RegionAndEndpoint)（DynamoDB local 支持适用于 Java 的 AWS SDK V1 和 V2） 
+ CodeSamples.Java.RegionAndEndpoint [.NET：设置 AWS 区域和端点](CodeSamples.DotNet.md#CodeSamples.DotNet.RegionAndEndpoint) 

## 可下载的 DynamoDB 和 DynamoDB Web 服务之间的差异
<a name="DynamoDBLocal.Differences"></a>

 DynamoDB 下载版本仅适合用于开发和测试。相比而言，DynamoDB Web 服务是一项具备可扩展性、可用性和持久性特点的托管服务，非常适合在生产中使用。

 DynamoDB 下载版本与该 Web 服务的差别如下：
+ 在客户端层面上不支持 AWS 区域和不同的 AWS 账户。
+  可下载的 DynamoDB 中会忽略预置的吞吐量设置，即使 `CreateTable` 操作需要这些设置也是如此。对于 `CreateTable`，您可以为预置读取和写入吞吐量指定任何数字，即使不使用这些数字也是如此。您每天可以按需调用 `UpdateTable` 任意次数。但是，对预置吞吐量值的任何更改都会忽略。
+  `Scan` 操作将按顺序执行。不支持并行扫描。`Segment` 操作的 `TotalSegments` 和 `Scan` 参数将被忽略。
+  对表数据的读取和写入操作的速度仅受计算机速度的限制。`CreateTable`、`UpdateTable` 和 `DeleteTable` 操作立即发生，表状态始终为“ACTIVE”。仅更改表或全局二级索引的预置吞吐量设置的 `UpdateTable` 操作将立即执行。如果 `UpdateTable` 操作创建或删除任何全局二级索引，则这些索引在常规状态（如，分别为 CREATING 和 DELETING）之后变为 ACTIVE 状态。在此期间，表保持为 ACTIVE 状态。
+  读取操作具有最终一致性。但是，由于 DynamoDB 在计算机上的本地运行速度，大多数读取操作会表现为强一致性。
+  将不跟踪项目集合指标和项目集合大小。在操作响应中返回 Null，而不是项目集合指标。
+  在 DynamoDB 中，每个结果集返回的数据有 1 MB 的限制。DynamoDB Web 服务和下载版本均将强制执行此限制。但是，在查询索引时，DynamoDB 服务将仅计算投影键和属性的大小。而 DynamoDB 的可下载版本则会计算整个项目的大小。
+  如果使用的是 DynamoDB Streams，则创建分片的速率可能不同。在 DynamoDB Web 服务中，分片创建行为部分受表分片活动的影响。在本地运行 DynamoDB 时，不存在表分区活动。在任一情况下，分区都是临时的，因此您的应用程序不应依赖分区行为。
+  可下载 DynamoDB 不会为事务 API 引发 `TransactionConflictExceptions`。我们建议您使用 Java 模拟框架来模拟 DynamoDB 处理程序中的 `TransactionConflictExceptions`，以测试您的应用程序如何响应冲突的事务。
+  在 DynamoDB Web 服务中，无论是通过控制台还是 AWS CLI 进行访问，表名称都区分大小写。名为 `Authors` 和名为 `authors` 的表可同时作为不同的表存在。在可下载的版本中，表名称不区分大小写，尝试创建这两个表将导致错误。
+ DynamoDB 的可下载版本不支持标记。
+ DynamoDB 的可下载版本会忽略 [ExecuteStatement](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ExecuteStatement.html) 中的 [Limit](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ExecuteStatement.html#DDB-ExecuteStatement-request-Limit) 参数。

# DynamoDB local 的发布历史记录
<a name="DynamoDBLocalHistory"></a>

下表介绍每一版的 *DynamoDB local* 中的重大更改。


****  

| 版本 | 更改 | 描述 | 日期 | 
| --- | --- | --- | --- | 
| 3.3.0 |  为全局二级索引添加多属性键支持  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2026 年 1 月 19 日  | 
| 3.2.0 |  修复了多个 Kotlin 版本的兼容性问题  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2026 年 1 月 9 日  | 
| 3.1.0 |  改善了 PartiQL 查询的性能，包括 Joda-time 依赖关系  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2025 年 9 月 14 日  | 
| 3.0.0 |  从 AWS SDK Java V1 迁移到 V2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2025 年 7 月 17 日  | 
| 2.6.0 |  在 DynamoDB API 中支持表 ARN 作为表名称 性能修复和安全更新  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2025 年 3 月 13 日  | 
| 2.5.4 |  对 Jetty 依赖项的升级  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2024 年 12 月 12 日  | 
| 2.5.3 |  在 Log4j Core 中将 Jackson 依赖项升级到 2.17.x（解决 CVE-2022-1471）  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2024 年 11 月 6 日  | 
| 2.5.2 | 更新表工作流的错误修复 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  | 2024 年 6 月 20 日 | 
| 2.5.1 | 针对 OndemandThroughPut 功能中引入错误的补丁  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html) | 2024 年 6 月 5 日 | 
| 2.5.0 |  支持按需表、`ReturnValuesOnConditionCheckFailure`、`BatchExecuteStatement` 和 `ExecuteTransactionRequest` 的可配置最大吞吐量  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2024 年 5 月 28 日  | 
| 2.4.0 |  支持 `ReturnValuesOnConditionCheckFailure` – 嵌入式模式  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2024 年 4 月 17 日  | 
| 2.3.0 |  Jetty 和 JDK 升级  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2024 年 3 月 14 日  | 
| 2.2.0 |  增加了对表删除保护和 `ReturnValuesOnConditionCheckFailure` 参数的支持  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2023 年 12 月 14 日  | 
| 2.1.0 |  支持 Maven 项目的 SQLLite 原生库并添加遥测功能  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2023 年 10 月 23 日  | 
| 2.0.0 |  从 javax 迁移到 jakarta 命名空间和 JDK11 支持  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2023 年 7 月 5 日  | 
| 1.25.1 |  在 Log4j Core 中将 Jackson 依赖项升级到 2.17.x（解决 CVE-2022-1471）  |  在 Log4j Core 中将 Jackson 依赖项升级到 2.17.x（解决 CVE-2022-1471），以解决 SnakeYAML 库（这是一个传递依赖项）中的一个严重安全漏洞  |  2024 年 11 月 6 日  | 
| 1.25.0 |  增加了对表删除保护和 `ReturnValuesOnConditionCheckFailure` 参数的支持  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2023 年 12 月 18 日  | 
| 1.24.0 |  支持 Maven 项目的 SQLLite 原生库并添加遥测功能  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2023 年 10 月 23 日  | 
| 1.23.0 |  处理服务器启动时的无效访问和私密密钥  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2023 年 6 月 28 日  | 
| 1.22.0 |  支持 PartiQL 的限制操作  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2023 年 6 月 8 日  | 
| 1.21.0 |  每个事务支持 100 个操作  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2023 年 1 月 26 日  | 
| 1.20.0 |  增加了对 M1 Mac 的支持  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  |  2022 年 9 月 12 日  | 
| 1.19.0 |  升级了 PartiQL 解析器  |  升级了 PartiQL 解析器和其他相关库  |  2022 年 7 月 27 日  | 
| 1.18.0 | 升级了 log4j-core 和 Jackson-core | 将 log4j-core 升级到 2.17.1，将 Jackson-core 2.10.x 升级到 2.12.0 | 2022 年 1 月 10 日 | 
| 1.17.2 | 升级了 log4j-core | 将 log4j-core 依赖项升级到版本 2.16 | 2021 年 1 月 16 日 | 
| 1.17.1 | 升级了 log4j-core | 更新了 log4j-core 依赖项，以修补零日漏洞来防止远程代码执行 – Log4Shel | 2021 年 1 月 10 日 | 
| 1.17.0 | 已弃用 Javascript Web Shell |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBLocalHistory.html)  | 2021 年 1 月 8 日 | 

# DynamoDB local 中的遥测
<a name="DynamoDBLocalTelemetry"></a>

 在 AWS，我们根据从与客户互动中学到的知识开发和推出服务，并使用客户反馈来迭代我们的产品。遥测是附加信息，可帮助我们更好地了解客户需求、诊断问题并提供特征，以改善客户体验。

 DynamoDB local 收集遥测数据，例如一般使用指标、系统和环境信息以及错误。有关收集的遥测类型的详细信息，请参阅[收集的信息类型](#DynamoDBLocalTelemetry.TypesOfInformationCollected)。

 DynamoDB local 不收集诸如用户名或电子邮件地址等个人信息。它也不会提取敏感的项目级信息。

 作为客户，您控制着是否开启遥测功能，并且可以随时更改设置。如果遥测保持开启状态，DynamoDB local 将在后台发送遥测数据，无需任何额外的客户互动。

## 使用命令行选项关闭遥测功能
<a name="DynamoDBLocalTelemetry.cli"></a>

 启动 DynamoDB local 时，您可以使用命令行选项 `-disableTelemetry` 关闭遥测功能。有关更多信息，请参阅 [命令行选项](DynamoDBLocal.UsageNotes.md#DynamoDBLocal.CommandLineOptions)。

## 关闭单个会话的遥测功能
<a name="DynamoDBLocalTelemetry.TurnOffTelemetrySingleSession"></a>

 在 macOS 和 Linux 操作系统中，您可以关闭单个会话的遥测功能。要关闭当前会话的遥测功能，请运行以下命令将环境变量 `DDB_LOCAL_TELEMETRY` 设置为 `false`。对每个新终端或会话重复此命令。

```
export DDB_LOCAL_TELEMETRY=0
```

## 在所有会话中关闭配置文件的遥测功能
<a name="DynamoDBLocalTelemetry.TurnOffTelemetryForAllSessions"></a>

 当您在操作系统上运行 DynamoDB local 时，运行以下命令以关闭所有会话的遥测功能。

**在 Linux 中关闭遥测功能**

1.  运行：

   ```
   echo "export DDB_LOCAL_TELEMETRY=0" >>~/.profile
   ```

1.  运行：

   ```
   source ~/.profile
   ```

**在 macOS 中关闭遥测功能**

1.  运行：

   ```
   echo "export DDB_LOCAL_TELEMETRY=0" >>~/.profile
   ```

1.  运行：

   ```
   source ~/.profile
   ```

**在 Windows 中关闭遥测功能**

1.  运行：

   ```
   setx DDB_LOCAL_TELEMETRY 0
   ```

1.  运行：

   ```
   refreshenv
   ```

## 使用嵌入 Maven 项目的 DynamoDB local 关闭遥测
<a name="DynamoDBLocalTelemetry.maven"></a>

 可以使用嵌入 Maven 项目的 DynamoDB local 关闭遥测功能。

```
boolean disableTelemetry = true;
// AWS SDK v1
 AmazonDynamoDB amazonDynamoDB = DynamoDBEmbedded.create(disableTelemetry).amazonDynamoDB();

// AWS SDK v2
DynamoDbClient ddbClientSDKv2Local = DynamoDBEmbedded.create(disableTelemetry).dynamoDbClient();
```

## 收集的信息类型
<a name="DynamoDBLocalTelemetry.TypesOfInformationCollected"></a>
+  **使用信息** — 通用遥测信息，例如服务器启动/停止以及调用的 API 或操作。
+  **系统和环境信息** — Java 版本、操作系统（Windows、Linux 或 macOS）、DynamoDB local 运行的环境（例如，独立 JAR、Docker 容器或作为 Maven 依赖项）以及使用情况属性的哈希值。

## 了解更多
<a name="DynamoDBLocalTelemetry.LearnMore"></a>

 DynamoDB local 收集的遥测数据符合 AWS 数据隐私策略。有关更多信息，请参阅下列内容：
+  [AWS 服务条款](https://aws.amazon.com/service-terms/) 
+  [数据隐私常见问题解答](https://aws.amazon.com/compliance/data-privacy-faq/) 