ALIYUN::SAE::ApplicationScalingRule

ALIYUN::SAE::ApplicationScalingRule类型用于创建应用弹性伸缩策略。

语法

{
  "Type": "ALIYUN::SAE::ApplicationScalingRule",
  "Properties": {
    "AppId": String,
    "ScalingRuleName": String,
    "ScalingRuleType": String,
    "MinReadyInstances": Integer,
    "MinReadyInstanceRatio": Integer,
    "ScalingRuleMetric": Map,
    "ScalingRuleTimer": Map,
    "ScalingRuleEnable": Boolean
  }
}

属性

属性名称

类型

必须

允许更新

描述

约束

AppId

String

应用 ID。

ScalingRuleName

String

自定义的弹性伸缩策略名。

应用内,策略名称不可重复,必须以小写字母开头,仅可包含小写字母、数字及短划线(-),不超过 32 个字符。

ScalingRuleType

String

弹性伸缩策略类型。

取值:

  • timing:定时弹性。

  • metric:监控指标弹性。

  • mix:混合弹性。

说明

如果选择定时弹性,ScalingRuleTimer 字段为必填项。

如果选择监控指标弹性,ScalingRuleMetric 字段为必填项。

如果选择混合弹性,ScalingRuleMetric 字段为必填项,ScalingRuleTimer 字段和 ScalingRuleMetric 字段也可以按需同时填写。

MinReadyInstances

Integer

最小存活实例数。

取值说明如下:

  • 如果设置为0,应用在升级过程中将会中断业务。

  • 如果设置为**-1**,最小存活实例数将使用系统推荐值,即取现有实例数的 25%。如果当前为 5 个实例,5×25%=1.25,向上取整后,最小存活实例数为 2。

说明

每次滚动部署最小存活的实例数建议≥1,保证业务不中断。

MinReadyInstanceRatio

Integer

最小存活实例数百分比。

取值说明如下:

  • -1:初始化值,表示不采用百分比。

  • 0~100:单位为百分比,向上取整。例如设置为 50%,如果当前为 5 个实例,则最小存活实例数为 3。

说明

MinReadyInstanceMinReadyInstanceRatio同时传递时,且MinReadyInstanceRatio的取值非**-1**时,以MinReadyInstanceRatio参数为准。假设MinReadyInstances取值为5MinReadyInstanceRatio取值为50,则会用50来计算最小存活实例数。

ScalingRuleMetric

Map

监控指标弹性策略的配置。

当您选择监控指标弹性策略设置时,该参数必选。

参数说明如下:

  • maxReplicas:应用最大实例数。

  • minReplicas:应用最小实例数。

  • metricType:监控指标触发条件。

    • CPU:CPU 使用率。

    • MEMORY:内存使用率。

    • QPS:JAVA 应用 1 分钟内单个实例的平均 QPS。

    • RT:JAVA 应用 1 分钟内应用所有服务接口平均 RT 值。

    • tcpActiveConn:30 秒内单个实例的平均 TCP 活跃连接数。

    • SLB_QPS:15 秒内单个实例的平均公网 SLB QPS。

    • SLB_RT:15 秒内公网 SLB 平均响应时间。

    • INTRANET_SLB_QPS:15 秒内单个实例的平均私网 SLB QPS。

    • INTRANET_SLB_RT:15 秒内私网 SLB 平均响应时间。

  • metricTargetAverageUtilization:根据不同的metricType,设置对应的监控指标的目标值。

    • CPU 使用率目标值,单位为百分比。

    • 内存使用率目标值,单位为百分比。

    • QPS,单位为秒。

    • 响应时间,单位为毫秒。

    • TCP 活跃连接数平均值,单位为个/秒。

    • 公网 SLB QPS,单位为秒。

    • 公网 SLB 响应时间,单位为毫秒。

    • 私网 SLB QPS,单位为秒。

    • 私网 SLB 响应时间,单位为毫秒。

  • slbId:SLB ID。

  • slbProject:日志服务 Project。

  • slbLogstore:日志服务 Logstore。

  • vport:SLB 监听端口,支持 HTTP 协议和 HTTPS 协议。

  • scaleUpRules:应用扩容规则。

  • scaleDownRules:应用缩容规则。

  • step:弹性扩容或缩容步长。单位时间内最多扩容或缩容的实例数。

  • disabled:是否禁止缩容。开启后将永远不会缩容该应用的实例,能有效防止在流量高峰期缩容造成业务风险。

    • true:开启。

    • false:关闭。默认值。

  • stabilizationWindowSeconds:扩容或缩容的冷却时间。取值范围[0, 3600],单位为秒。默认为 0 秒。

说明

您可以选择设置一个或多个监控指标。当设置多个监控指标时,只要任何一个指标大于或者等于目标值,则应用进行扩容,扩容后实例数不高于应用最大实例数;如果所有指标均小于目标值,则应用进行缩容,缩容后实例数不低于应用最小实例数。

ScalingRuleTimer

Map

定时弹性策略的配置。

