AWS::DynamoDB::GlobalTable - AWS CloudFormation

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS::DynamoDB::GlobalTable

AWS::DynamoDB::GlobalTable 资源使您能够创建和管理版本 2019.11.21 全局表。此资源不能用于创建或管理版本 2017.11.29 全局表。有关表的更多信息,请参阅全局表

重要

无法通过更改模板中的类型将 AWS::DynamoDB::Table 类型的资源转换为 AWS::DynamoDB::GlobalTable 类型的资源。这样做可能会删除 DynamoDB 表。

您可以改为使用该 GlobalTable 资源在单个区域中创建新表。这将与单个区域表一样计费。如果稍后更新堆栈以添加其他区域,则将应用全局表定价。

在使用 DynamoDB 全局表时,您应注意以下行为:

  • 执行堆栈操作的 IAM 主体必须在您计划具有全局表副本的所有区域具有下面列出的权限。IAM 主体的权限不应有基于 IP 源地址的限制。某些全局表操作(例如,添加副本)是异步的,需要 IAM 主体在完成之前有效。在完成堆栈更新之前 CloudFormation ,您不应删除委托人(用户或 IAM 角色)。

    • dynamodb:CreateTable

    • dynamodb:UpdateTable

    • dynamodb:DeleteTable

    • dynamodb:DescribeContinuousBackups

    • dynamodb:DescribeContributorInsights

    • dynamodb:DescribeTable

    • dynamodb:DescribeTableReplicaAutoScaling

    • dynamodb:DescribeTimeToLive

    • dynamodb:ListTables

    • dynamodb:UpdateTimeToLive

    • dynamodb:UpdateContributorInsights

    • dynamodb:UpdateContinuousBackups

    • dynamodb:ListTagsOfResource

    • dynamodb:TagResource

    • dynamodb:UntagResource

    • dynamodb:BatchWriteItem

    • dynamodb:CreateTableReplica

    • dynamodb:DeleteItem

    • dynamodb:DeleteTableReplica

    • dynamodb:DisableKinesisStreamingDestination

    • dynamodb:EnableKinesisStreamingDestination

    • dynamodb:GetItem

    • dynamodb:PutItem

    • dynamodb:Query

    • dynamodb:Scan

    • dynamodb:UpdateItem

    • dynamodb:DescribeTableReplicaAutoScaling

    • dynamodb:UpdateTableReplicaAutoScaling

    • iam:CreateServiceLinkedRole

    • kms:CreateGrant

    • kms:DescribeKey

    • application-autoscaling:DeleteScalingPolicy

    • application-autoscaling:DeleteScheduledAction

    • application-autoscaling:DeregisterScalableTarget

    • application-autoscaling:DescribeScalingPolicies

    • application-autoscaling:DescribeScalableTargets

    • application-autoscaling:PutScalingPolicy

    • application-autoscaling:PutScheduledAction

    • application-autoscaling:RegisterScalableTarget

  • 使用预配置计费模式时, CloudFormation 将在每个副本上创建 auto Scaling 策略以控制其写入容量。您必须使用WriteProvisionedThroughputSettings属性配置此策略。 CloudFormation将确保所有副本都具有相同的写入容量 auto scaling 属性。您不能直接指定全局表的写入容量值。

  • 如果您的表使用预置容量,则必须直接在 AWS::DynamoDB::GlobalTable 资源中配置自动伸缩。不应通过 API 或者通过 AWS::ApplicationAutoScaling::ScalableTargetAWS::ApplicationAutoScaling::ScalingPolicy 在任何表副本或全局二级索引上配置其他自动伸缩策略。这样做可能会导致意外行为并且不受支持。

  • 在中 AWS CloudFormation,无论副本数量多少,每个全局表都由位于单个区域的单个堆栈控制。部署模板时, CloudFormation 将在单个堆栈操作中创建/更新所有副本。您不应在多个区域中部署相同的 AWS::DynamoDB::GlobalTable 资源。这样做将导致错误,并且不受支持。如果在多个区域部署应用程序模板,则可以使用条件仅在单个区域中创建资源。或者,您可以选择在独立于应用程序堆栈的堆栈中定义 AWS::DynamoDB::GlobalTable 资源,并确保仅将其部署到单个区域。

语法

要在 AWS CloudFormation 模板中声明此实体,请使用以下语法:

属性

AttributeDefinitions

用于描述全局表和索引的键架构的属性的列表。

必需:是

类型:数组 AttributeDefinition

最小值1

更新要求没有中断

BillingMode

指定如何对读取和写入吞吐量收费以及如何管理容量。有效值为:

  • PAY_PER_REQUEST

  • PROVISIONED

全局表中的所有副本都将具有相同的计费模式。如果使用 PROVISIONED 计费模式,则必须通过 WriteProvisionedThroughputSettings 属性提供自动伸缩配置。此属性的默认值为 PROVISIONED

必需:否

类型:字符串

允许的值PROVISIONED | PAY_PER_REQUEST

