

# DynamoDB local の使用に関する注意事項
<a name="DynamoDBLocal.UsageNotes"></a>

 エンドポイントを除き、ダウンロード可能なバージョンの Amazon DynamoDB で実行するアプリケーションは DynamoDB ウェブサービスでも動作します。ただし、DynamoDB をローカルで使用する場合は、以下に注意する必要があります。
+  `-sharedDb` オプションを使用すると、DynamoDB は *shared-local-instance.db* という名前の単一のデータベースファイルを作成します。DynamoDB に接続するプログラムはいずれも、このファイルにアクセスします。このファイルを削除すると、保存されたすべてのデータを失うことになります。
+  `-sharedDb` を省略する場合のデータベースファイルの名前は、*myaccesskeyid\$1region.db* で、アプリケーション設定に表示されるとおりの AWS アクセスキー ID と AWS リージョンが使用されます。このファイルを削除すると、保存されたすべてのデータを失うことになります。
+  `-inMemory` オプションを使用した場合、DynamoDB はデータベースファイルの書き込みをまったく行いません。代わりに、すべてのデータがメモリに書き込まれ、DynamoDB を終了するときにデータは保存されません。
+  `-inMemory` オプション使用する場合は、`-sharedDb` オプションも必要です。
+  `-optimizeDbBeforeStartup` オプションを使用した場合は、`-dbPath` パラメータも指定し、DynamoDB がそのデータベースファイルを見つけられるようにする必要があります。
+  DynamoDB 用 AWS SDK では、アプリケーション設定でアクセスキーバリューと 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 ウェブサービスの違い](#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 ウェブサービスの動作をより正確にシミュレートしやすくなります。(現在、このパラメータではステータスが *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 ウェブサービスのエンドポイントを使用します。ダウンロード可能なバージョンの DynamoDB を使用して SDK およびツールを使用するには、ローカルエンドポイントを指定する必要があります。

 `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 は、AWS SDK for Java V1 および V2 をサポートしています) 
+ CodeSamples.Java.RegionAndEndpoint [.NET: AWS リージョンとエンドポイントの設定](CodeSamples.DotNet.md#CodeSamples.DotNet.RegionAndEndpoint) 

## ダウンロード可能な DynamoDB と DynamoDB ウェブサービスの違い
<a name="DynamoDBLocal.Differences"></a>

 ダウンロード可能バージョンの DynamoDB は、開発とテストのみを目的としています。これに対して、DynamoDB ウェブサービスは、スケーラビリティ、可用性、耐久性を特徴とする本稼働環境用に最適なマネージドサービスです。

 ダウンロード可能なバージョンの DynamoDB とウェブサービスは、次の点で異なります。
+ AWS リージョンと個別の AWS アカウントは、クライアントレベルでサポートされません。
+  プロビジョンされたスループット設定は、ダウンロード可能な DynamoDB で無視されます。ただし、この設定は `CreateTable` オペレーションで必要です。`CreateTable` の場合、プロビジョニングされた読み込みおよび書き込みスループットに対して任意の数値を指定できます。ただし、この数値は使用されません。`UpdateTable` は 1 日に必要な回数呼び出すことができます。ただし、プロビジョニングされたスループット値に対する変更はいずれも無視されます。
+  `Scan` 操作が連続的に行われます。並列スキャンはサポートされていません。`Segment` と `TotalSegments` パラメータ (`Scan` オペレーション) は無視されます。
+  読み込みおよび書き込みオペレーションの速度は、コンピュータの速度によってのみ制限を受けます。`CreateTable`、 `UpdateTable`、および `DeleteTable` オペレーションはすぐに実行されます。テーブルの状態は常に ACTIVE です。テーブルやグローバルセカンダリインデックスでプロビジョニングされたスループット設定のみを変更する `UpdateTable` オペレーションは、すぐに実行されます。`UpdateTable` オペレーションがグローバルセカンダリインデックスを作成または削除する場合、それらのインデックスは、通常の状態 (CREATING や DELETING など) に移行してから ACTIVE 状態になります。この間、テーブルは ACTIVE のままになります。
+  読み込みオペレーションには結果整合性があります。ただし、コンピュータで実行されている DynamoDB の速度が原因で、ほとんどの読み取りには強力な整合性があるように見えます。
+  項目コレクションのメトリクスや項目コレクションのサイズは追跡されません。オペレーションレスポンスでは、項目コレクションのメトリクスの代わりに、null が返されます。
+  DynamoDB では、結果セットごとに、返されるデータに 1 MB の制限があります。DynamoDB ウェブサービスとダウンロード可能バージョンのいずれにもこの制限が適用されます。ただし、インデックスのクエリを実行しているとき、DynamoDB サービスは、射影されたキーと属性のサイズのみを計算します。一方で、ダウンロード可能バージョンの DynamoDB は、項目全体のサイズを計算します。
+  DynamoDB Streams を使用している場合、シャードが作成される速度が異なる可能性があります。DynamoDB ウェブサービスでは、シャードの作成動作は部分的にテーブルパーティションアクティビティの影響を受けます。ローカルで DynamoDB を実行している場合は、テーブルパーティションがありません。どちらの場合も、シャードはエフェメラルのため、アプリケーションがシャードの動作の影響を受けることはありません。
+  ダウンロード可能な DynamoDB では、`TransactionConflictExceptions` はトランザクション API に対してスローされません。Java モック作成フレームワークを使用して DynamoDB ハンドラで `TransactionConflictExceptions` をシミュレートし、競合するトランザクションに対するアプリケーションの応答をテストすることをお勧めします。
+  DynamoDB ウェブサービスでは、コンソールまたは AWS CLI のどちらからアクセスする場合でも、テーブル名の大文字と小文字は区別されます。`Authors` という名前のテーブルと `authors` という名前のテーブルが、別のテーブルとして両方存在できます。ダウンロード可能バージョンでは、テーブル名で大文字と小文字が区別されず、これら 2 つのテーブルを作成しようとすると、エラーが発生します。
+ ダウンロード可能なバージョンの 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) パラメータは無視されます。