

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

# 对分区使用弹性伸缩
<a name="AutoScaling-Using-Shards"></a>

利用 ElastiCache 的自动扩缩，您可以在 Valkey 或 Redis OSS 引擎中使用跟踪策略和计划策略。

下面提供了有关目标跟踪和计划策略以及如何使用 AWS 管理控制台 AWS CLI 和 API 应用它们的详细信息。

**Topics**
+ [目标跟踪扩缩策略](AutoScaling-Scaling-Policies-Target.md)
+ [添加扩展策略](AutoScaling-Scaling-Adding-Policy-Shards.md)
+ [注册可扩展目标](AutoScaling-Scaling-Registering-Policy-CLI.md)
+ [定义扩缩策略](AutoScaling-Scaling-Defining-Policy-API.md)
+ [禁用横向缩减活动](AutoScaling-Scaling-Disabling-Scale-in.md)
+ [应用扩缩策略](AutoScaling-Scaling-Applying-a-Scaling-Policy.md)
+ [编辑扩展策略](AutoScaling-Scaling-Editing-a-Scaling-Policy.md)
+ [删除扩展策略](AutoScaling-Scaling-Deleting-a-Scaling-Policy.md)
+ [将 CloudFormation 用于 Auto Scaling 策略](AutoScaling-with-Cloudformation-Shards.md)
+ [计划扩展](AutoScaling-with-Scheduled-Scaling-Shards.md)

# 目标跟踪扩缩策略
<a name="AutoScaling-Scaling-Policies-Target"></a>

在使用目标跟踪扩展策略时，您可以选择一个指标并设置一个目标值。ElastiCache for Valkey and Redis OSS 自动扩缩可创建和管理触发扩缩策略的 CloudWatch 警报，并根据指标和目标值计算扩缩调整。扩展策略根据需要添加或删除分区，以便将指标保持在指定的目标值或接近该值。除了将指标保持在目标值附近以外，目标跟踪扩展策略还会根据由于负载模式波动而造成的指标波动进行调节，并最大限度减少队列容量发生快速波动的情况。

例如，考虑使用具有已配置了目标值的预定义平均 `ElastiCachePrimaryEngineCPUUtilization` 指标的扩展策略。这种策略可以将 CPU 使用率保持在指定的目标值或接近该值。

## 预定义指标
<a name="AutoScaling-Scaling-Criteria-predfined-metrics"></a>

预定义指标是一种结构，用于指示给定 CloudWatch 指标的特定名称、维度和统计数据（`average`）。自动扩缩策略为您的集群定义下面的预定义指标之一：


****  

| 预定义指标名称 | CloudWatch 指标名称 | CloudWatch 指标维度 | 不符合条件的实例类型  | 
| --- | --- | --- | --- | 
| ElastiCachePrimaryEngineCPUUtilization |  `EngineCPUUtilization`  |  ReplicationGroupId，角色 = 主要  | 无 | 
| ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage |  `DatabaseCapacityUsageCountedForEvictPercentage`  |  Valkey 或 Redis OSS 复制组指标  | 无 | 
| ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage |  `DatabaseMemoryUsageCountedForEvictPercentage`  |  Valkey 或 Redis OSS 复制组指标  | R6gd | 

数据分层实例类型不能使用 `ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage`，因为这些实例类型将数据同时存储在内存和 SSD 中。数据分层实例的预期使用案例是 100% 的内存使用率，并根据需要填满 SSD。

## 分区的弹性伸缩条件
<a name="AutoScaling-Scaling-Criteria"></a>

当服务检测到您的预定义指标等于或大于目标设置时，它会自动提高分片容量。ElastiCache for Valkey and Redis OSS 会按以下两个数字中的较大者来横向扩展集群分片：与目标之间差异的百分比和当前分片数的 20%。对于横向缩减，ElastiCache 不会自动横向缩减，除非整体指标值低于所定义的目标的 75%。

关于横向扩展示例，如果您的分区数为 50，以及
+ 在目标超出了 30% 的情况下，ElastiCache 将横向扩展 30%，最后的结果是每个集群 65 个分片。
+ 在目标超出了 10% 的情况下，ElastiCache 默认横向扩展最低 20%，最后的结果是每个集群 60 个分片。

对横向缩减示例，如果您选择的目标值是 60%，则 ElastiCache 会直到该指标小于或等于 45%（比目标 60% 低 25%）时才会自动横向缩减。

