本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 AWS CLI 管理 DynamoDB Auto Scaling
您可以使用 AWS 管理控制台 (AWS Command Line Interface) 管理 AWS CLI Auto Scaling,而不是使用 Amazon DynamoDB。本节中的教程演示如何安装和配置用于管理 AWS CLI Auto Scaling 的 DynamoDB。在本教程中,您将执行以下操作:
-
创建名为 DynamoDB 的
TestTable
表。 初始吞吐量设置为 5 个读取容量单位和 5 个写入容量单位。 -
为 Application Auto Scaling 创建
TestTable
策略。 该策略寻求在占用的写入容量和预置的写入容量之间保持 50% 的目标比率。此指标的范围在 5 到 10 个写入容量单位之间。(不允许 Application Auto Scaling 调整超过此范围的吞吐量。) -
运行 Python 程序以驱动对
TestTable
的写入流量。 当目标比率在持续的时间段内超过 50% 时,Application Auto Scaling 通知 DynamoDB 向上调整TestTable
的吞吐量以保持 50% 的目标利用率。 -
验证 DynamoDB 是否已成功调整
TestTable
的预置写入容量。
主题
开始前的准备工作
在开始本教程之前,请完成以下任务。
安装AWS CLI
如果您尚未安装和配置 AWS CLI,则必须先执行此操作。为此,请按照 AWS Command Line Interface 用户指南 中的以下说明操作:
安装 Python
本教程要求您运行 Python 程序(请参阅步骤 4:驱动到 TestTable 的写入流量)。如果尚未安装,您可以下载 Python
步骤 1:创建 DynamoDB 表
在此步骤中,您将使用 AWS CLI 创建 TestTable
。 主键包含 pk
(分区键)和 sk
(排序键)。这两个属性的类型为 Number
。 初始吞吐量设置为 5 个读取容量单位和 5 个写入容量单位。
-
使用以下 AWS CLI 命令创建表。
aws dynamodb create-table \ --table-name TestTable \ --attribute-definitions \ AttributeName=pk,AttributeType=N \ AttributeName=sk,AttributeType=N \ --key-schema \ AttributeName=pk,KeyType=HASH \ AttributeName=sk,KeyType=RANGE \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
-
要检查表的状态,请使用以下命令。
aws dynamodb describe-table \ --table-name TestTable \ --query "Table.[TableName,TableStatus,ProvisionedThroughput]"
当表的状态为
ACTIVE
时,表即可供使用。
步骤 2:注册可扩展目标
接下来,您将表的写入容量注册为 Application Auto Scaling 的可扩展目标。这将允许 Application Auto Scaling 调整 TestTable 的预置写入容量,但仅在 5–10 个容量单位的范围内。
DynamoDB Auto Scaling 需要是否存在代表您执行 Auto Scaling 操作的服务相关角色 (AWSServiceRoleForApplicationAutoScaling_DynamoDBTable
)。此角色是自动为您创建的。有关更多信息,请参阅 https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html
-
输入以下命令以注册可扩展目标。
aws application-autoscaling register-scalable-target \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits" \ --min-capacity 5 \ --max-capacity 10
-
要验证注册,请使用以下命令。
aws application-autoscaling describe-scalable-targets \ --service-namespace dynamodb \ --resource-id "table/TestTable"
注意 您还可以针对 全局二级索引 注册可扩展目标。例如,对于 全局二级索引 (“test-index”),资源 ID 和可扩展的维度参数会适当更新。
aws application-autoscaling register-scalable-target \ --service-namespace dynamodb \ --resource-id "table/TestTable/index/test-index" \ --scalable-dimension "dynamodb:index:WriteCapacityUnits" \ --min-capacity 5 \ --max-capacity 10
步骤 3:创建扩展策略
在此步骤中,您将为 TestTable
创建扩展策略。 该策略定义 Application Auto Scaling 可以在其下调整表的预置吞吐量的详细信息,以及在执行此操作时要执行的操作。将此策略与您在上一步中定义的可扩展目标(TestTable
表的写入容量单位)关联。
该策略包含以下元素:
-
PredefinedMetricSpecification
— 允许调整的指标。Application Auto Scaling对于 DynamoDB,以下值是PredefinedMetricType
的有效值:-
DynamoDBReadCapacityUtilization
-
DynamoDBWriteCapacityUtilization
-
-
ScaleOutCooldown
—提高预置吞吐量的每个 Application Auto Scaling 事件之间的最短时间(以秒为单位)。此参数使 Application Auto Scaling 可以持续但不主动地增加吞吐量,以响应实际工作负载。的默认设置为 0。ScaleOutCooldown
-
ScaleInCooldown
—减少预置吞吐量的每个 Application Auto Scaling 事件之间的最短时间(以秒为单位)。此参数允许 Application Auto Scaling 逐步且可预测地降低吞吐量。的默认设置为 0。ScaleInCooldown
-
TargetValue
— 可确保消耗的容量与预置容量的比例保持在该值或接近此值。Application Auto Scaling您将TargetValue
定义为百分比。
要进一步了解 TargetValue
的工作方式,假设您有一个预置吞吐量设置为 200 个写入容量单位的表。您决定为此表创建扩展策略,TargetValue
为 70%。
现在假设您开始增加对表的写入流量,以使实际写入吞吐量为 150 个容量单位。消耗/预置比率现在为 (150/200) 或 75%。此比率超过您的目标,因此 Application
Auto Scaling 会将预置的写入容量增加到 215,以便尽可能增加比率 (150/215) 或 79.77% 或 677% —(尽可能接近您的 TargetValue
,但不超过它)。
对于 TestTable
,您将 TargetValue
设置为 50%。Application Auto Scaling 在 5–10 个容量单位范围内调整表的预置吞吐量(请参阅步骤 2:注册可扩展目标),以便消耗/预置比率保持或接近 50%。您将 ScaleOutCooldown
和 ScaleInCooldown
的值设置为 60 秒。
-
使用以下内容创建名为
scaling-policy.json
的文件。{ "PredefinedMetricSpecification": { "PredefinedMetricType": "DynamoDBWriteCapacityUtilization" }, "ScaleOutCooldown": 60, "ScaleInCooldown": 60, "TargetValue": 50.0 }
-
使用以下 AWS CLI 命令创建策略。
aws application-autoscaling put-scaling-policy \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits" \ --policy-name "MyScalingPolicy" \ --policy-type "TargetTrackingScaling" \ --target-tracking-scaling-policy-configuration file://scaling-policy.json
-
请注意,在输出中,Application Auto Scaling 已创建两个 Amazon CloudWatch 警报 — 每个警报对应于扩展目标范围的上边界和下边界。
-
可以使用以下 AWS CLI 命令查看有关扩展策略的更多详细信息。
aws application-autoscaling describe-scaling-policies \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --policy-name "MyScalingPolicy"
-
在输出中,验证策略设置是否与来自 步骤 2:注册可扩展目标 和 步骤 3:创建扩展策略 的规范匹配。
步骤 4:驱动到 TestTable 的写入流量
现在,您可以通过将数据写入 TestTable
来测试您的扩展策略。 为此,您可以运行 Python 程序。
-
使用以下内容创建名为
bulk-load-test-table.py
的文件。import boto3 dynamodb = boto3.resource('dynamodb') table = dynamodb.Table("TestTable") filler = "x" * 100000 i = 0 while (i < 10): j = 0 while (j < 10): print (i, j) table.put_item( Item={ 'pk':i, 'sk':j, 'filler':{"S":filler} } ) j += 1 i += 1
-
输入以下命令以运行该程序。
python bulk-load-test-table.py
的预置写入容量非常低(5 个写入容量单位),因此程序偶尔由于写入限制而停滞。
TestTable
这是预期行为。让程序在您继续执行下一步时继续运行。
步骤 5:查看 Application Auto Scaling 操作
在此步骤中,您将查看代表您启动的 Application Auto Scaling 操作。您还将验证 Application Auto Scaling 是否已更新
TestTable
的预置写入容量。
-
输入以下命令以查看 Application Auto Scaling 操作。
aws application-autoscaling describe-scaling-activities \ --service-namespace dynamodb
在 Python 程序运行时,偶尔重新运行此命令。(调用扩展策略需要几分钟时间。) 您最终应看到以下输出。
... { "ScalableDimension": "dynamodb:table:WriteCapacityUnits", "Description": "Setting write capacity units to 10.", "ResourceId": "table/TestTable", "ActivityId": "0cc6fb03-2a7c-4b51-b67f-217224c6b656", "StartTime": 1489088210.175, "ServiceNamespace": "dynamodb", "EndTime": 1489088246.85, "Cause": "monitor alarm AutoScaling-table/TestTable-AlarmHigh-1bb3c8db-1b97-4353-baf1-4def76f4e1b9 in state ALARM triggered policy MyScalingPolicy", "StatusMessage": "Successfully set write capacity units to 10. Change successfully fulfilled by dynamodb.", "StatusCode": "Successful" }, ...
这表示 Application Auto Scaling 已向
UpdateTable
发出 DynamoDB 请求。 -
输入以下命令以验证 DynamoDB 是否增加了表的写入容量。
aws dynamodb describe-table \ --table-name TestTable \ --query "Table.[TableName,TableStatus,ProvisionedThroughput]"
应已从
WriteCapacityUnits
扩展到5
。10
(可选)步骤 6:清除
在本教程中,您创建了几个 资源。如果您不再需要这些资源,可将其删除。
-
删除
TestTable
的扩展策略。aws application-autoscaling delete-scaling-policy \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits" \ --policy-name "MyScalingPolicy"
-
取消注册可扩展目标。
aws application-autoscaling deregister-scalable-target \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits"
-
删除
TestTable
表。aws dynamodb delete-table --table-name TestTable