当您选择定时弹性策略或使用 SDK 设置时,该参数必选。

参数说明如下:

  • beginDateendDatebeginDate为起始日期,endDate为结束日期,用于配置定时弹性伸缩策略的时间。取值说明如下:

    • 当取值均为null时,表示长期执行,为默认值。

    • 当取值为具体日期时,例如beginDate2021-03-25endDate2021-04-25,表示执行有效期为 1 个月。

  • period:执行定时弹性伸缩策略的周期。取值说明如下:

    • * * *:每天指定时间执行定时策略。

    • * * Fri,Mon:每周指定天数的指定时间执行定时策略,支持多选,GMT+8 时区。取值说明如下:

      • Sun:星期日

      • Mon:星期一

      • Tue:星期二

      • Wed:星期三

      • Thu:星期四

      • Fri:星期五

      • Sat:星期六

    • 1,2,3,28,31 * *:每月指定日期的指定时间执行定时策略,支持多选。取值范围[1,31]。若当月无 31 日,则跳过该日期执行定时策略。

  • schedules:弹性伸缩策略触发的时间,以及该时间段内需要保持的应用实例数。最多支持 20 个时间点。参数说明如下:

    • atTime:触发时间点。支持格式时:分,例如08:00

    • targetReplicas:该参数可以指定应用的实例数,也可以是每次部署最小存活的实例数。取值范围[1,50]。

说明

每次滚动部署最小存活的实例数建议大于等于1,保证业务不中断。如果设置为0,应用在升级过程中将会中断业务。

ScalingRuleEnable

Boolean

是否启用弹性伸缩策略。

取值说明如下:

  • true:启用状态。

  • false:禁用状态。

ScalingRuleMetric语法

"ScalingRuleMetric": {
  "Metrics": List,
  "MinReplicas": Integer,
  "MaxReplicas": Integer,
  "ScaleDownRules": Map,
  "ScaleUpRules": Map
}

ScalingRuleMetric属性

属性名称

类型

必须

允许更新

描述

约束

Metrics

List

监控指标弹性伸缩列表。

MinReplicas

Integer

最小实例数。

MaxReplicas

Integer

最大实例数。

ScaleDownRules

Map

应用缩容规则。

ScaleUpRules

Map

应用扩容规则。

Metrics语法

"Metrics": [
  {
    "SlbId": String,
    "MetricType": String,
    "Vport": String,
    "SlbLogstore": String,
    "SlbProject": String,
    "MetricTargetAverageUtilization": Integer
  }
]

Metrics属性

属性名称

类型

必须

允许更新

描述

约束

MetricType

String

监控指标触发条件。

取值说明如下:

  • CPU:CPU 使用率。

  • MEMORY:内存使用率。

  • QPS:JAVA 应用 1 分钟内单个实例的平均 QPS。

  • RT:JAVA 应用 1 分钟内应用所有服务接口平均 RT 值。

  • tcpActiveConn:30 秒内单个实例的平均 TCP 活跃连接数。

  • SLB_QPS:15 秒内单个实例的平均公网 SLB QPS。

  • SLB_RT:15 秒内公网 SLB 平均响应时间。

  • INTRANET_SLB_QPS:15 秒内单个实例的平均私网 SLB QPS。

  • INTRANET_SLB_RT:15 秒内私网 SLB 平均响应时间。

MetricTargetAverageUtilization

Integer

监控指标的目标值。

  • CPU 使用率目标值,单位为百分比。

  • 内存使用率目标值,单位为百分比。

  • QPS,单位为秒。

  • 响应时间,单位为毫秒。

  • TCP 活跃连接数平均值,单位为个/秒。

  • 公网 SLB QPS,单位为秒。

  • 公网 SLB 响应时间,单位为毫秒。

  • 私网 SLB QPS,单位为秒。

  • 私网 SLB 响应时间,单位为毫秒。

SlbId

String

SLB 实例 ID。

SlbLogstore

String

日志服务 Logstore。

SlbProject

String

日志服务 Project。

Vport

String

SLB 监听端口,支持 HTTP 协议和 HTTPS 协议。

ScaleDownRules语法

"ScaleDownRules": {
  "Step": String,
  "StabilizationWindowSeconds": Integer,
  "Disabled": Boolean
}

ScaleDownRules属性

属性名称

类型

必须

允许更新

描述

约束

Step

String

弹性扩容或缩容步长。

单位时间内最多扩容或缩容的实例数。

Disabled

Boolean

是否禁止缩容。

开启后将永远不会缩容该应用的实例,能有效防止在流量高峰期缩容造成业务风险。

取值:

  • true:开启。

  • false:关闭。默认值。

StabilizationWindowSeconds

Integer

扩容或缩容的冷却时间。

取值范围[0, 3600],单位为秒。默认为 0 秒。

ScaleUpRules语法

"ScaleUpRules": {
  "Step": String,
  "StabilizationWindowSeconds": Integer,
  "Disabled": Boolean
}

ScaleUpRules属性

属性名称

类型

必须

允许更新

描述

