

# グローバルテーブルを管理するためのベストプラクティスと要件
<a name="globaltables_reqs_bestpractices"></a>

**重要**  
 このドキュメントはグローバルテーブルのバージョン 2017.11.29 (レガシー) を対象としています。新しいグローバルテーブルでは使用しないでください。可能な限り、[グローバルテーブルバージョン 2019.11.21 (現行)](GlobalTables.md) を使用してください。2017.11.29 (レガシー) よりも柔軟性と効率が高く、消費する書き込みキャパシティが少ないためです。  
ご使用のバージョンを確認するには、「[グローバルテーブルのバージョンを確認する](V2globaltables_versions.md#globaltables.DetermineVersion)」を参照してください。既存のグローバルテーブルを 2017.11.29 (レガシー) からバージョン 2019.11.21 (現行) に更新する方法については、「[DynamoDB グローバルテーブルのバージョン](V2globaltables_versions.md)」を参照してください。

Amazon DynamoDB グローバルテーブルを使用すると、テーブルデータを AWS リージョン間でレプリケートできます。データが適切にレプリケートされるように、グローバルテーブル内のレプリカテーブルとセカンダリインデックスにも、書き込みキャパシティーが同じように設定されていることが重要です。

**Topics**
+ [グローバルテーブルのバージョン](#globaltables_version.tables)
+ [新しいレプリカテーブルを追加するための要件](#globaltables_reqs_bestpractices.requirements)
+ [キャパシティを管理するためのベストプラクティスと要件](#globaltables_reqs_bestpractices.tables)

## グローバルテーブルのバージョン
<a name="globaltables_version.tables"></a>

DynamoDB グローバルテーブルには、[グローバルテーブルバージョン 2019.11.21 (現行)](GlobalTables.md) と [グローバルテーブルバージョン 2017.11.29 (レガシー)](globaltables.V1.md) の 2 つのバージョンがあります。可能な限り、グローバルテーブルバージョン 2019.11.21 (現行) を使用してください。2017.11.29 (レガシー) よりも柔軟性と効率が高く、消費する書き込みキャパシティが少ないためです。

ご使用のバージョンを確認するには、「[グローバルテーブルのバージョンを確認する](V2globaltables_versions.md#globaltables.DetermineVersion)」を参照してください。既存のグローバルテーブルを 2017.11.29 (レガシー) からバージョン 2019.11.21 (現行) に更新する方法については、「[グローバルテーブルのアップグレード](V2globaltables_versions.md#upgrading-to-current-version)」を参照してください。

## 新しいレプリカテーブルを追加するための要件
<a name="globaltables_reqs_bestpractices.requirements"></a>

新しいレプリカテーブルをグローバルテーブルに追加するには、以下のすべての条件が満たされている必要があります。
+ その他すべてのレプリカと同じパーティションキーがテーブルに含まれている。
+ テーブルは、同じ指定した書き込みキャパシティー管理設定である必要があります。
+ テーブルの名前が、その他すべてのレプリカと同じ名前である。
+ 項目の新しいイメージと古いイメージの両方を含むストリーミングで、テーブルの DynamoDB Streams が有効になっている。
+ このグローバルテーブルの新規または既存のレプリカテーブルにはデータを含むことはできません。

グローバルセカンダリインデックスが指定されている場合は、次の条件も満たす必要があります。
+ グローバルセカンダリインデックスにも同じ名前が設定されている。
+ グローバルセカンダリインデックスのパーティションキーとソートキー (存在する場合) にも同じ名前が設定されている。

**重要**  
 書き込みキャパシティーの設定は、すべてのグローバルテーブルのレプリカテーブルおよび一致するセカンダリインデックスに対して一貫性があるように設定する必要があります。グローバルテーブルの書き込み容量を更新するには、DynamoDB コンソールまたは `UpdateGlobalTableSettings` API `UpdateGlobalTableSettings`オペレーションを使用することを強くお勧めします。[585] は、自動的にグローバルテーブル内のすべてのレプリカテーブルおよび一致するセカンダリインデックスに書き込み容量の設定の変更を適用します。`UpdateTable`、`RegisterScalableTarget`、あるいは `PutScalingPolicy` オペレーションを使用する場合には、各レプリカテーブルおよび一致するセカンダリインデックスに個別に変更を適用する必要があります。詳細については、「[Amazon DynamoDB API リファレンス](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/)」の「[UpdateGlobalTableSettings](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateGlobalTableSettings.html)」を参照してください。  
プロビジョニングされた書き込みキャパシティー設定を管理するために、Auto Scaling を有効にすることが強く推奨されます。書き込みキャパシティー設定を手動で管理する場合は、すべてのレプリカテーブルと同等のレプリケートされた書き込みキャパシティーユニットをプロビジョニングする必要があります。また、グローバルテーブル全体で一致するセカンダリインデックスには、レプリケートされた同等の書き込みキャパシティーユニットをプロビジョニングします。  
また、適切な AWS Identity and Access Management (IAM) 権限も必要です。詳細については、「[グローバルテーブルで IAM を使用します](gt_IAM.md)」を参照してください。

## キャパシティを管理するためのベストプラクティスと要件
<a name="globaltables_reqs_bestpractices.tables"></a>

DynamoDB でレプリカテーブルの容量設定を管理するときは、以下の点を考慮に入れてください。

### DynamoDB Auto Scaling の使用
<a name="globaltables_reqs_bestpractices.tables.autoscaling"></a>

プロビジョンされたモードを使用するレプリカテーブルのスループット容量設定を管理するには、DynamoDB Auto Scaling の使用をお勧めします。DynamoDB Auto Scaling は各レプリカテーブルの読み込み容量単位 (RCU) および書き込み容量単位 (WCU) を、実際のアプリケーションワークロードに基づいて、自動的に調整します。詳細については、「[DynamoDB Auto Scaling によるスループットキャパシティの自動管理](AutoScaling.md)」を参照してください。

AWS マネジメントコンソール を使用してレプリカテーブルを作成すると、Auto Scaling が各レプリカテーブルに対してデフォルトで有効になります。この際、読み込みキャパシティーユニットおよび書き込みキャパシティーユニットを管理するデフォルトの Auto Scaling 設定が使用されます。

DynamoDB コンソールを介して、あるいは `UpdateGlobalTableSettings` コールを使用して、レプリカテーブルあるいはセカンダリインデックスの Auto Scaling 設定に行う変更は、グローバルテーブルのすべてのレプリカテーブルおよび一致するセカンダリインデックスに対して自動的に適用されます。これらの変更により、すべての既存の Auto Scaling 設定が上書きされます。これによって、プロビジョニングされた書き込みキャパシティーは、グローバルテーブルのすべてのレプリカテーブルおよび一致するセカンダリインデックスを通して一貫性があるようになります。`UpdateTable`、`RegisterScalableTarget`、あるいは `PutScalingPolicy` 呼び出しを使用する場合には、各レプリカテーブルおよび一致するセカンダリインデックスに個別に変更を適用する必要があります。

**注記**  
 Auto Scaling がアプリケーションの容量の変更を満たさない場合 (予測不可能なワークロード) や、その設定を行わない場合 (最小、最大、または使用率しきい値のターゲット設定)、オンデマンドモードを使用してグローバルテーブルの容量を管理できます。詳細については、「[オンデマンドモード](capacity-mode.md#capacity-mode-on-demand)」を参照してください。  
グローバルテーブルでオンデマンドモードを有効にした場合、レプリケートされた書き込みリクエストユニット (rWCU) の消費は、rWCU のプロビジョニング方法と整合します。たとえば、2 つの追加リージョンにレプリケートされるローカルテーブルに対して書き込みを 10 回実行した場合、書き込みリクエストユニットが 60 個消費されます (10 \+ 10 \+ 10 = 30、30 x 2 = 60)。消費される 60 個の書き込みリクエストユニットには、`aws:rep:deleting`、`aws:rep:updatetime`、および `aws:rep:updateregion` 属性を更新するためにグローバルテーブルバージョン 2017.11.29 (レガシー) で消費される追加の書き込みが含まれます。

### 手動によるキャパシティ管理
<a name="globaltables_reqs_bestpractices.tables.manual-capacity-management"></a>

DynamoDB Auto Scaling を使用しない場合は、各レプリカテーブルおよびセカンダリインデックスの読み込み容量および書き込み容量を手動で設定する必要があります。

すべてのレプリカテーブルでレプリケートされたプロビジョンド書き込みキャパシティーユニット (rWCU) は、全リージョンにおけるアプリケーションの書き込みに必要な rWCU 合計数の 2 倍に設定する必要があります。これにより、ローカルリージョンで発生するアプリケーションの書き込みと、他のリージョンからのレプリケートされたアプリケーションの書き込みに対応できます。たとえば、オハイオ州のレプリカテーブルに 1 秒間に 5 回の書き込みを、バージニア北部のレプリカテーブルに 1 秒間に 5 回の書き込みを行うとします。この場合、各レプリカテーブルに 20 個の rWCU をプロビジョニングする必要があります (5 \+ 5 = 10、10×2 = 20)。

 グローバルテーブルの書き込み容量を更新するには、DynamoDB コンソールまたは `UpdateGlobalTableSettings` API `UpdateGlobalTableSettings`オペレーションを使用することを強くお勧めします。[585] は、自動的にグローバルテーブル内のすべてのレプリカテーブルおよび一致するセカンダリインデックスに書き込み容量の設定の変更を適用します。`UpdateTable`、`RegisterScalableTarget`、あるいは `PutScalingPolicy` オペレーションを使用する場合には、各レプリカテーブルおよび一致するセカンダリインデックスに個別に変更を適用する必要があります。詳細については、[Amazon DynamoDB API リファレンス](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/)を参照してください。

**注記**  
 DynamoDB のグローバルテーブルの設定 (`UpdateGlobalTableSettings`) を更新するには、`dynamodb:UpdateGlobalTable`、`dynamodb:DescribeLimits`、`application-autoscaling:DeleteScalingPolicy` および `application-autoscaling:DeregisterScalableTarget` の許可が必要です。詳細については、「[グローバルテーブルで IAM を使用します](gt_IAM.md)」を参照してください。