## 弹性伸缩注意事项
<a name="AutoScaling-Scaling-Considerations"></a>

请注意以下事项：
+ 目标跟踪扩展策略假设它应该在指定指标高于目标值时执行向外扩展。因此，不能使用目标跟踪扩展策略在指定指标低于目标值时向外扩展。ElastiCache for Valkey and Redis OSS 会在与集群现有分片目标数之间存在最小 20% 的偏差时横向扩展分片。
+ 当指定指标数据不足时，目标跟踪扩展策略不会执行扩展。它不会执行横向缩减，因为它不会将数据不足解读为使用率低。
+ 您可能会看到目标值与实际指标数据点之间存在差距。这是因为 ElastiCache 自动扩缩在确定要添加或移除多少容量时将始终通过向上或向下舍入保守地进行操作，以免添加的容量不足或删除的容量过多。
+ 为了确保应用程序可用性，服务会针对指标尽快按比例横向扩展，但横向缩减过程相对缓慢。
+ 您可以为 ElastiCache for Valkey and Redis OSS 集群提供多个目标跟踪扩缩策略，前提是每个策略使用不同的指标。ElastiCache 自动扩缩的目的是始终优先考虑可用性，因此其行为会有所不同，具体取决于目标跟踪策略是否已准备好横向扩展或横向缩减。如果任何目标跟踪策略已准备好进行扩展，它将扩展服务，但仅在所有目标跟踪策略（启用了缩减部分）准备好缩减时才执行缩减。
+ 请勿编辑或删除 ElastiCache 自动扩缩为目标跟踪扩缩策略管理的 CloudWatch 警报。在您删除扩缩策略时，ElastiCache 自动扩缩会自动删除警报。
+ ElastiCache 自动扩缩不会阻止您手动修改集群分片。这些手动调整不会影响附加到扩展策略的任何现有 CloudWatch 告警，但可能会影响可触发这些 CloudWatch 告警的指标。
+ 这些由弹性伸缩管理的 CloudWatch 告警是通过集群中所有分区的 AVG 指标来定义的。因此，拥有热分区可能会导致以下任一情况：
  + 因若干热分区上负载触发 CloudWatch 告警而导致在不需要扩展时执行扩展
  + 因所有分区的影响告警的聚合 AVG 指标不违例而在需要扩展时不执行扩展。
