

# 全局表的最佳实践
<a name="globaltables-bestpractices"></a>

以下各节介绍用于部署和使用全局表的最佳实践。

## 版本
<a name="globaltables-bestpractices-version"></a>

DynamoDB 全局表有两个版本可用：版本 2019.11.21（当前版）和[版本 2017.11.29（旧版）](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.V1.html)。您应尽可能使用版本 2019.11.21（当前版）。

## 删除保护
<a name="globaltables-bestpractices-deletionprotection"></a>

您应该对要防止意外删除的全局表副本启用删除保护。必须对每个副本启用删除保护。

## 使用 AWS CloudFormation
<a name="globaltables-bestpractices-cloudformation"></a>

CloudFormation 目前不支持跨堆栈协调多区域资源，例如全局表。如果您在单独的区域堆栈中定义全局表的每个副本，则由于在执行副本更新时检测到堆栈间存在偏差，您将遇到错误。为避免出现此问题，您应选择一个区域作为部署全局表的参考区域，并在该区域的堆栈中定义全局表的所有副本。

**重要**  
无法通过更改模板中的类型将 `AWS::DynamoDB::Table` 类型的资源转换为 `AWS::DynamoDB::GlobalTable` 类型的资源。尝试通过更改单区域表的 CloudFormation 资源类型来将该表转换为全局表，可能会导致 DynamoDB 表被删除。

可以使用 `AWS::DynamoDB::GlobalTable` 资源在单个区域中创建表。此表将像任何其它单区域表一样进行部署。如果您稍后更新堆栈以将其它区域添加到资源中，则副本将添加到表中，而该表将安全地转换为全局表。

如果您希望将现有的 `AWS::DynamoDB::Table` 资源转换为 `AWS::DynamoDB::GlobalTable` 资源，建议按照以下步骤转换资源类型：

1. 将 `AWS::DynamoDB::Table` 删除策略设置为保留。

1. 从堆栈定义中移除该表。

1. 在 AWS 管理控制台中将副本添加到单区域表，同时将单区域表转换为全局表。

1. 将新的全局表作为新的 `AWS::DynamoDB::GlobalTable` 资源导入到堆栈中。

## 备份和时间点故障恢复
<a name="globaltables-bestpractices-backups"></a>

为全局表中的一个副本启用自动备份和时间点故障恢复（PITR），可能足以实现灾难恢复目标。使用 AWS-Backup 创建的副本备份可以自动跨区域复制，以提高韧性。在选择备份和 PITR 支持策略时，请考虑多区域高可用性背景下的灾难恢复计划目标。

## 专为实现多区域高可用性而设计
<a name="globaltables-bestpractices-multiregion"></a>

有关部署全局表的规范性指导，请参阅 [DynamoDB 全局表设计的最佳实践](bp-global-table-design.md)。