以编程方式管理 Amazon Keyspaces 扩展策略 - Amazon Keyspaces(针对 Apache Cassandra)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

以编程方式管理 Amazon Keyspaces 扩展策略

要以编程方式更新和管理 Amazon Keyspaces 自动扩展设置,您可以使用 AWS 命令行界面 (AWS CLI) 或 AWS API。无法使用 Cassandra 查询语言 (CQL) 管理 Amazon Keyspaces 扩展策略。本主题概述了您可以使用 AWS CLI 以编程方式管理的自动扩展任务。有关本主题中描述的 Application Auto Scaling AWS CLI 命令的更多信息,请参阅 AWS CLI 命令参考 中的 application-autoscaling。有关使用 AWS API 的更多信息,请参阅应用程序 Auto Scaling API 参考

开始前的准备工作

在开始之前,您需要完成以下任务。

配置 权限

如果未完成这些任务,您必须为用户配置相应的权限,以创建和管理自动扩展设置。在 AWS Identity and Access Management (IAM) 中,需要使用 AWS 托管策略 AmazonKeyspacesFullAccess 来管理 Amazon Keyspaces 扩展策略。有关详细步骤,请参阅开始之前:向用户授予对 Amazon Keyspaces 自动扩展的权限.

安装 AWS CLI

如果您尚未安装和配置 AWS CLI,则必须先执行此操作。为此,请转到 AWS 命令行界面用户指南并按照以下说明操作:

在现有表上启用自动扩展:注册可扩展目标

对于现有 Amazon Keyspaces 表,您可以将表的写入或读取容量注册为应用程序 Auto Scaling 的可扩展目标。这将允许应用程序 Auto Scaling 调整您指定的表的预置的写入或读取容量。在以下示例中,我们将 mytable 注册为具有写入容量的可扩展目标,容量单位范围为 5 到 10 个。

注意

Amazon Keyspaces 自动扩展需要是否存在代表您执行自动扩展操作的服务相关角色 (AWSServiceRoleForApplicationAutoScaling_CassandraTable)。此角色是自动为您创建的。有关更多信息,请参阅 Using Service-Linked Roles for Amazon Keyspaces.

输入以下命令,将表注册为可扩展目标。

aws application-autoscaling register-scalable-target \ --service-namespace cassandra \ --resource-id "keyspace/mykeyspace/table/mytable" \ --scalable-dimension "cassandra:table:WriteCapacityUnits" \ --min-capacity 5 \ --max-capacity 10

查看向应用程序 Auto Scaling 注册的可扩展目标

要查看注册详细信息,请使用以下命令。

aws application-autoscaling describe-scalable-targets --service-namespace cassandra --resource-ids "keyspace/mykeyspace/table/mytable"

该命令的输出如下所示。

{ "ScalableTargets": [ { "ServiceNamespace": "cassandra", "ResourceId": "keyspace/mykeyspace/table/mytable", "ScalableDimension": "cassandra:table:WriteCapacityUnits", "MinCapacity": 5, "MaxCapacity": 10, "RoleARN": "arn:aws:iam::012345678910:role/aws-service-role/cassandra.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_CassandraTable", "CreationTime": 1587495787.412, "SuspendedState": { "DynamicScalingInSuspended": false, "DynamicScalingOutSuspended": false, "ScheduledScalingSuspended": false } } ] }

查看向应用程序 Auto Scaling 注册的可扩展目标

要查看注册详细信息,请使用以下命令。

aws application-autoscaling describe-scalable-targets \ --service-namespace cassandra \ --resource-id "keyspace\mytable"

创建扩展策略

要通过编程方式管理自动扩展设置,请为表创建扩展策略。该策略定义指示应用程序 Auto Scaling 调整表的预置吞吐量的条件,以及它在执行此操作时要执行的操作。在此示例中,您将此策略与您之前定义的可扩展目标(mytable 表的写入容量单位)关联。