+ ElastiCache 对每个集群的节点的默认限制仍然适用。因此，当选择弹性伸缩时，如果您希望最大节点数超过默认限制，请在 [AWS Service Limits](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 请求提高限制，并选择限制类型 **Nodes per cluster per instance type**（每个实例类型的集群的节点数）。
+ 请确保您的 VPC 中有足够的 ENI（弹性网络接口）可用，横向扩展过程中需要弹性网络接口。有关更多信息，请参阅[弹性网络接口](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ElasticNetworkInterfaces.html)。
+ 如果 EC2 没有足够的可用容量，则 ElastiCache 自动扩缩将不会扩展，并将延迟到容量可用为止。
+ 在横向缩减期间，ElastiCache for Redis OSS 自动扩缩不会移除以下分片：插槽在序列化后的项目大小大于 256 MB。
+ 在横向缩减期间，如果生成的分区配置中可用的内存不足，则横向缩减不会删除分区。

# 添加扩展策略
<a name="AutoScaling-Scaling-Adding-Policy-Shards"></a>

您可以使用 AWS 管理控制台 添加扩展策略。

**向 ElastiCache for Valkey and Redis OSS 集群添加自动扩缩策略**

1. 登录 AWS 管理控制台 并打开 Amazon ElastiCache 控制台（[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)）。

1. 在导航窗格中，选择 **Valkey** 或 **Redis OSS**。

1. 选择您要向其中添加策略的集群（选择集群名称，而不是其左侧的按钮）。

1. 选择 **Auto Scaling policies**（弹性伸缩策略）选项卡。

1. 选择 **add dynamic scaling**（添加动态扩展）。

1. 对于 **Policy name（策略名称）**，输入一个策略名称。

1. 对于 **Scalable Dimension（可扩展维度）**，选择 **shards（分区）**。

1. 对于目标指标，请选择以下选项之一：
   + **Primary CPU Utilization（主 CPU 使用率）**，用于根据平均 CPU 使用率创建策略。
   + **Memory（内存）**，用于根据平均数据库内存创建策略。
   + **容量**，用于根据平均数据库使用量创建策略。“容量”指标包括用于数据分层实例的内存和 SSD 利用率，以及用于所有其他实例类型的内存利用率。

1. 对于目标值，请选择大于或等于 35 且小于或等于 70 的值。自动扩缩将在各 ElastiCache 分片上为选定的目标指标保持该值：
   + **主 CPU 利用率**：在主节点上保持 `EngineCPUUtilization` 指标的目标值。
   + **内存**：保持 `DatabaseMemoryUsageCountedForEvictPercentage` 指标的目标值。
   + **容量**保持 `DatabaseCapacityUsageCountedForEvictPercentage` 指标的目标值。

   将添加或删除集群分区以使指标接近于指定的值。

1. （可选）控制台不支持横向缩减或横向扩展冷却时间。请使用 AWS CLI 修改冷却时间值。

1. 对于**最小容量**，键入 ElastiCache 自动扩缩策略需要保持的最小分片数。

1. 对于**最大容量**，键入 ElastiCache 自动扩缩策略需要保持的最大分片数。此值必须小于或等于 250。

1. 选择**创建**。

# 注册可扩展目标
<a name="AutoScaling-Scaling-Registering-Policy-CLI"></a>

在 ElastiCache for Valkey and Redis OSS 集群上使用自动扩缩之前，您必须先为集群注册 ElastiCache 自动扩缩。这样做是为了定义应用于该集群的扩展维度和限制。ElastiCache 自动扩缩会连同 `elasticache:replication-group:NodeGroups` 可扩展维度一起动态扩缩集群，该维度表示每个集群分片的数量。

 **使用 AWS CLI** 

要注册您的 ElastiCache for Valkey and Redis OSS 集群，请使用具有以下参数的 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令：
+ `--service-namespace` – 将该值设置为 `elasticache`
+ `--resource-id` – 集群的资源标识符。对于该参数，资源类型为 `ReplicationGroup`，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ `--scalable-dimension` – 将该值设置为 `elasticache:replication-group:NodeGroups`。
+ `--max-capacity ` – 由 ElastiCache 自动扩缩管理的最大分片数。有关 `--min-capacity`、`--max-capacity` 和集群中分区数之间关系的信息，请参阅 [最小和最大容量](AutoScaling-Policies.md#AutoScaling-MinMax)。
+ `--min-capacity ` – 由 ElastiCache 自动扩缩管理的最小分片数。有关 `--min-capacity`、`--max-capacity` 和集群中分区数之间关系的信息，请参阅 [最小和最大容量](AutoScaling-Policies.md#AutoScaling-MinMax)。

**Example**  
 在以下示例中，您注册一个名为 `myscalablecluster` 的 ElastiCache 集群。该注册表示应将集群动态扩展为具有 1 到 10 个分区。  
对于 Linux、macOS 或 Unix：  

```
aws application-autoscaling register-scalable-target \
    --service-namespace elasticache \
    --resource-id replication-group/myscalablecluster \
    --scalable-dimension elasticache:replication-group:NodeGroups \
    --min-capacity 1 \
    --max-capacity 10 \
```
对于 Windows：  

```
aws application-autoscaling register-scalable-target ^
    --service-namespace elasticache ^
    --resource-id replication-group/myscalablecluster ^
    --scalable-dimension elasticache:replication-group:NodeGroups ^
    --min-capacity 1 ^
    --max-capacity 10 ^
```

**使用 API**

要注册您的 ElastiCache 集群，请使用包含下列参数的 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令：
+ ServiceNamespace – 将此值设置为 elasticache。
+ ResourceID – ElastiCache 集群的资源标识符。对于该参数，资源类型为 ReplicationGroup，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ ScalableDimension – 将此值设置为 `elasticache:replication-group:NodeGroups`。
+ MinCapacity – 由 ElastiCache 自动扩缩管理的最小分片数。有关 --min-capacity、--max-capacity 和集群中副本数之间关系的信息，请参阅 [最小和最大容量](AutoScaling-Policies.md#AutoScaling-MinMax)。
+ MaxCapacity – 由 ElastiCache 自动扩缩管理的最大分片数。有关 --min-capacity、--max-capacity 和集群中副本数之间关系的信息，请参阅 [最小和最大容量](AutoScaling-Policies.md#AutoScaling-MinMax)。

**Example**  
在以下示例中，您使用 Application Auto Scaling API 注册一个名为 `myscalablecluster` 的 ElastiCache 集群。该注册表示应将集群动态扩展为具有 1 到 5 个副本。  

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.RegisterScalableTarget
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:NodeGroups",
    "MinCapacity": 1,
    "MaxCapacity": 5
}
```

# 定义扩缩策略
<a name="AutoScaling-Scaling-Defining-Policy-API"></a>

目标跟踪扩展策略配置是由 JSON 块表示的，其中定义了指标和目标值。您可以在文本文件中将扩展策略配置保存为 JSON 块。在调用 AWS CLI 或 Application Auto Scaling API 时，您可以使用该文本文件。有关策略配置语法的更多信息，请参阅 Application Auto Scaling API 参考中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

您可以使用以下选项定义目标跟踪扩缩策略配置：

**Topics**
+ [使用预定义的指标](#AutoScaling-Scaling-Predefined-Metric)
+ [使用自定义指标](#AutoScaling-Scaling-Custom-Metric)
+ [使用冷却时间](#AutoScaling-Scaling-Cooldown-periods)

## 使用预定义的指标
<a name="AutoScaling-Scaling-Predefined-Metric"></a>

通过使用预定义的指标，您可以快速为 ElastiCache for Valkey and Redis OSS 集群定义与 ElastiCache 自动扩缩中的目标跟踪搭配使用的目标跟踪扩缩策略。

目前，ElastiCache 在 NodeGroup 自动扩缩中支持以下预定义指标：
+ **ElastiCachePrimaryEngineCPUUtilization** – 集群中所有主节点在 CloudWatch 中 `EngineCPUUtilization` 指标的平均值。
+ **ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage** – 集群中所有主节点在 CloudWatch 中 `DatabaseMemoryUsageCountedForEvictPercentage` 指标的平均值。
+ **ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage** – 集群中所有主节点在 CloudWatch 中 `ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage` 指标的平均值。

有关 `EngineCPUUtilization`、`DatabaseMemoryUsageCountedForEvictPercentage` 和 `DatabaseCapacityUsageCountedForEvictPercentage` 指标的更多信息，请参阅[使用 CloudWatch 指标监控使用情况](CacheMetrics.md)。要在扩展策略中使用预定义的指标，您需要为扩展策略创建一个目标跟踪配置。该配置必须包含 `PredefinedMetricSpecification` 以表示预定义的指标，并包含 TargetValue 以表示该指标的目标值。

**Example**  
以下示例说明了 ElastiCache for Valkey and Redis OSS 集群的典型目标跟踪扩缩策略配置。在该配置中，`ElastiCachePrimaryEngineCPUUtilization` 预定义指标用于根据集群中所有主节点的平均 CPU 使用率（40%）来调整该集群。  

```
{
    "TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "ElastiCachePrimaryEngineCPUUtilization"
    }
}
```

## 使用自定义指标
<a name="AutoScaling-Scaling-Custom-Metric"></a>

 通过使用自定义指标，您可以定义满足您的自定义要求的目标跟踪扩展策略。您可以根据随扩展按比例变化的任何 ElastiCache 指标来定义自定义指标。并非所有 Elasticache 指标都适用于目标跟踪。指标必须是有效的使用率指标，它用于描述实例的繁忙程度。指标值必须随集群中分区数按比例增加或减少。要使用指标数据按比例横向扩展或缩减分区数，必须按比例进行这种增加或减少。

**Example**  
以下示例说明了扩缩策略的目标跟踪配置。在该配置中，一个自定义指标根据名为 `my-db-cluster` 的集群中所有分片的平均 CPU 使用率（50%）调整 ElastiCache for Redis OSS 集群。

```
{
    "TargetValue": 50,
    "CustomizedMetricSpecification":
    {
        "MetricName": "EngineCPUUtilization",
        "Namespace": "AWS/ElastiCache",
        "Dimensions": [
            {
                "Name": "ReplicationGroup","Value": "my-db-cluster"
            },
            {
                "Name": "Role","Value": "PRIMARY"
            }
        ],
        "Statistic": "Average",
        "Unit": "Percent"
    }
}
```

## 使用冷却时间
<a name="AutoScaling-Scaling-Cooldown-periods"></a>

您可以为 `ScaleOutCooldown` 指定一个值（秒）以添加横向扩展集群的冷却时间。同样，您可以为 `ScaleInCooldown` 添加一个值（秒）以添加横向缩减集群的冷却时间。有关更多信息，请参阅 Application Auto Scaling API 参考中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

 以下示例说明了扩缩策略的目标跟踪配置。在该配置中，`ElastiCachePrimaryEngineCPUUtilization` 预定义指标用于根据该集群中所有主节点的平均 CPU 使用率（40%）调整 ElastiCache for Redis OSS 集群。该配置将缩减冷却时间指定为 10 分钟，并将扩展冷却时间指定为 5 分钟。

```
{
    "TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "ElastiCachePrimaryEngineCPUUtilization"
    },
    "ScaleInCooldown": 600,
    "ScaleOutCooldown": 300
}
```

# 禁用横向缩减活动
<a name="AutoScaling-Scaling-Disabling-Scale-in"></a>

您可以禁用横向缩减活动，以阻止目标跟踪扩缩策略配置对您的集群进行横向缩减。禁用横向缩减活动将禁止扩展策略删除分区，同时仍允许扩展策略根据需要创建分区。

您可以为 `DisableScaleIn` 指定一个布尔值，以便为集群启用或禁用横向缩减活动。有关更多信息，请参阅 Application Auto Scaling API 参考中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

以下示例说明了扩缩策略的目标跟踪配置。在该配置中，`ElastiCachePrimaryEngineCPUUtilization` 预定义指标用于根据 ElastiCache for Valkey and Redis OSS 集群中所有主节点的平均 CPU 使用率（40%）来调整该集群。该配置禁用扩缩策略的横向缩减活动。

```
{
    "TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "ElastiCachePrimaryEngineCPUUtilization"
    },
    "DisableScaleIn": true
}
```

# 应用扩缩策略
<a name="AutoScaling-Scaling-Applying-a-Scaling-Policy"></a>

在为集群注册 ElastiCache for Valkey and Redis OSS 自动扩缩并定义扩缩策略后，您可以将扩缩策略应用于已注册的集群。要将扩缩策略应用于 ElastiCache for Redis OSS 集群，您可以使用 AWS CLI 或 Application Auto Scaling API。

## 使用 AWS CLI 应用扩展策略
<a name="AutoScaling-Scaling-Applying-a-Scaling-Policy-CLI"></a>

要将扩缩策略应用于 ElastiCache for Valkey and Redis OSS 集群，请使用具有以下参数的 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) 命令：
+ **--policy-name** – 扩展策略的名称。
+ **--policy-type** – 将此值设置为 `TargetTrackingScaling`。
+ **--resource-id** – 资源标识符。对于该参数，资源类型为 `ReplicationGroup`，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ **--service-namespace** – 将此值设置为 `elasticache`。
+ **--scalable-dimension** – 将此值设置为 `elasticache:replication-group:NodeGroups`。
+ **--target-tracking-scaling-policy-configuration** – 用于集群的目标跟踪扩缩策略配置。

在以下示例中，您使用 ElastiCache 自动扩缩对名为 `myscalablecluster` 的 ElastiCache for Valkey and Redis OSS 集群应用名为 `myscalablepolicy` 的目标跟踪扩缩策略。为此，请使用在名为 `config.json` 的文件中保存的策略配置。

对于 Linux、macOS 或 Unix：

```
aws application-autoscaling put-scaling-policy \
    --policy-name myscalablepolicy \
    --policy-type TargetTrackingScaling \
    --resource-id replication-group/myscalablecluster \
    --service-namespace elasticache \
    --scalable-dimension elasticache:replication-group:NodeGroups \
    --target-tracking-scaling-policy-configuration file://config.json
```

对于 Windows：

```
aws application-autoscaling put-scaling-policy ^
    --policy-name myscalablepolicy ^
    --policy-type TargetTrackingScaling ^
    --resource-id replication-group/myscalablecluster ^
    --service-namespace elasticache ^
    --scalable-dimension elasticache:replication-group:NodeGroups ^
    --target-tracking-scaling-policy-configuration file://config.json
```

## 使用 API 应用扩展策略
<a name="AutoScaling-Scaling-Applying-a-Scaling-Policy-API"></a>

要将扩缩策略应用于 ElastiCache for Valkey and Redis OSS 集群，请使用具有以下参数的 [PutScalingPolicy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) AWS CLI 命令：
+ **--policy-name** – 扩展策略的名称。
+ **--resource-id** – 资源标识符。对于该参数，资源类型为 `ReplicationGroup`，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ **--service-namespace** – 将此值设置为 `elasticache`。
+ **--scalable-dimension** – 将此值设置为 `elasticache:replication-group:NodeGroups`。
+ **--target-tracking-scaling-policy-configuration** – 用于集群的目标跟踪扩缩策略配置。

在以下示例中，您使用 ElastiCache 自动扩缩对名为 `myscalablecluster` 的 ElastiCache 集群应用名为 `myscalablepolicy` 的目标跟踪扩缩策略。您使用的策略配置基于 `ElastiCachePrimaryEngineCPUUtilization` 预定义指标。

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.PutScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "PolicyName": "myscalablepolicy",
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:NodeGroups",
    "PolicyType": "TargetTrackingScaling",
    "TargetTrackingScalingPolicyConfiguration": {
        "TargetValue": 40.0,
        "PredefinedMetricSpecification":
        {
            "PredefinedMetricType": "ElastiCachePrimaryEngineCPUUtilization"
        }
    }
}
```

# 编辑扩展策略
<a name="AutoScaling-Scaling-Editing-a-Scaling-Policy"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 Application Auto Scaling API 编辑扩缩策略。

## 使用 AWS 管理控制台编辑扩展策略
<a name="AutoScaling-Scaling-Editing-a-Scaling-Policy-CON"></a>

**编辑 ElastiCache for Valkey and Redis OSS 集群的自动扩缩策略**

1. 登录 AWS 管理控制台 并打开 Amazon ElastiCache 控制台（[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)）。

1. 在导航窗格中，选择相应的引擎。

1. 选择您要向其中添加策略的集群（选择集群名称，而不是其左侧的按钮）。

1. 选择 **Auto Scaling policies**（弹性伸缩策略）选项卡。

1. 在 **Scaling policies**（扩展策略）下，选择要更改的 Auto Scaling 策略左侧的按钮，然后选择 **Modify**（修改）。

1. 对该策略做出必要更改。

1. 选择**修改**。

## 使用 AWS CLI 或 API 编辑扩展策略
<a name="AutoScaling-Scaling-Editing-a-Scaling-Policy-CLI"></a>

您可以使用 AWS CLI 或 Application Auto Scaling API 按照与应用扩缩策略相同的方式编辑扩缩策略：
+ 在使用 AWS CLI 时，请在 `--policy-name` 参数中指定要编辑的策略名称。为要更改的参数指定新的值。
+ 在使用 Application Auto Scaling API 时，请在 `PolicyName` 参数中指定要编辑的策略名称。为要更改的参数指定新的值。

有关更多信息，请参阅 [应用扩缩策略](AutoScaling-Scaling-Applying-a-Scaling-Policy.md)。

# 删除扩展策略
<a name="AutoScaling-Scaling-Deleting-a-Scaling-Policy"></a>

您可以使用AWS 管理控制台、AWS CLI 或 Application Auto Scaling API 删除扩缩策略。

## 使用 AWS 管理控制台删除扩展策略
<a name="AutoScaling-Scaling-Editing-a-Scaling-Policy-CON"></a>

**删除 ElastiCache for Redis OSS 集群的自动扩缩策略**

1. 登录 AWS 管理控制台 并打开 Amazon ElastiCache 控制台（[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)）。

1. 在导航窗格中，选择 **Valkey** 或 **Redis OSS**。

1. 选择要编辑其 Auto Scaling 策略的集群（选择集群名称，而不是其左侧的按钮）。

1. 选择 **Auto Scaling policies**（弹性伸缩策略）选项卡。

1. 在 **Scaling policies**（扩展策略）下，选择 Auto Scaling 策略，然后选择 **Delete**（删除）。

## 使用 AWS CLI删除扩展策略
<a name="AutoScaling-Scaling-Deleting-a-Scaling-Policy-CLI"></a>

要删除 ElastiCache for Valkey and Redis OSS 集群的扩缩策略，请使用具有以下参数的 [delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/delete-scaling-policy.html) AWS CLI 命令：
+ **--policy-name** – 扩展策略的名称。
+ **--resource-id** – 资源标识符。对于该参数，资源类型为 `ReplicationGroup`，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ **--service-namespace** – 将此值设置为 `elasticache`。
+ **--scalable-dimension** – 将此值设置为 `elasticache:replication-group:NodeGroups`。

在以下示例中，您将从名为 `myscalablepolicy` 的集群中删除名为 `myscalablecluster` 的目标跟踪扩缩策略。

对于 Linux、macOS 或 Unix：

```
aws application-autoscaling delete-scaling-policy \
    --policy-name myscalablepolicy \
    --resource-id replication-group/myscalablecluster \
    --service-namespace elasticache \
    --scalable-dimension elasticache:replication-group:NodeGroups
```

对于 Windows：

```
aws application-autoscaling delete-scaling-policy ^
    --policy-name myscalablepolicy ^
    --resource-id replication-group/myscalablecluster ^
    --service-namespace elasticache ^
    --scalable-dimension elasticache:replication-group:NodeGroups
```

## 使用 API 删除扩展策略
<a name="AutoScaling-Scaling-Deleting-a-Scaling-Policy-API"></a>

要删除 ElastiCache for Valkey and Redis OSS 集群的扩缩策略，请使用具有以下参数的 [DeleteScalingPolicy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/delete-scaling-policy.html) AWS CLI 命令：
+ **--policy-name** – 扩展策略的名称。
+ **--resource-id** – 资源标识符。对于该参数，资源类型为 `ReplicationGroup`，唯一标识符为集群的名称，例如 `replication-group/myscalablecluster`。
+ **--service-namespace** – 将此值设置为 `elasticache`。
+ **--scalable-dimension** – 将此值设置为 `elasticache:replication-group:NodeGroups`。

在以下示例中，您将从名为 `myscalablepolicy` 的集群中删除名为 `myscalablecluster` 的目标跟踪扩缩策略。

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.DeleteScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "PolicyName": "myscalablepolicy",
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:NodeGroups"
}
```

# 将 CloudFormation 用于 Auto Scaling 策略
<a name="AutoScaling-with-Cloudformation-Shards"></a>

此代码段演示如何使用 [AWS::ApplicationAutoScaling::ScalableTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html) 资源创建目标跟踪策略并将其应用于 [AWS::ElastiCache::ReplicationGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html) 资源。此示例利用 [Fn::Join](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html) 和 [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) 内置函数，使用在同一模板中指定的 `AWS::ElastiCache::ReplicationGroup` 资源的逻辑名称来构建 `ResourceId` 属性。

```
ScalingTarget:
   Type: 'AWS::ApplicationAutoScaling::ScalableTarget'
   Properties:
     MaxCapacity: 3
     MinCapacity: 1
     ResourceId: !Sub replication-group/${logicalName}
     ScalableDimension: 'elasticache:replication-group:NodeGroups'
     ServiceNamespace: elasticache
     RoleARN: !Sub "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/elasticache.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG"

  ScalingPolicy:
    Type: "AWS::ApplicationAutoScaling::ScalingPolicy"
    Properties:
      ScalingTargetId: !Ref ScalingTarget
      ServiceNamespace: elasticache
      PolicyName: testpolicy
      PolicyType: TargetTrackingScaling
      ScalableDimension: 'elasticache:replication-group:NodeGroups'
      TargetTrackingScalingPolicyConfiguration:
        PredefinedMetricSpecification:
          PredefinedMetricType: ElastiCachePrimaryEngineCPUUtilization
        TargetValue: 40
