创建应用弹性伸缩策略。

使用须知

  • 您最多可以为1个应用创建5条弹性策略。
  • 您最多可以为1条定时弹性策略,创建20条单天内触发时间点。
  • 弹性策略启用时,请勿手动执行应用生命周期管理操作,例如应用扩缩容、部署应用、更改规格、重启应用或停止应用。如果您需要对应用执行该类操作,请停用弹性策略后,再手动执行操作。
  • 如果当前应用处于扩容、缩容、部署(单批、分批或灰度)、更改规格、重启或停止等过程中,该应用暂时无法添加或者启动弹性策略。
  • 如果单个应用需要弹出超过50个实例,请联系SAE技术支持并申请白名单。更多信息,请参见联系我们

调试

您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。

请求头

该接口使用公共请求头,无特殊请求头。更多信息,请参见公共请求和返回头

请求语法

POST /pop/v1/sam/scale/applicationScalingRule HTTP/1.1

请求参数

名称 类型 位置 是否必选 示例值 描述
AppId String Query 7171a6ca-d1cd-4928-8642-7d5cfe69****

应用ID。

ScalingRuleName String Query timer-0800-2100

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

说明 弹性伸缩策略创建成功后,不可修改策略名。
ScalingRuleType String Query timing

弹性伸缩策略类型。取值说明如下:

  • timing:定时弹性。
  • metric:监控指标弹性。
ScalingRuleTimer String Query {"beginDate":null,"endDate":null,"period":"* * *","schedules":[{"atTime":"08:00","targetReplicas":10},{"atTime":"20:00","targetReplicas":3}]}

定时弹性策略的配置。当您选择定时弹性策略或使用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,应用在升级过程中将会中断业务。
ScalingRuleMetric String Query {"maxReplicas":3,"minReplicas":1,"metrics":[{"metricType":"CPU","metricTargetAverageUtilization":20},{"metricType":"MEMORY","metricTargetAverageUtilization":30},{"metricType":"tcpActiveConn","metricTargetAverageUtilization":20},{"metricType":"SLB_QPS","MetricTargetAverageUtilization":25,"slbId":"lb-xxx","slbProject":"aliyun-fc-cn-hangzhou-d95881d9-5d3c-5f26-a6b8-************","slbLogstore":"function-log","vport":"80"},{"metricType":"SLB_RT","MetricTargetAverageUtilization":35,"slbId":"lb-xxx","slbProject":"aliyun-fc-cn-hangzhou-d95881d9-5d3c-5f26-a6b8-************","slbLogstore":"function-log","vport":"80"}],"scaleUpRules":{"step":"100","disabled":false,"stabilizationWindowSeconds":0},"scaleDownRules":{"step":"100","disabled":false,"stabilizationWindowSeconds":300}}

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

参数说明如下:

  • 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秒。
说明 您可以选择设置一个或多个监控指标。当设置多个监控指标时,只要任何一个指标大于或者等于目标值,则应用进行扩容,扩容后实例数不高于应用最大实例数;如果所有指标均小于目标值,则应用进行缩容,缩容后实例数不低于应用最小实例数。
MinReadyInstances Integer Query 3

最小存活实例数。取值说明如下:

  • 如果设置为0,应用在升级过程中将会中断业务。
  • 如果设置为-1,最小存活实例数将使用系统推荐值,即取现有实例数的25%。如果当前为5个实例,5×25%=1.25,向上取整后,最小存活实例数为2。
说明 每次滚动部署最小存活的实例数建议≥1,保证业务不中断。
MinReadyInstanceRatio Integer Query -1

最小存活实例数百分比。取值说明如下:

  • -1:初始化值,表示不采用百分比。
  • 0~100:单位为百分比,向上取整。例如设置为50%,如果当前为5个实例,则最小存活实例数为3。
说明MinReadyInstanceMinReadyInstanceRatio同时传递时,且MinReadyInstanceRatio的取值非-1时,以MinReadyInstanceRatio参数为准。假设MinReadyInstances取值为5MinReadyInstanceRatio取值为50,则会用50来计算最小存活实例数。
ScalingRuleEnable Boolean Query true

是否启用弹性伸缩策略。取值说明如下:

  • true:启用状态。
  • false:禁用状态。

返回数据

名称 类型 示例值 描述
RequestId String 91F93257-7A4A-4BD3-9A7E-2F6EAE6D****

请求ID。

TraceId String 0a98a02315955564772843261e****

调用链ID,用于精确查询调用信息。

Data Object

返回结果。

Timer Object

定时弹性伸缩。

EndDate String 2021-04-25

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

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

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

  • BeginDateEndDate取值均为null时,表示长期执行,为默认值。
  • 当取值为具体日期时,例如BeginDate为2021-03-25,EndDate为2021-04-25,表示执行有效期为1个月。
Schedules Array of Schedule

单天内触发时间点。

AtTime String 08:00

时间点。格式:时:分

TargetReplicas Integer 3

目标实例数。

MaxReplicas Integer 10

最大实例数。

MinReplicas Integer 5