该策略包含以下元素:

  • PredefinedMetricSpecification – 允许应用程序 Auto Scaling 调整的指标。对于 Amazon Keyspaces,以下值是 PredefinedMetricType 的有效值:

    • CassandraReadCapacityUtilization

    • CassandraWriteCapacityUtilization

  • ScaleOutCooldown – 扩展活动会增加表的预置吞吐量。要为向外扩展活动添加冷却时间,请为 ScaleOutCooldown 指定一个值(以秒为单位)。 默认值是 0。有关更多信息,请参阅应用程序 Auto Scaling Auto Scaling 中的目标跟踪扩展策略。

  • ScaleInCooldown – 缩减活动会减少表的预置吞吐量。要为缩减活动添加冷却时间,请为 ScaleInCooldown 指定一个值(以秒为单位)。 默认值是 0。有关更多信息,请参阅应用程序 Auto Scaling Auto Scaling 中的目标跟踪扩展策略。

  • TargetValue – 应用程序 Auto Scaling 确保消耗的容量与预置容量的比例保持在该值或接近该值。您将 TargetValue 定义为百分比。

注意

要进一步了解 TargetValue 的工作方式,假设您有一个预置吞吐量设置为 200 个写入容量单位的表。您决定为此表创建扩展策略,TargetValue 为 70%。

现在,假设您开始增加对表的写入流量,以使实际写入吞吐量为 150 个容量单位。消耗/预置比率现在为 (150/200) 或 75%。此比率超过您的目标,因此应用程序 Auto Scaling 会将预置的写入容量增加到 215,以便该比率尽可能接近您的 TargetValue,但不会超过它。

对于 mytable,请将 TargetValue 设置为 50%。应用程序 Auto Scaling 在 5 到 10 个容量单位范围内调整表的预置吞吐量(请参阅在现有表上启用自动扩展:注册可扩展目标),以便消耗/预置比率保持在或接近 50%。您将 ScaleOutCooldownScaleInCooldown 的值设置为 60 秒。

  1. 创建一个文件,在其中包含要应用于表的策略,如以下示例所示。然后,在本示例中,使用名称 保存文件。scaling-policy.json.

    { "PredefinedMetricSpecification": { "PredefinedMetricType": "CassandraWriteCapacityUtilization" }, "ScaleOutCooldown": 60, "ScaleInCooldown": 60, "TargetValue": 50.0 }
  2. 使用以下 AWS CLI 命令创建策略。

    aws application-autoscaling put-scaling-policy \ --service-namespace cassandra \ --resource-id "keyspace/mykeyspace/table/mytable" \ --scalable-dimension "cassandra:table:WriteCapacityUnits" \ --policy-name "MyScalingPolicy" \ --policy-type "TargetTrackingScaling" \ --target-tracking-scaling-policy-configuration file://scaling-policy.json

在此命令的输出中,您可以看到 Application CloudWatchAuto Scaling Auto Scaling 警报 - 每个警报用于消耗的上限容量和下限容量,每个警报用于扩展目标范围的上边界和下边界。

{ "PolicyARN": "arn:aws:autoscaling:us-west-2:012345678910:scalingPolicy:8d606c33-2078-4f37-8305-36e89c56a779:resource/cassandra/keyspace/mykeyspace/table/mytable:policyName/MyScalingPolicy", "Alarms": [ { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-AlarmHigh-d421fec6-fa82-44b4-aab6-6a9bfb6f0ced", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-AlarmHigh-d421fec6-fa82-44b4-aab6-6a9bfb6f0ced" }, { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-AlarmLow-04479372-e50b-4652-a06d-b3055744ae23", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-AlarmLow-04479372-e50b-4652-a06d-b3055744ae23" }, { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityHigh-c6a26783-837e-4f70-919e-1fbe4362b6ab", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityHigh-c6a26783-837e-4f70-919e-1fbe4362b6ab" }, { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityLow-e1ce121a-48ea-4148-ace2-25c5f854c215", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityLow-e1ce121a-48ea-4148-ace2-25c5f854c215" } ] }

查看扩展策略

您可以使用以下 AWS CLI 命令查看现有扩展策略的详细信息:

aws application-autoscaling describe-scaling-policies \ --service-namespace cassandra \ --resource-ids "keyspace/mykeyspace/table/mytable" \ --policy-name "MyScalingPolicy"

在此命令的输出中,您可以查看扩展策略的详细信息以及应用程序 CloudWatchAuto Scaling Auto Scaling 警报 - 每个警报分别针对消耗的上限容量和下限容量,每个警报针对扩展目标范围的上边界和下限。