约束

Step

String

弹性扩容步长。

单位时间内最多扩容或缩容的实例数。

Disabled

Boolean

是否禁止扩容。

开启后将永远不会扩容该应用的实例,能有效防止在流量高峰期扩容造成业务风险。

StabilizationWindowSeconds

Integer

扩容或缩容的冷却时间。

取值范围[0, 3600],单位为秒。默认为 0 秒。

ScalingRuleTimer语法

"ScalingRuleTimer": {
  "Schedules": List,
  "Period": String,
  "EndDate": String,
  "BeginDate": String
}

ScalingRuleTimer属性

属性名称

类型

必须

允许更新

描述

约束

Period

String

执行定时弹性伸缩策略的周期。

取值说明如下:

  • * * *:每天指定时间执行定时策略。

  • * * Fri,Mon:每周指定天数的指定时间执行定时策略,支持多选,GMT+8 时区。取值说明如下:

    • Sun:星期日

    • Mon:星期一

    • Tue:星期二

    • Wed:星期三

    • Thu:星期四

    • Fri:星期五

    • Sat:星期六

  • 1,2,3,28,31 * *:每月指定日期的指定时间执行定时策略,支持多选。取值范围[1,31]。若当月无 31 日,则跳过该日期执行定时策略。

Schedules

List

单天内触发时间点。

无。

BeginDate

String

定时弹性伸缩策略的短期起始日期。

  • BeginDateEndDate取值均为null时,表示长期执行,为默认值。

  • 当取值为具体日期时,例如BeginDate为 2021-03-25,EndDate为 2021-04-25,表示执行有效期为 1 个月。

EndDate

String

定时弹性伸缩策略的短期结束日期。

  • BeginDateEndDate取值均为null时,表示长期执行,为默认值。

  • 当取值为具体日期时,例如BeginDate为 2021-03-25,EndDate为 2021-04-25,表示执行有效期为 1 个月。

Schedules语法

"Schedules": [
  {
    "TargetReplicas": Integer,
    "AtTime": String
  }
]

Schedules属性

属性名称

类型

必须

允许更新

描述

约束

AtTime

String

触发时间点。

TargetReplicas

Integer

该参数可以指定应用的实例数,也可以是每次部署最小存活的实例数。

取值范围[1,50]。

返回值

Fn::GetAtt

ScalingRuleName:自定义的弹性伸缩策略名。

示例

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  ScalingRuleName:
    Type: String
    Description:
      en: The name of the auto scaling policy. The name must start with a lowercase letter, and can contain lowercase letters, digits, and hyphens (-).The name must be 1 to 32 characters in length.
    AllowedPattern: ^[a-z][a-z0-9-]{0,31}$
    Required: true
  AppId:
    Type: String
    Description:
      en: The ID of the application.
    Required: true
  ScalingRuleType:
    Type: String
    Description:
      en: 'The type of the auto scaling policy. Valid values: timer: Timed scaling. metric: Custom metric scaling.mix: mix scaling'
    AllowedValues:
      - timing
      - metric
      - mix
    Required: true
Resources:
  ApplicationScalingRule:
    Type: ALIYUN::SAE::ApplicationScalingRule
    Properties:
      ScalingRuleName:
        Ref: ScalingRuleName
      AppId:
        Ref: AppId
      ScalingRuleType:
        Ref: ScalingRuleType
Outputs:
  ScalingRuleName:
    Description: The name of the scaling rule.
    Value:
      Fn::GetAtt:
        - ApplicationScalingRule
        - ScalingRuleName
{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Parameters": {
    "ScalingRuleName": {
      "Type": "String",
      "Description": {
        "en": "The name of the auto scaling policy. The name must start with a lowercase letter, and can contain lowercase letters, digits, and hyphens (-).The name must be 1 to 32 characters in length."
      },
      "AllowedPattern": "^[a-z][a-z0-9-]{0,31}$",
      "Required": true
    },
    "AppId": {
      "Type": "String",
      "Description": {
        "en": "The ID of the application."
      },
      "Required": true
    },
    "ScalingRuleType": {
      "Type": "String",
      "Description": {
        "en": "The type of the auto scaling policy. Valid values: timer: Timed scaling. metric: Custom metric scaling.mix: mix scaling"
      },
      "AllowedValues": [
        "timing",
        "metric",
        "mix"
      ],
      "Required": true
    }
  },
  "Resources": {
    "ApplicationScalingRule": {
      "Type": "ALIYUN::SAE::ApplicationScalingRule",
      "Properties": {
        "ScalingRuleName": {
          "Ref": "ScalingRuleName"
        },
        "AppId": {
          "Ref": "AppId"
        },
        "ScalingRuleType": {
          "Ref": "ScalingRuleType"
        }
      }
    }
  },
  "Outputs": {
    "ScalingRuleName": {
      "Description": "The name of the scaling rule.",
      "Value": {
        "Fn::GetAtt": [
          "ApplicationScalingRule",
          "ScalingRuleName"
        ]
      }
    }
  }
}