更新要求没有中断

GlobalSecondaryIndexes

要对全局表创建的全局二级索引。可以创建最多 20 个全局二级索引。全局表中的每个副本都将具有相同的全局二级索引设置。您只能在单个堆栈操作中创建或删除一个全局二级索引。

由于索引的回填可能需要很长时间, CloudFormation 因此不要等待索引变为活动状态。如果堆栈操作回滚,则 CloudFormation 可能无法删除已添加的索引。在这种情况下,您将需要手动删除索引。

必需:否

类型GlobalSecondary索引数组

更新要求没有中断

KeySchema

指定组成表主键的属性。KeySchema 属性中的属性还必须在 AttributeDefinitions 属性中定义。

必需:是

类型数组 KeySchema

最小值1

最大值2

更新要求替换

LocalSecondaryIndexes

要对表创建的本地二级索引。可以创建最多五个本地二级索引。每个索引的范围都限定到给定哈希键值。每个哈希键的大小最大可以为 10 GB。全局表中的每个副本都将具有相同的本地二级索引设置。

必需:否

类型LocalSecondary索引数组

更新要求替换

Replicas

指定全局表的副本列表。该列表必须至少包含一个元素,即部署定义全局表的堆栈的区域。例如,如果您在部署到 us-east-1 的堆栈中定义表,则必须在区域为 us-east-1 的 Replicas 中有一个条目。您无法删除堆栈区域中的副本。

重要

对于空表,添加副本可能需要几分钟;对于大型表,可能需要几小时。如果要添加或删除副本,我们建议提交仅包含该更改的 UpdateStack 操作。

如果您在更新期间添加或删除副本,我们建议您不要更新任何其他资源。如果在添加新副本期间堆栈更新失败并回滚,则可能需要手动删除此副本。

您可以根据需要创建具有尽可能多副本的新全局表。您可以在创建表后添加或删除副本,但每次更新只能添加或删除一个副本。

必需:是

类型:数组 ReplicaSpecification

最小值1

更新要求没有中断

SSESpecification

指定用于启用服务器端加密的设置。这些设置将应用于所有副本。如果计划使用客户托管的 KMS 密钥,则必须使用 ReplicaSpecification.ReplicaSSESpecification 属性为每个副本提供一个密钥。

必需:否

类型SSESpecification

更新要求没有中断

StreamSpecification

指定全局表上的流设置。如果您的全局表包含多个副本,则必须为此属性提供一个值。如果全局表只有一个副本,则只能更改流设置。

必需:否

类型:StreamSpecification

更新要求没有中断

TableName

全局表的名称。如果不指定名称,则 AWS CloudFormation 将生成一个唯一的 ID 并将该 ID 用作表名称。有关更多信息,请参阅名称类型

重要

如果指定一个名称,您将无法执行需要替换该资源的更新。您可以执行不需要或者只需要部分中断的更新。如果必须替换资源,请指定新名称。

必需:否

类型:字符串

模式[a-zA-Z0-9_.-]+

最小值3

最大值255

更新要求替换

TimeToLiveSpecification

为表指定生存时间(TTL)设置。此设置将应用于所有副本。

必需:否

类型:TimeToLiveSpecification

更新要求没有中断

WriteOnDemandThroughputSettings

设置全局表或全局二级索引的写入请求设置。如果将设置为,则必须指定此设置PAY_PER_REQUESTBillingMode

必需:否

类型WriteOnDemandThroughput设置

更新要求没有中断

WriteProvisionedThroughputSettings

为写入容量指定自动伸缩策略。此策略将应用于所有副本。如果 BillingMode 被设置为 PROVISIONED,则必须指定此设置。

必需:否

类型:WriteProvisionedThroughputSettings

更新要求没有中断

返回值

Ref

在将此资源的逻辑 ID 传递给内部 Ref 函数时,Ref 会返回表名称。

有关使用 Ref 函数的更多信息,请参阅 Ref

Fn:: GetAtt

Fn::GetAtt 内部函数返回此类型的一个指定属性的值。以下为可用属性和示例返回值。

有关使用 Fn::GetAtt 内部函数的更多信息,请参阅 Fn::GetAtt

Arn

DynamoDB 表的 Amazon 资源名称(ARN),例如 arn:aws:dynamodb:us-east-2:123456789012:table/myDynamoDBTable。返回的 ARN 是堆栈部署到的区域中副本的 ARN。

StreamArn

DynamoDB 流的 ARN,例如 arn:aws:dynamodb:us-east-1:123456789012:table/testddbstack-myDynamoDBTable-012A1SL7SMP5Q/stream/2015-11-30T20:10:00.000StreamArn返回的是堆栈部署到的区域中副本的值。

注意

您必须指定 StreamSpecification 属性才能使用此特性。

TableId

表的唯一标识符,例如 a123b456-01ab-23cd-123a-111222aaabbbTableId返回的是堆栈部署到的区域中副本的值。