{ "ScalingPolicies": [ { "PolicyARN": "arn:aws:autoscaling:us-west-2:012345678910:scalingPolicy:8d606c33-2078-4f37-8305-36e89c56a779:resource/cassandra/keyspace/mykeyspace/table/mytable:policyName/MyScalingPolicy", "PolicyName": "MyScalingPolicy", "ServiceNamespace": "cassandra", "ResourceId": "keyspace/mykeyspace/table/mytable", "ScalableDimension": "cassandra:table:WriteCapacityUnits", "PolicyType": "TargetTrackingScaling", "TargetTrackingScalingPolicyConfiguration": { "TargetValue": 50.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "CassandraWriteCapacityUtilization" }, "ScaleOutCooldown": 60, "ScaleInCooldown": 60 }, "Alarms": [ { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-AlarmHigh-d421fec6-fa82-44b4-aab6-6a9bfb6f0ced", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-AlarmHigh-d421fec6-fa82-44b4-aab6-6a9bfb6f0ced" }, { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-AlarmLow-04479372-e50b-4652-a06d-b3055744ae23", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-AlarmLow-04479372-e50b-4652-a06d-b3055744ae23" }, { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityHigh-c6a26783-837e-4f70-919e-1fbe4362b6ab", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityHigh-c6a26783-837e-4f70-919e-1fbe4362b6ab" }, { "AlarmName": "TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityLow-e1ce121a-48ea-4148-ace2-25c5f854c215", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-keyspace/mykeyspace/table/mytable-MCSProvisionedCapacityLow-e1ce121a-48ea-4148-ace2-25c5f854c215" } ], "CreationTime": 1587497009.591 } ] }

查看应用程序 Auto Scaling 操作

您可以使用以下 AWS CLI 命令,查看代表您启动的应用程序 Auto Scaling 操作。

aws application-autoscaling describe-scaling-activities \ --service-namespace cassandra

如果您对某个表运行此命令,而该表上的自动扩展功能正在更改写入容量,您会看到类似下面这样的输出:

... { "ScalableDimension": "cassandra:table:WriteCapacityUnits", "Description": "Setting write capacity units to 10.", "ResourceId": "keyspace/mykeyspace/table/mytable", "ActivityId": "0cc6fb03-2a7c-4b51-b67f-217224c6b656", "StartTime": 1489088210.175, "ServiceNamespace": "cassandra", "EndTime": 1489088246.85, "Cause": "monitor alarm AutoScaling-keyspace/mykeyspace/table/mytable-AlarmHigh-1bb3c8db-1b97-4353-baf1-4def76f4e1b9 in state ALARM triggered policy MyScalingPolicy", "StatusMessage": "Successfully set write capacity units to 10. Change successfully fulfilled by cassandra.", "StatusCode": "Successful" }, ...

此示例输出指示 Application Auto Scaling 已向 Amazon Keyspaces 发出 Alter Table 请求以更改写入容量。

删除扩展策略

删除 mytable. 的扩展策略。如果您不再需要扩展表的写入容量,则应考虑删除扩展策略,以便 Amazon Keyspaces 不会继续修改表的写入容量设置。您可以通过注销可扩展目标来删除扩展基础设施,也可以仅删除您的扩展策略并保持可扩展目标的注册状态,以便日后使用。

使用以下命令可删除指定的目标跟踪扩展策略。它还会删除 Application CloudWatchAuto Scaling Auto Scaling 警报。

aws application-autoscaling delete-scaling-policy \ --service-namespace cassandra \ --resource-id "keyspace/mykeyspace/table/mytable" \ --scalable-dimension "cassandra:table:WriteCapacityUnits" \ --policy-name "MyScalingPolicy"

禁用现有表上的自动扩展:注销可扩展目标

使用以下 AWS CLI 命令取消注册可扩展目标。这还将删除附加到此目标的扩展策略。

aws application-autoscaling deregister-scalable-target \ --service-namespace cassandra \ --resource-id "keyspace/mykeyspace/table/mytable" \ --scalable-dimension "cassandra:table:WriteCapacityUnits"