最小实例数。

Period String * * *

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

  • * * *:每天指定时间执行定时策略。
  • * * Fri,Mon:每周指定天数的指定时间执行定时策略,支持多选,GMT+8时区。取值说明如下:
    • Sun:星期日
    • Mon:星期一
    • Tue:星期二
    • Wed:星期三
    • Thu:星期四
    • Fri:星期五
    • Sat:星期六
  • 1,2,3,28,31 * *:每月指定日期的指定时间执行定时策略,支持多选。取值范围[1,31]。若当月无31日,则跳过该日期执行定时策略。
UpdateTime Long 1616642248938

弹性伸缩策略的更新时间。单位:毫秒。

AppId String 7171a6ca-d1cd-4928-8642-7d5cfe69****

应用ID。

CreateTime Long 1616642248938

弹性伸缩策略的创建时间。单位:毫秒。

LastDisableTime Long 1641882854484

最近一次禁用弹性伸缩策略的时间。

ScaleRuleEnabled Boolean true

是否启用弹性伸缩策略。取值说明如下:

  • true:启用状态。
  • false:禁用状态。
ScaleRuleType String timing

弹性伸缩策略类型。取值说明如下:

  • timing:定时弹性。
  • metric:监控指标弹性。
  • mix:混合弹性。
Metric Object

监控指标弹性伸缩。

Metrics Array of Metric

监控指标弹性伸缩列表。

MetricTargetAverageUtilization Integer 20

监控指标的目标值。

  • CPU使用率目标值,单位为百分比。
  • 内存使用率目标值,单位为百分比。
  • QPS,单位为秒。
  • 响应时间,单位为毫秒。
  • TCP活跃连接数平均值,单位为个/秒。
  • 公网SLB QPS,单位为秒。
  • 公网SLB响应时间,单位为毫秒。
  • 私网SLB QPS,单位为秒。
  • 私网SLB响应时间,单位为毫秒。
MetricType String CPU

监控指标触发条件。取值说明如下:

  • 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平均响应时间。
SlbProject String test

SLB访问日志Project。

SlbLogstore String test

SLB访问日志Logstore。

Vport String 80

SLB端口。

SlbId String lb-xxx

SLB实例ID。

MaxReplicas Integer 3

最大实例数。

MinReplicas Integer 1

最小实例数。

ScaleRuleName String test

弹性伸缩策略的名称。

Message String success

附加信息。取值说明如下:

  • 请求正常,返回success
  • 请求异常,返回具体异常错误码。
ErrorCode String

错误码。取值说明如下:

  • 请求成功:不返回ErrorCode字段。
  • 请求失败:返回ErrorCode字段。具体信息,请参见本文的错误码列表。
Code String 200

接口状态或POP错误码。取值说明如下:

  • 2xx:成功。
  • 3xx:重定向。
  • 4xx:请求错误。
  • 5xx:服务器错误。
Success Boolean true

重启应用实例是否成功。取值说明如下:

  • true:重启成功。
  • false:重启失败。

示例

请求示例

POST /pop/v1/sam/scale/applicationScalingRule?AppId=7171a6ca-d1cd-4928-8642-7d5cfe69****&ScalingRuleName=timer-0800-2100&ScalingRuleType=timing&ScalingRuleTimer={"beginDate":null,"endDate":null,"period":"* * *","schedules":[{"atTime":"08:00","targetReplicas":10},{"atTime":"20:00","targetReplicas":3}]}&ScalingRuleMetric={"maxReplicas":3,"minReplicas":1,"metrics":[{"metricType":"CPU","metricTargetAverageUtilization":20},{"metricType":"MEMORY","metricTargetAverageUtilization":30},{"metricType":"tcpActiveConn","metricTargetAverageUtilization":20},{"metricType":"SLB_QPS","MetricTargetAverageUtilization":25,"slbId":"lb-xxx","slbProject":"aliyun-fc-cn-hangzhou-d95881d9-5d3c-5f26-a6b8-************","slbLogstore":"function-log","Vport":"80"},{"metricType":"SLB_RT","MetricTargetAverageUtilization":35,"slbId":"lb-xxx","slbProject":"aliyun-fc-cn-hangzhou-d95881d9-5d3c-5f26-a6b8-************","slbLogstore":"function-log","Vport":"80"}],"scaleUpRules":{"step":"100","disabled":false,"stabilizationWindowSeconds":0},"scaleDownRules":{"step":"100","disabled":false,"stabilizationWindowSeconds":300}}&MinReadyInstances=3&MinReadyInstanceRatio=-1&ScalingRuleEnable=true HTTP/1.1
Host:sae.aliyuncs.com
Content-Type:application/json

正常返回示例

XML格式

HTTP/1.1 200 OK
Content-Type:application/xml

