

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

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

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

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

**Topics**
+ [使用预定义的指标](#AutoScaling-Predefined-Metric)
+ [编辑扩展策略](AutoScaling-Editing-Policy.md)
+ [删除扩展策略](AutoScaling-Deleting-Policy.md)
+ [将 CloudFormation 用于 Auto Scaling 策略](AutoScaling-with-Cloudformation.md)
+ [计划扩展](AutoScaling-with-Scheduled-Scaling-Replicas.md)

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

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

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

**Topics**
+ [使用预定义的指标](#AutoScaling-Predefined-Metric)
+ [使用自定义指标](#AutoScaling-Custom-Metric)
+ [使用冷却时间](#AutoScaling-Using-Cooldowns)
+ [禁用横向缩减活动](#AutoScaling-Disabling-Scalein)
+ [向 ElastiCache for Valkey and Redis OSS 集群应用扩缩策略](#AutoScaling-Applying-Policy)

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

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

`ElastiCacheReplicaEngineCPUUtilization` – 集群中所有副本在 CloudWatch 中的 EngineCPUUtilization 指标的平均值。您可以在 CloudWatch 中在 ElastiCache `ReplicationGroupId, Role` 下找到聚合指标值，获得所需的 ReplicationGroupId 和角色副本。

要在扩展策略中使用预定义的指标，您需要为扩展策略创建一个目标跟踪配置。该配置必须包含 `PredefinedMetricSpecification` 以表示预定义的指标，并包含 `TargetValue` 以表示该指标的目标值。

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

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

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

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

### 使用冷却时间
<a name="AutoScaling-Using-Cooldowns"></a>

您可以为 `ScaleOutCooldown` 指定一个值（秒）以添加横向扩展集群的冷却时间。同样，您可以为 `ScaleInCooldown` 添加一个值（秒）以添加横向缩减集群的冷却时间。有关 `ScaleInCooldown` 和 `ScaleOutCooldown` 的更多信息，请参阅 *Application Auto Scaling API 参考*中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/ApplicationAutoScaling/latest/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。以下示例说明了扩缩策略的目标跟踪配置。在该配置中，`ElastiCacheReplicaEngineCPUUtilization` 预定义指标用于根据集群中所有副本的平均 CPU 使用率（40%）来调整该集群。该配置将缩减冷却时间指定为 10 分钟，并将扩展冷却时间指定为 5 分钟。

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

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

您可以禁用横向缩减活动，以禁止目标跟踪扩缩策略配置横向缩减 ElastiCache for Valkey and Redis OSS 集群。禁用横向缩减活动将禁止扩展策略删除副本，同时仍允许扩展策略根据需要添加副本。

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

**Example**  
以下示例说明了扩缩策略的目标跟踪配置。在该配置中，`ElastiCacheReplicaEngineCPUUtilization` 预定义指标根据集群中所有副本的平均 CPU 使用率（40%）调整该集群。该配置禁用扩缩策略的横向缩减活动。

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

### 向 ElastiCache for Valkey and Redis OSS 集群应用扩缩策略
<a name="AutoScaling-Applying-Policy"></a>

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

**使用 AWS CLI**

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

**Example**  
在以下示例中，您将使用 ElastiCache 自动扩缩对名为 `myscalablecluster` 的集群应用名为 `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:Replicas \
    --target-tracking-scaling-policy-configuration file://config.json
```

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

对于 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:Replicas ^
    --target-tracking-scaling-policy-configuration file://config.json
```

**使用 API**

要使用 Application Auto Scaling API 将扩缩策略应用于 ElastiCache 集群，请使用具有以下参数的 [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) Application Auto Scaling API 操作：
+ PolicyName – 扩展策略的名称。
+ PolicyType – 将此值设置为 `TargetTrackingScaling`。
+ ResourceID – 集群的资源标识符。对于此参数，资源类型为 ReplicationGroup，唯一标识符为 ElastiCache for Redis OSS 集群的名称，例如 `replication-group/myscalablecluster`。
+ ServiceNamespace – 将此值设置为 elasticache。
+ ScalableDimension – 将此值设置为 `elasticache:replication-group:Replicas`。
+ TargetTrackingScalingPolicyConfiguration – 用于集群的目标跟踪扩缩策略配置。

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

```
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:Replicas",
    "PolicyType": "TargetTrackingScaling",
    "TargetTrackingScalingPolicyConfiguration": {
        "TargetValue": 40.0,
        "PredefinedMetricSpecification":
        {
            "PredefinedMetricType": "ElastiCacheReplicaEngineCPUUtilization"
        }
    }
}
```