Todos os produtos
Search
Central de documentação

CloudOps Orchestration Service:ACS-ESS-AdjustScalingGroupInstanceCount

Última atualização: Jun 28, 2026

Ajuste o número de instâncias em um grupo de dimensionamento ou de nós em um pool de nós de cluster ACK ao criar e executar uma regra de dimensionamento.

Nome do modelo

ACS-ESS-AdjustScalingGroupInstanceCount

Executar agora

Descrição do modelo

Este modelo cria e executa uma regra para ajustar a quantidade de instâncias em um grupo de dimensionamento. Observação:

  • Caso o grupo de dimensionamento tenha um número esperado de instâncias configurado e a contagem real seja diferente, o Auto Scaling adicionará ou removerá instâncias automaticamente para atingir esse valor. Após a execução do modelo, visualize o resultado no console do Auto Scaling.

  • Após uma redução de escala, a quantidade de nós em um cluster ACK não pode ser inferior ao mínimo exigido pelos componentes. Caso contrário, o sistema retornará o código de erro IncorrectCapacity.

  • Antes de executar o modelo, confirme se o saldo da conta cobre o custo das novas instâncias. Se o saldo for insuficiente, o sistema retornará o código de erro InvalidAccountStatus.NotEnoughBalance.

  • Para expandir um grupo de dimensionamento implantado em várias zonas, defina o parâmetro AdjustmentCount como: Número de instâncias a adicionar por zona × Número de zonas.

  • Instâncias ECS adicionadas após uma expansão usam o método de faturamento pagamento conforme o uso. Modifique o método para assinatura conforme necessário. Para mais informações, consulte Alterar o método de faturamento de pagamento conforme o uso para assinatura.

  • Há dois métodos de redução de escala disponíveis: remova um número específico de instâncias ECS ao configurar o parâmetro AdjustmentCount ou exclua instâncias ECS específicas ao definir AdjustmentCount como 0 e escolha as instâncias desejadas.

  • A quantidade de instâncias removidas durante uma redução de escala não pode ser inferior ao número criado inicialmente para o grupo de dimensionamento.

O modelo também ajusta o número de nós em um pool de nós de cluster ACK. Para mais informações, consulte Criar e gerenciar pools de nós. Observação:

  • Leia o documento vinculado e conceda permissões à função AliyunOOSLifecycleHook4CSRole.

Tipo de modelo

Automatizado

Proprietário

Alibaba Cloud

Parâmetros de entrada

Parâmetro

Descrição

Tipo

Obrigatório

Valor padrão

Limite

resourceType

Tipo de recurso a ajustar.

String

Não

ESS

regionId

ID da região do grupo de dimensionamento.

String

Não

{{ ACS::RegionId }}

scalingGroupId

ID do grupo de dimensionamento.

String

Não

""

adjustmentType

Método de dimensionamento.

String

Não

ScaleOut

adjustmentCount

Quantidade de instâncias ECS a adicionar ou remover no grupo de dimensionamento.

Number

Não

0

instancesToBeRemoved

Instâncias ECS a remover do grupo de dimensionamento.

Json

Não

{'Type': 'ResourceIds', 'ResourceIds': [], 'RegionId': '{{ ACS::RegionId }}'}

clusterId

ID do cluster ACK.

String

Não

""

nodepoolId

ID do pool de nós.

String

Não

""

desiredSize

Número esperado de nós.

Number

Não

0

OOSAssumeRole

Função RAM assumida pelo CloudOps Orchestration Service (OOS).

String

Não

""

Parâmetros de saída

Parâmetro

Descrição

Tipo

adjustDetail

String

lifecycleHookOOSExecutionResult

String

Política necessária para executar o modelo

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "ecs:DescribeInstances"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "ess:CreateScalingRule",
                "ess:DeleteScalingRule",
                "ess:DescribeScalingActivities",
                "ess:DescribeScalingActivityDetail",
                "ess:ExecuteScalingRule",
                "ess:RemoveInstances"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "oos:ListExecutions"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "cs:DescribeClusterNodePoolDetail",
                "cs:ModifyClusterNodePool"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

Referências

ACS-ESS-AdjustScalingGroupInstanceCount

Conteúdo do modelo