```

# 计划扩展
<a name="AutoScaling-with-Scheduled-Scaling-Shards"></a>

按计划扩展使您可以按照可预测的需求变化来扩展应用程序。要使用计划扩缩，您需要创建计划操作，用于告知 ElastiCache for Valkey and Redis OSS 在特定时间执行扩缩活动。创建计划操作时，您需要指定现有集群、执行扩缩活动的时间、最小容量和最大容量。您可以创建仅扩展一次或按重复计划扩展的计划操作。

 您只能为已存在的集群创建计划操作。您不能在创建集群的同时创建计划操作。

有关计划操作创建、管理和删除的相关术语的详细信息，请参阅[计划操作创建、管理和删除的常用命令](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scheduled-scaling.html#scheduled-scaling-commonly-used-commands) 

**创建定期计划：**

1. 登录 AWS 管理控制台 并打开 Amazon ElastiCache 控制台（[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)）。

1. 在导航窗格中，选择 **Valkey** 或 **Redis OSS**。

1. 选择要对其添加策略的集群。

1. 从 **Actions**（操作）下拉菜单中选择 **Manage Auto Scaling policies**（管理弹性伸缩策略）。

1. 选择 **Auto Scaling policies（Auto Scaling 策略）**选项卡。

1. **Auto scaling policies**（弹性伸缩策略）部分中会显示 **Add Scaling policy**（添加扩缩策略）对话框。选择 **Scheduled scaling（计划扩展）**。

1. 对于 **Policy name（策略名称）**，请输入策略的名称。

1. 对于 **Scalable Dimension（可扩展维度）**，选择 **Shards（分区）**。

1. 对于 **Target Shards（目标分区）**，请选择值。

1. 对于 **Recurrence（重复）**，请选择 **Recurring（定期）**。

1. 对于 **Frequency（频率）**，请选择相应的值。

1. 对于 **Start Date（开始日期）**和 **Start time（开始时间）**，请选择策略开始生效的时间。

1. 选择 **Add Policy（添加策略）**。

**创建一次性计划操作：**

1. 登录 AWS 管理控制台 并打开 Amazon ElastiCache 控制台（[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)）。

1. 在导航窗格中，选择 **Valkey** 或 **Redis OSS**。

1. 选择要对其添加策略的集群。

1. 从 **Actions**（操作）下拉菜单中选择 **Manage Auto Scaling policies**（管理弹性伸缩策略）。

1. 选择 **Auto Scaling policies（Auto Scaling 策略）**选项卡。

1. **Auto scaling policies**（弹性伸缩策略）部分中会显示 **Add Scaling policy**（添加扩缩策略）对话框。选择 **Scheduled scaling（计划扩展）**。

1. 对于 **Policy name（策略名称）**，请输入策略的名称。

1. 对于 **Scalable Dimension（可扩展维度）**，选择 **Shards（分区）**。

1. 对于 **Target Shards（目标分区）**，请选择值。

1. 对于 **Recurrence（重复）**，请选择 **Once（一次）**。

1. 对于 **Start Date（开始日期）**和 **Start time（开始时间）**，请选择策略开始生效的时间。

1. 对于 **End Date（结束日期）**，请选择策略生效结束日期。

1. 选择 **Add Policy（添加策略）**。

**删除计划操作**

1. 登录 AWS 管理控制台 并打开 Amazon ElastiCache 控制台（[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)）。

1. 在导航窗格中，选择 **Valkey** 或 **Redis OSS**。

1. 选择要对其添加策略的集群。

1. 从 **Actions**（操作）下拉菜单中选择 **Manage Auto Scaling policies**（管理弹性伸缩策略）。

1. 选择 **Auto Scaling policies（Auto Scaling 策略）**选项卡。

1. 在 **Auto Scaling policies**（弹性伸缩策略）部分，选择弹性伸缩策略，然后从 **Actions**（操作）对话中选择 **Delete（删除）**。

**使用 AWS CLI 管理计划扩展**

使用以下 application-autoscaling API：
+ [put-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scheduled-action.html) 
+ [describe-scheduled-actions](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/describe-scheduled-actions.html) 
+ [delete-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/delete-scheduled-action.html) 

## 使用 CloudFormation 创建计划的操作
<a name="AutoScaling-with-Cloudformation-Declare-Scheduled-Action"></a>

此代码段演示如何使用 [AWS::ApplicationAutoScaling::ScalableTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html) 资源创建目标跟踪策略并将其应用于 [AWS::ElastiCache::ReplicationGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html) 资源。此示例利用 [Fn::Join](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html) 和 [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) 内置函数，使用在同一模板中指定的 `AWS::ElastiCache::ReplicationGroup` 资源的逻辑名称来构建 `ResourceId` 属性。

```
ScalingTarget:
   Type: 'AWS::ApplicationAutoScaling::ScalableTarget'
   Properties:
     MaxCapacity: 3
     MinCapacity: 1
     ResourceId: !Sub replication-group/${logicalName}
     ScalableDimension: 'elasticache:replication-group:NodeGroups'
     ServiceNamespace: elasticache
     RoleARN: !Sub "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/elasticache.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG"
     ScheduledActions:
       - EndTime: '2020-12-31T12:00:00.000Z'
         ScalableTargetAction:
           MaxCapacity: '5'
           MinCapacity: '2'
         ScheduledActionName: First
         Schedule: 'cron(0 18 * * ? *)'
```