本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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::ScalableTarget
或AWS::ApplicationAutoScaling::ScalingPolicy
在任何表副本或全局二级索引上配置其他自动伸缩策略。这样做可能会导致意外行为并且不受支持。 -
在中 AWS CloudFormation,无论副本数量多少,每个全局表都由位于单个区域的单个堆栈控制。部署模板时, CloudFormation 将在单个堆栈操作中创建/更新所有副本。您不应在多个区域中部署相同的
AWS::DynamoDB::GlobalTable
资源。这样做将导致错误,并且不受支持。如果在多个区域部署应用程序模板,则可以使用条件仅在单个区域中创建资源。或者,您可以选择在独立于应用程序堆栈的堆栈中定义AWS::DynamoDB::GlobalTable
资源,并确保仅将其部署到单个区域。
语法
要在 AWS CloudFormation 模板中声明此实体,请使用以下语法:
JSON
{ "Type" : "AWS::DynamoDB::GlobalTable", "Properties" : { "AttributeDefinitions" :
[ AttributeDefinition, ... ]
, "BillingMode" :String
, "GlobalSecondaryIndexes" :[ GlobalSecondaryIndex, ... ]
, "KeySchema" :[ KeySchema, ... ]
, "LocalSecondaryIndexes" :[ LocalSecondaryIndex, ... ]
, "Replicas" :[ ReplicaSpecification, ... ]
, "SSESpecification" :SSESpecification
, "StreamSpecification" :StreamSpecification
, "TableName" :String
, "TimeToLiveSpecification" :TimeToLiveSpecification
, "WriteOnDemandThroughputSettings" :WriteOnDemandThroughputSettings
, "WriteProvisionedThroughputSettings" :WriteProvisionedThroughputSettings
} }
YAML
Type: AWS::DynamoDB::GlobalTable Properties: AttributeDefinitions:
- AttributeDefinition
BillingMode:String
GlobalSecondaryIndexes:- GlobalSecondaryIndex
KeySchema:- KeySchema
LocalSecondaryIndexes:- LocalSecondaryIndex
Replicas:- ReplicaSpecification
SSESpecification:SSESpecification
StreamSpecification:StreamSpecification
TableName:String
TimeToLiveSpecification:TimeToLiveSpecification
WriteOnDemandThroughputSettings:WriteOnDemandThroughputSettings
WriteProvisionedThroughputSettings:WriteProvisionedThroughputSettings
属性
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
属性为每个副本提供一个密钥。必需:否
更新要求:没有中断
StreamSpecification
-
指定全局表上的流设置。如果您的全局表包含多个副本,则必须为此属性提供一个值。如果全局表只有一个副本,则只能更改流设置。
必需:否
更新要求:没有中断
TableName
-
全局表的名称。如果不指定名称,则 AWS CloudFormation 将生成一个唯一的 ID 并将该 ID 用作表名称。有关更多信息,请参阅名称类型。
重要
如果指定一个名称,您将无法执行需要替换该资源的更新。您可以执行不需要或者只需要部分中断的更新。如果必须替换资源,请指定新名称。
必需:否
类型:字符串
模式:
[a-zA-Z0-9_.-]+
最小值:
3
最大值:
255
更新要求:替换
TimeToLiveSpecification
-
为表指定生存时间(TTL)设置。此设置将应用于所有副本。
必需:否
更新要求:没有中断
WriteOnDemandThroughputSettings
-
设置全局表或全局二级索引的写入请求设置。如果将设置为,则必须指定此设置
PAY_PER_REQUEST
。BillingMode
必需:否
更新要求:没有中断
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.000
。StreamArn
返回的是堆栈部署到的区域中副本的值。注意
您必须指定
StreamSpecification
属性才能使用此特性。 TableId
-
表的唯一标识符,例如
a123b456-01ab-23cd-123a-111222aaabbb
。TableId
返回的是堆栈部署到的区域中副本的值。