FormatVersion: OOS-2019-06-01
Description:
  en: <p class="p">Adjust the number of instances in a scaling group by creating and executing scaling group rules. Description:</p>
    <ul class="ul">
    <li class="li">If the scaling group has been configured with the desired number of instances, when the number of instances in the scaling group is not equal to the expected number of instances, the auto scaling service will automatically scale to ensure that the number of instances in the scaling group is always maintained After the execution is complete, please go to the ESS console to view the adjustment results. </li>
    <li class="li">The number of cluster nodes after scaling down the nodes cannot be less than the minimum node requirements of the component, otherwise the scaling operation may return an error of code:IncorrectCapacity. </li>
    <li class="li">Please ensure that your account balance is greater than the cost of the newly purchased instance, otherwise an error of code:InvalidAccountStatus.NotEnoughBalance will be returned. </li>
    <li class="li">If it is multi-zone, please expand the multiple of the number of zones. </li>
    <li class="li">The payment method for the expanded ECS is pay-as-you-go. If necessary, customers need to Manual subcontracting yearly and monthly. </a></li>
    <li class="li"> There are two ways to scale down: scale down the specified number of ECS instances (<b>the number of ECS instance adjustments in the scaling group</b> is not 0), remove the specified ECS instances from the scaling group (<b>The number of ECS instance adjustments in the scaling group</b> is 0 and the ECS instances to be removed is selected)</li>
    <li class="li">The scaling cannot be less than the number initially opened in the scaling group. </li>
    </ul>
    <p class="p">Adjust the number of instances in a scaling group by creating and executing scaling group rules. Description:</p>
    <ul class="ul">
    <li class="li">Adjust ACK cluster node pool<a href='https://www.alibabacloud.com/help/en/ack/ack-edge/user-guide/create-a-node-pool?spm=a3c0i.23458820.2359477120.9.57186e9b4Ewe21'>Expected number of nodes</a>, please read the linked document carefully and authorize the role AliyunOOSLifecycleHook4CSRole. </li>
    </ul>
  name-en: Elastic Scaling
  categories:
    - elastic_manage
    - application_manage
    - computenest