<CreateApplicationScalingRuleResponse>
    <RequestId>91F93257-7A4A-4BD3-9A7E-2F6EAE6D****</RequestId>
    <TraceId>0a98a02315955564772843261e****</TraceId>
    <Data>
        <Timer>
            <EndDate>2021-04-25</EndDate>
            <BeginDate>2021-03-25</BeginDate>
            <Schedules>
                <AtTime>08:00</AtTime>
                <TargetReplicas>3</TargetReplicas>
                <MaxReplicas>10</MaxReplicas>
                <MinReplicas>5</MinReplicas>
            </Schedules>
            <Period>* * *</Period>
        </Timer>
        <UpdateTime>1616642248938</UpdateTime>
        <AppId>7171a6ca-d1cd-4928-8642-7d5cfe69****</AppId>
        <CreateTime>1616642248938</CreateTime>
        <LastDisableTime>1641882854484</LastDisableTime>
        <ScaleRuleEnabled>true</ScaleRuleEnabled>
        <ScaleRuleType>timing</ScaleRuleType>
        <Metric>
            <Metrics>
                <MetricTargetAverageUtilization>20</MetricTargetAverageUtilization>
                <MetricType>CPU</MetricType>
                <SlbProject>test</SlbProject>
                <SlbLogstore>test</SlbLogstore>
                <Vport>80</Vport>
                <SlbId>lb-xxx</SlbId>
            </Metrics>
            <MaxReplicas>3</MaxReplicas>
            <MinReplicas>1</MinReplicas>
        </Metric>
        <ScaleRuleName>test</ScaleRuleName>
    </Data>
    <Message>success</Message>
    <Code>200</Code>
    <Success>true</Success>
</CreateApplicationScalingRuleResponse>

JSON格式

HTTP/1.1 200 OK
Content-Type:application/json

{
  "RequestId" : "91F93257-7A4A-4BD3-9A7E-2F6EAE6D****",
  "TraceId" : "0a98a02315955564772843261e****",
  "Data" : {
    "Timer" : {
      "EndDate" : "2021-04-25",
      "BeginDate" : "2021-03-25",
      "Schedules" : [ {
        "AtTime" : "08:00",
        "TargetReplicas" : 3,
        "MaxReplicas" : 10,
        "MinReplicas" : 5
      } ],
      "Period" : "* * *"
    },
    "UpdateTime" : 1616642248938,
    "AppId" : "7171a6ca-d1cd-4928-8642-7d5cfe69****",
    "CreateTime" : 1616642248938,
    "LastDisableTime" : 1641882854484,
    "ScaleRuleEnabled" : true,
    "ScaleRuleType" : "timing",
    "Metric" : {
      "Metrics" : [ {
        "MetricTargetAverageUtilization" : 20,
        "MetricType" : "CPU",
        "SlbProject" : "test",
        "SlbLogstore" : "test",
        "Vport" : "80",
        "SlbId" : "lb-xxx"
      } ],
      "MaxReplicas" : 3,
      "MinReplicas" : 1
    },
    "ScaleRuleName" : "test"
  },
  "Message" : "success",
  "Code" : "200",
  "Success" : true
}

错误码

HttpCode 错误码 错误信息 描述
400 InstanceExist.ScalingRuleName The specified ScalingRuleName already exists. 指定的弹性策略名称已存在。
400 InvalidScalingRuleDate.BeginAfterEnd The specified beginning time is later than the ending time. 指定的开始时间晚于结束时间。
400 InvalidScalingRuleDate.Format The specified date is invalid. 指定的日期不合法。正确的格式为yyyy-MM-dd。
400 InvalidScalingRuleName.NotFound The specified ScalingRuleName does not exist. 指定的ScalingRuleName不存在。
400 InvalidScalingRuleTime.Conflict The specified scaling rule time is invalid. Another schedule has been set for the specified time range. Please set a different time. 指定的弹性策略时间无效。该时间段已设置过定时策略,请重新选择时间设置。
400 InvalidScalingRuleTime.Format The specified time is invalid. 指定的时间不合法。正确的格式为HH:mm。
400 QuotaExceeded.ScalingRule The maximum number of application scaling rules is exceeded. 应用弹性策略数量到达上限。
400 QuotaExceeded.ScalingRuleTime The maximum number of scaling policy trigger time is exceeded. 弹性策略触发时间到达上限。
400 NoComputeResourceQuota.App.Exceed You can create %s instances for each application. Please submit a ticket to raise the quota. 每个应用只允许创建%s个实例,请加入钉群32874633联系技术产品专家进行咨询。
400 NoComputeResourceQuota.User.Exceed Your account is limited to create %s instances. Please submit a ticket to raise the quota. 您的账户限额%s个实例,请加入钉群32874633联系技术产品专家进行咨询。
400 System.Upgrading The system is being upgraded. Please try again later. 系统正在升级,请稍后操作。
400 OperationDenied.SDKNotSupported Metrics is not supported in SDK SDK未开放指标弹性规则。
400 MinReadyInstances.Not.Smaller.Replicas The minimum number of available instances must be less than the number of application instances. 最小可用实例数必须小于应用实例数。
400 MinReadyInstanceRatio.Invalid The ratio of minimum available instances must be between 0 and 100. 最小存活实例数比例值必须在0~100之间。

访问错误中心查看更多错误码。