

# 向 Amazon Aurora 数据库集群添加自动扩缩策略
<a name="Aurora.Integrating.AutoScaling.Add"></a>

您可以使用Amazon Web Services 管理控制台、Amazon CLI 或 Application Auto Scaling API 添加扩展策略。

**注意**  
有关使用 Amazon CloudFormation 添加扩展策略的示例，请参阅 *Amazon CloudFormation 用户指南*中[声明 Aurora 数据库集群的扩展策略](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html#w2ab1c19c22c15c21c11)。

## 控制台
<a name="Aurora.Integrating.AutoScaling.AddConsole"></a>

您可以使用Amazon Web Services 管理控制台将扩展策略添加到 Aurora 数据库集群中。

**在 Aurora 数据库集群中添加 Auto Scaling 策略**

1. 登录Amazon Web Services 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择要添加策略的 Aurora 数据库集群。

1. 选择 **Logs & events (日志和事件)** 选项卡。

1. 在 **Auto Scaling 策略**部分中，选择**添加**。

   将显示**添加 Auto Scaling 策略**对话框。

1. 对于 **Policy Name (策略名称)**，键入策略名称。

1. 对于目标指标，请选择以下选项之一：
   + **Aurora 副本的平均 CPU 使用率**，用于创建基于平均 CPU 使用率的策略。
   + **Aurora 副本的平均连接数**，用于创建基于 Aurora 副本的平均连接数的策略。

1. 对于目标值，请键入以下值之一：
   + 如果在上一步中选择 **Aurora 副本的平均 CPU 使用率**，请键入要在 Aurora 副本上保持的 CPU 使用率百分比。
   + 如果在上一步中选择 **Aurora 副本的平均连接数**，请键入要保持的连接数。

   将添加或删除 Aurora 副本以使指标接近于指定的值。

1. （可选）展开 **Additional Configuration**（附加配置）以创建横向缩减或横向扩展冷却时间。

1. 对于**最小容量**，请键入 Aurora Auto Scaling 策略需要保持的最小 Aurora 副本数。

1. 对于**最大容量**，请键入 Aurora Auto Scaling 策略需要保持的最大 Aurora 副本数。

1. 选择**添加策略**。

以下对话框创建一个基于平均 CPU 使用率 40% 的 Auto Scaling 策略。该策略指定最少 5 个 Aurora 副本，最多 15 个 Aurora 副本。

![\[创建基于平均 CPU 使用率的 Auto Scaling 策略\]](http://docs.amazonaws.cn/AmazonRDS/latest/AuroraUserGuide/images/aurora-autoscaling-cpu.png)


以下对话框创建一个基于平均连接数 100 的 Auto Scaling 策略。该策略指定最少 2 个 Aurora 副本，最多 8 个 Aurora 副本。

![\[创建基于平均连接数的 Auto Scaling 策略\]](http://docs.amazonaws.cn/AmazonRDS/latest/AuroraUserGuide/images/aurora-autoscaling-connections.png)


## Amazon CLI 或 Application Auto Scaling API
<a name="Aurora.Integrating.AutoScaling.AddCode"></a>

您可以应用基于预定义或自定义指标的扩展策略。为此，您可以使用 Amazon CLI 或 Application Auto Scaling API。第一步是在 Application Auto Scaling 中注册 Aurora 数据库集群。

### 注册 Aurora 数据库集群
<a name="Aurora.Integrating.AutoScaling.AddCode.Register"></a>

您必须先在 Application Auto Scaling 中注册 Aurora 数据库集群，然后才能在 Aurora 数据库集群中使用 Aurora Auto Scaling。这样做是为了定义应用于该集群的扩展维度和限制。Application Auto Scaling 沿 `rds:cluster:ReadReplicaCount` 可扩展维度动态扩展 Aurora 数据库集群，它表示 Aurora 副本的数量。

要注册 Aurora 数据库集群，您可以使用 Amazon CLI 或 Application Auto Scaling API。

#### Amazon CLI
<a name="Aurora.Integrating.AutoScaling.AddCode.Register.CLI"></a>

要注册 Aurora 数据库集群，请使用具有以下参数的 [https://docs.amazonaws.cn/cli/latest/reference/application-autoscaling/register-scalable-target.html](https://docs.amazonaws.cn/cli/latest/reference/application-autoscaling/register-scalable-target.html) Amazon CLI 命令：
+ `--service-namespace` – 将该值设置为 `rds`。
+ `--resource-id` – Aurora 数据库集群的资源标识符。对于该参数，资源类型为 `cluster`，唯一标识符为 Aurora 数据库集群的名称，例如，`cluster:myscalablecluster`。
+ `--scalable-dimension` – 将该值设置为 `rds:cluster:ReadReplicaCount`。
+ `--min-capacity` – 由 Application Auto Scaling 管理的最小读取器数据库实例数。有关集群中 `--min-capacity`、`--max-capacity` 和数据库实例数之间关系的信息，请参阅 [最小和最大容量](Aurora.Integrating.AutoScaling.md#Aurora.Integrating.AutoScaling.Concepts.Capacity)。
+ `--max-capacity` – 由 Application Auto Scaling 管理的最大读取器数据库实例数。有关集群中 `--min-capacity`、`--max-capacity` 和数据库实例数之间关系的信息，请参阅 [最小和最大容量](Aurora.Integrating.AutoScaling.md#Aurora.Integrating.AutoScaling.Concepts.Capacity)。

**Example**  
在以下示例中，您注册一个名为 `myscalablecluster` 的 Aurora 数据库集群。该注册表示应动态扩展数据库集群以具有 1-8 个 Aurora 副本。  
对于 Linux、macOS 或 Unix：  

```
aws application-autoscaling register-scalable-target \
    --service-namespace rds \
    --resource-id cluster:myscalablecluster \
    --scalable-dimension rds:cluster:ReadReplicaCount \
    --min-capacity 1 \
    --max-capacity 8 \
```
对于：Windows  

```
aws application-autoscaling register-scalable-target ^
    --service-namespace rds ^
    --resource-id cluster:myscalablecluster ^
    --scalable-dimension rds:cluster:ReadReplicaCount ^
    --min-capacity 1 ^
    --max-capacity 8 ^
```

#### Application Auto Scaling API
<a name="Aurora.Integrating.AutoScaling.AddCode.Register.API"></a>

要在 Application Auto Scaling 中注册 Aurora 数据库集群，请使用具有以下参数的 [https://docs.amazonaws.cn/ApplicationAutoScaling/latest/APIReference/API_RegisterScalableTarget.html](https://docs.amazonaws.cn/ApplicationAutoScaling/latest/APIReference/API_RegisterScalableTarget.html) Application Auto Scaling API 操作：
+ `ServiceNamespace` – 将该值设置为 `rds`。
+ `ResourceID` – Aurora 数据库集群的资源标识符。对于该参数，资源类型为 `cluster`，唯一标识符为 Aurora 数据库集群的名称，例如，`cluster:myscalablecluster`。
+ `ScalableDimension` – 将该值设置为 `rds:cluster:ReadReplicaCount`。
+ `MinCapacity` – 由 Application Auto Scaling 管理的最小读取器数据库实例数。有关集群中 `MinCapacity`、`MaxCapacity` 和数据库实例数之间关系的信息，请参阅 [最小和最大容量](Aurora.Integrating.AutoScaling.md#Aurora.Integrating.AutoScaling.Concepts.Capacity)。
+ `MaxCapacity` – 由 Application Auto Scaling 管理的最大读取器数据库实例数。有关集群中 `MinCapacity`、`MaxCapacity` 和数据库实例数之间关系的信息，请参阅 [最小和最大容量](Aurora.Integrating.AutoScaling.md#Aurora.Integrating.AutoScaling.Concepts.Capacity)。

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

```
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": "rds",
    "ResourceId": "cluster:myscalablecluster",
    "ScalableDimension": "rds:cluster:ReadReplicaCount",
    "MinCapacity": 1,
    "MaxCapacity": 8
}
```

### 为 Aurora 数据库集群定义扩展策略
<a name="Aurora.Integrating.AutoScaling.AddCode.DefineScalingPolicy"></a>

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

 可以使用以下选项定义目标跟踪扩展策略配置。

**Topics**
+ [使用预定义的指标](#Aurora.Integrating.AutoScaling.AddCode.DefineScalingPolicy.Predefined)
+ [使用自定义指标](#Aurora.Integrating.AutoScaling.AddCode.DefineScalingPolicy.Custom)
+ [使用冷却时间](#Aurora.Integrating.AutoScaling.AddCode.DefineScalingPolicy.Cooldown)
+ [禁用缩减活动](#Aurora.Integrating.AutoScaling.AddCode.DefineScalingPolicy.ScaleIn)

#### 使用预定义的指标
<a name="Aurora.Integrating.AutoScaling.AddCode.DefineScalingPolicy.Predefined"></a>

通过使用预定义的指标，您可以快速为 Aurora 数据库集群定义目标跟踪扩展策略，它非常适合 Aurora Auto Scaling 中的目标跟踪和动态扩展。

目前，Aurora 在 Aurora Auto Scaling 中支持以下预定义指标：
+ **RDSReaderAverageCPUUtilization** – CloudWatch 中的 `CPUUtilization` 指标在 Aurora 数据库集群的所有 Aurora 副本中的平均值。
+ **RDSReaderAverageDatabaseConnections** – CloudWatch 中的 `DatabaseConnections` 指标在 Aurora 数据库集群的所有 Aurora 副本中的平均值。

有关 `CPUUtilization` 和 `DatabaseConnections` 指标的更多信息，请参阅[Amazon Aurora 的 Amazon CloudWatch 指标](Aurora.AuroraMonitoring.Metrics.md)。

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

**Example**  
以下示例说明了 Aurora 数据库集群的典型目标跟踪扩展策略配置。在该配置中，`RDSReaderAverageCPUUtilization` 预定义指标用于根据所有 Aurora 副本中的平均 CPU 使用率 40% 调整 Aurora 数据库集群。  

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

#### 使用自定义指标
<a name="Aurora.Integrating.AutoScaling.AddCode.DefineScalingPolicy.Custom"></a>

通过使用自定义指标，您可以定义满足您的自定义要求的目标跟踪扩展策略。您可以根据随扩展按比例变化的任何 Aurora 指标定义一个自定义指标。

并非所有 Aurora 指标都适用于目标跟踪。指标必须是有效的使用率指标，它用于描述实例的繁忙程度。指标值必须随 Aurora 数据库集群中的 Aurora 副本数按比例增加或减少。要使用指标数据按比例扩展或缩减 Aurora 副本数，必须按比例进行这种增加或减少。

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

```
{
    "TargetValue": 50,
    "CustomizedMetricSpecification":
    {
        "MetricName": "CPUUtilization",
        "Namespace": "AWS/RDS",
        "Dimensions": [
            {"Name": "DBClusterIdentifier","Value": "my-db-cluster"},
            {"Name": "Role","Value": "READER"}
        ],
        "Statistic": "Average",
        "Unit": "Percent"
    }
}
```

#### 使用冷却时间
<a name="Aurora.Integrating.AutoScaling.AddCode.DefineScalingPolicy.Cooldown"></a>

您可以为 `ScaleOutCooldown` 指定一个值（秒）以添加扩展 Aurora 数据库集群的冷却时间。同样，您可以为 `ScaleInCooldown` 添加一个值（秒）以添加缩减 Aurora 数据库集群的冷却时间。有关 `ScaleInCooldown` 和 `ScaleOutCooldown` 的更多信息，请参阅 *Application Auto Scaling API 参考* 中的 [https://docs.amazonaws.cn/ApplicationAutoScaling/latest/APIReference/API_TargetTrackingScalingPolicyConfiguration.html](https://docs.amazonaws.cn/ApplicationAutoScaling/latest/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

**Example**  
以下示例说明了扩展策略的目标跟踪配置。在此配置中，`RDSReaderAverageCPUUtilization` 预定义指标用于根据 Aurora 数据库集群中所有 Aurora 副本上 40% 的平均 CPU 利用率来调整该 Aurora 数据库集群。该配置将缩减冷却时间指定为 10 分钟，并将扩展冷却时间指定为 5 分钟。  

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

#### 禁用缩减活动
<a name="Aurora.Integrating.AutoScaling.AddCode.DefineScalingPolicy.ScaleIn"></a>

您可以禁用缩减活动以禁止目标跟踪扩展策略配置缩减 Aurora 数据库集群。禁用缩减活动将禁止扩展策略删除 Aurora 副本，同时仍允许扩展策略根据需要创建副本。

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

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

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

### 为 Aurora 数据库集群应用扩展策略
<a name="Aurora.Integrating.AutoScaling.AddCode.ApplyScalingPolicy"></a>

在 Application Auto Scaling 中注册 Aurora 数据库集群并定义扩展策略后，您可以将扩展策略应用于注册的 Aurora 数据库集群。要将扩展策略应用于 Aurora 数据库集群，您可以使用 Amazon CLI 或 Application Auto Scaling API。

#### Amazon CLI
<a name="Aurora.Integrating.AutoScaling.AddCode.ApplyScalingPolicy.CLI"></a>

要将扩展策略应用于 Aurora 数据库集群，请使用具有以下参数的 [https://docs.amazonaws.cn/cli/latest/reference/application-autoscaling/put-scaling-policy.html](https://docs.amazonaws.cn/cli/latest/reference/application-autoscaling/put-scaling-policy.html) Amazon CLI 命令：
+ `--policy-name` – 扩展策略的名称。
+ `--policy-type` – 将该值设置为 `TargetTrackingScaling`。
+ `--resource-id` – Aurora 数据库集群的资源标识符。对于该参数，资源类型为 `cluster`，唯一标识符为 Aurora 数据库集群的名称，例如，`cluster:myscalablecluster`。
+ `--service-namespace` – 将该值设置为 `rds`。
+ `--scalable-dimension` – 将该值设置为 `rds:cluster:ReadReplicaCount`。
+ `--target-tracking-scaling-policy-configuration` – 用于 Aurora 数据库集群的目标跟踪扩展策略配置。

**Example**  
在以下示例中，您使用 Application Auto Scaling 将名为 `myscalablepolicy` 的目标跟踪扩展策略应用于名为 `myscalablecluster` 的 Aurora 数据库集群。为此，请使用在名为 `config.json` 的文件中保存的策略配置。  
对于 Linux、macOS 或 Unix：  

```
aws application-autoscaling put-scaling-policy \
    --policy-name myscalablepolicy \
    --policy-type TargetTrackingScaling \
    --resource-id cluster:myscalablecluster \
    --service-namespace rds \
    --scalable-dimension rds:cluster:ReadReplicaCount \
    --target-tracking-scaling-policy-configuration file://config.json
```
对于：Windows  

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

#### Application Auto Scaling API
<a name="Aurora.Integrating.AutoScaling.AddCode.ApplyScalingPolicy.API"></a>

要使用 Application Auto Scaling API 将扩展策略应用于 Aurora 数据库集群，请使用具有以下参数的 [https://docs.amazonaws.cn/ApplicationAutoScaling/latest/APIReference/API_PutScalingPolicy.html](https://docs.amazonaws.cn/ApplicationAutoScaling/latest/APIReference/API_PutScalingPolicy.html) Application Auto Scaling API 操作：
+ `PolicyName` – 扩展策略的名称。
+ `ServiceNamespace` – 将该值设置为 `rds`。
+ `ResourceID` – Aurora 数据库集群的资源标识符。对于该参数，资源类型为 `cluster`，唯一标识符为 Aurora 数据库集群的名称，例如，`cluster:myscalablecluster`。
+ `ScalableDimension` – 将该值设置为 `rds:cluster:ReadReplicaCount`。
+ `PolicyType` – 将该值设置为 `TargetTrackingScaling`。
+ `TargetTrackingScalingPolicyConfiguration` – 用于 Aurora 数据库集群的目标跟踪扩展策略配置。

**Example**  
在以下示例中，您使用 Application Auto Scaling 将名为 `myscalablepolicy` 的目标跟踪扩展策略应用于名为 `myscalablecluster` 的 Aurora 数据库集群。您使用的策略配置基于 `RDSReaderAverageCPUUtilization` 预定义指标。  

```
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": "rds",
    "ResourceId": "cluster:myscalablecluster",
    "ScalableDimension": "rds:cluster:ReadReplicaCount",
    "PolicyType": "TargetTrackingScaling",
    "TargetTrackingScalingPolicyConfiguration": {
        "TargetValue": 40.0,
        "PredefinedMetricSpecification":
        {
            "PredefinedMetricType": "RDSReaderAverageCPUUtilization"
        }
    }
}
```