Parameters:
  resourceType:
    Type: String
    Label:
      en: ResourceType
    AllowedValues:
      - ACK
      - ESS
    Default: ESS
  regionId:
    Type: String
    Label:
      en: RegionId
    AssociationProperty: RegionId
    Default: '{{ ACS::RegionId }}'
  scalingGroupId:
    Type: String
    Label:
      en: ScalingGroupId
    Default: ''
    AssociationProperty: ALIYUN::ESS::AutoScalingGroup::AutoScalingGroupId
    AssociationPropertyMetadata:
      RegionId: regionId
      Visible:
        Condition:
          Fn::Equals:
            - '${resourceType}'
            - ESS
  adjustmentType:
    Type: String
    Label:
      en: AdjustmentType
    AssociationPropertyMetadata:
      LocaleKey: ESSGroupAdjustmentType
      Visible:
        Condition:
          Fn::Equals:
            - '${resourceType}'
            - ESS
    AllowedValues:
      - ScaleOut
      - ScaleIn
      - TotalCapacity
    Default: ScaleOut
  adjustmentCount:
    Type: Number
    Label:
      en: AdjustmentCount
    MinValue: 0
    MaxValue: 100
    Default: 0
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Equals:
            - '${resourceType}'
            - ESS
  instancesToBeRemoved:
    Type: Json
    Label:
      en: RemovedInstances
    Default:
      Type: ResourceIds
      ResourceIds: []
      RegionId: '{{ ACS::RegionId }}'
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: ALIYUN::ECS::Instance
      RegionId: regionId
      Visible:
        Condition:
          Fn::And:
            - Fn::Equals:
                - '${resourceType}'
                - ESS
            - Fn::Equals:
                - '${adjustmentType}'
                - ScaleIn
            - Fn::Equals:
                - '${adjustmentCount}'
                - 0
  clusterId:
    Label:
      en: ClusterId
    Type: String
    Default: ''
    AssociationProperty: ALIYUN::CS::Cluster::ClusterId
    AssociationPropertyMetadata:
      RegionId: ${regionId}
      Visible:
        Condition:
          Fn::Equals:
            - '${resourceType}'
            - ACK
  nodepoolId:
    Label:
      en: NodepoolId
    Type: String
    Default: ''
    AssociationProperty: ALIYUN::CS::Cluster::ClusterNodePool
    AssociationPropertyMetadata:
      RegionId: ${regionId}
      ClusterId: ${clusterId}
      Visible:
        Condition:
          Fn::Equals:
            - '${resourceType}'
            - ACK
  desiredSize:
    Label:
      en: DesiredSize
    Type: Number
    MinValue: 0
    MaxValue: 100
    Default: 0
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Equals:
            - '${resourceType}'
            - ACK
  OOSAssumeRole:
    Label:
      en: OOSAssumeRole
    Type: String
    Default: ''
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: chooseNextTaskByResourceType
    Action: 'ACS::Choice'
    Description:
      en: Choose next task by resource type
    Properties:
      DefaultTask: whetherToRemoveInstancesFromScalingGroup
      Choices:
        - When:
            Fn::Equals:
              - 'ACK'
              - '{{ resourceType }}'
          NextTask: getNodePoolDetail
  - Name: whetherToRemoveInstancesFromScalingGroup
    Action: 'ACS::Choice'
    Description:
      en: Choose next task by adjustment type
    Properties:
      DefaultTask: createScalingRule
      Choices:
        - When:
            Fn::And:
              - Fn::Equals:
                  - '{{adjustmentType}}'
                  - ScaleIn
              - Fn::Equals:
                  - '{{adjustmentCount}}'
                  - 0
          NextTask: getInstanceToBeRemoved
  - Name: getInstanceToBeRemoved
    Description:
      en: Get the ECS instance to be removed
    Action: ACS::SelectTargets
    Properties:
      ResourceType: ALIYUN::ECS::Instance
      RegionId: '{{ regionId }}'
      Filters:
        - '{{ instancesToBeRemoved }}'
    Outputs:
      instanceIds:
        Type: List
        ValueSelector: Instances.Instance[].InstanceId
  - Name: removeInstances
    Action: 'ACS::ExecuteAPI'
    OnSuccess: waitScalingActivityComplete
    When:
      Fn::Not:
        Fn::Equals:
          - '{{ getInstanceToBeRemoved.instanceIds }}'
          - []
    Description:
      en: Remove instances from scaling group
    Properties:
      Service: ESS
      API: RemoveInstances
      Parameters:
        RegionId: '{{ regionId }}'
        ScalingGroupId: '{{ scalingGroupId }}'
        InstanceIds: '{{ getInstanceToBeRemoved.instanceIds }}'
    Outputs:
      scalingActivityId:
        Type: String
        ValueSelector: .ScalingActivityId
  - Name: createScalingRule
    Action: 'ACS::ExecuteAPI'
    Description:
      en: Create a ScalingRule
    Properties:
      Service: ESS
      API: CreateScalingRule
      Parameters:
        RegionId: '{{ regionId }}'
        ScalingGroupId: '{{ scalingGroupId }}'
        ScalingRuleName: '{{ ACS::ExecutionId }}'
        AdjustmentType:
          Fn::If:
            - Fn::Equals:
                - 'TotalCapacity'
                - '{{ adjustmentType }}'
            - TotalCapacity
            - QuantityChangeInCapacity
        AdjustmentValue:
          Fn::If:
            - Fn::Equals:
                - ScaleIn
                - '{{ adjustmentType }}'
            - '-{{ adjustmentCount }}'
            - '{{ adjustmentCount }}'
    Outputs:
      scalingRuleAri:
        Type: String
        ValueSelector: ScalingRuleAri
      scalingRuleId:
        Type: String
        ValueSelector: ScalingRuleId
  - Name: executeScalingRule
    Description:
      en: Execute the ScalingRule
    OnError: deleteScalingRule
    Action: 'ACS::ExecuteApi'
    Properties:
      Service: ESS
      API: ExecuteScalingRule
      Parameters:
        RegionId: '{{ regionId }}'
        ScalingRuleAri: '{{ createScalingRule.scalingRuleAri }}'
    Outputs:
      scalingActivityId:
        Type: String
        ValueSelector: ScalingActivityId
  - Name: waitScalingActivityComplete
    Description:
      en: Poll scaling activity execution until success or failure
    OnError: deleteScalingRule
    Retries: 30
    Action: 'ACS::WaitFor'
    Properties:
      Service: ESS
      API: DescribeScalingActivities
      Parameters:
        RegionId: '{{ regionId }}'
        ScalingActivityId1:
          Fn::If:
            - Fn::And:
                - Fn::Equals:
                    - '{{adjustmentType}}'
                    - ScaleIn
                - Fn::Equals:
                    - '{{adjustmentCount}}'
                    - 0
            - '{{ removeInstances.scalingActivityId }}'
            - '{{ executeScalingRule.scalingActivityId }}'
      DesiredValues:
        - Successful
      StopRetryValues:
        - Failed
        - Rejected
        - Warning
      PropertySelector: 'ScalingActivities.ScalingActivity[0].StatusCode'
  - Name: deleteScalingRule
    When:
      Fn::Not:
        Fn::And:
          - Fn::Equals:
              - '{{adjustmentType}}'
              - ScaleIn
          - Fn::Equals:
              - '{{adjustmentCount}}'
              - 0
    Description:
      en: Delete ScalingRule
    Action: 'ACS::ExecuteApi'
    Properties:
      Service: ESS
      API: DeleteScalingRule
      Parameters:
        RegionId: '{{ regionId }}'
        ScalingRuleId: '{{ createScalingRule.scalingRuleId }}'
  - Name: describeScalingActivityDetail
    Description:
      en: Describe scaling activity detail
    Action: 'ACS::ExecuteApi'
    Properties:
      Service: ESS
      API: DescribeScalingActivityDetail
      Parameters:
        RegionId: '{{ regionId }}'
        ScalingActivityId:
          Fn::If:
            - Fn::And:
                - Fn::Equals:
                    - '{{adjustmentType}}'
                    - ScaleIn
                - Fn::Equals:
                    - '{{adjustmentCount}}'
                    - 0
            - '{{ removeInstances.scalingActivityId }}'
            - '{{ executeScalingRule.scalingActivityId }}'
    Outputs:
      detail:
        Type: String
        ValueSelector: .Detail
  - Name: getOOSExecutionOutput
    Action: 'ACS::ExecuteAPI'
    OnSuccess: ACS::END
    Description:
      en: Get the lifecycle hook OOS execution output
    Properties:
      Service: OOS
      API: ListExecutions
      Parameters:
        RegionId: '{{ regionId }}'
        Tags:
          ESS:ScalingActivityId:
            Fn::If:
              - Fn::And:
                  - Fn::Equals:
                      - '{{adjustmentType}}'
                      - ScaleIn
                  - Fn::Equals:
                      - '{{adjustmentCount}}'
                      - 0
              - '{{ removeInstances.scalingActivityId }}'
              - '{{ executeScalingRule.scalingActivityId }}'
    Outputs:
      lifecycleHookOOSExecutionResult:
        Type: String
        ValueSelector: 'Executions[].Outputs'
  - Name: getNodePoolDetail
    Action: ACS::WaitFor
    Description:
      en: Get cluster node pool info
    Retries: 20
    Properties:
      Service: CS
      API: DescribeClusterNodePoolDetail
      Method: GET
      URI: /clusters/{{clusterId}}/nodepools/{{nodepoolId}}
      Parameters: {}
      DesiredValues:
        - active
      PropertySelector: .status.state
    Outputs:
      nodePoolInfo:
        Type: Json
        ValueSelector: .
  - Name: modifyClusterNodePool
    Action: ACS::ExecuteAPI
    Description:
      en: Modify cluster node pool configuration
    Properties:
      Service: CS
      API: ModifyClusterNodePool
      Method: PUT
      Headers:
        Content-Type: application/json
      URI: /clusters/{{clusterId}}/nodepools/{{nodepoolId}}
      Body:
        Fn::Jq:
          - First
          - '.+({"scaling_group": (.scaling_group + {"desired_size": {{desiredSize}}})}) | del(.scaling_group.login_password)'
          - '{{ getNodePoolDetail.nodePoolInfo }}'
  - Name: untilClusterNodePoolReady
    Action: ACS::WaitFor
    Description:
      en: Wait for the cluster node pool configuration to complete
    Retries: 20
    Properties:
      Service: CS
      API: DescribeClusterNodePoolDetail
      Method: GET
      Parameters: {}
      URI: /clusters/{{clusterId}}/nodepools/{{nodepoolId}}
      DesiredValues:
        - active
      PropertySelector: .status.state
Outputs:
  adjustDetail:
    Type: String
    Value: '{{ describeScalingActivityDetail.detail }}'
  lifecycleHookOOSExecutionResult:
    Type: String
    Value: '{{ getOOSExecutionOutput.lifecycleHookOOSExecutionResult }}'
Metadata:
  ALIYUN::OOS::Interface:
    ParameterGroups:
      - Parameters:
          - regionId
          - resourceType
          - scalingGroupId
          - adjustmentType
          - adjustmentCount
          - instancesToBeRemoved
          - clusterId
          - nodepoolId
          - desiredSize
        Label:
          default:
            en: Scaling Rule Configure Parameters
      - Parameters:
          - OOSAssumeRole
        Label:
          default:
            en: Control Options