全部产品
Search
文档中心

CloudOps Orchestration Service:ACS-ESS-AdjustScalingGroupInstanceCount

更新时间:Jun 28, 2025

Nama Template

ACS-ESS-AdjustScalingGroupInstanceCount

Eksekusi Sekarang

Deskripsi Template

Menyesuaikan jumlah instance dalam grup penskalaan dengan membuat dan mengeksekusi aturan penskalaan. Catatan:

  • Jika grup penskalaan dikonfigurasi dengan jumlah instance yang diharapkan, ketika jumlah instance berbeda dari yang diharapkan, Auto Scaling secara otomatis menambah atau menghapus instance untuk menyamakan jumlah instance dengan yang diharapkan. Setelah mengeksekusi template ini, periksa hasil penskalaan di konsol Auto Scaling.

  • Jumlah node dalam kluster Container Service for Kubernetes (ACK) setelah pengurangan skala tidak boleh lebih kecil dari jumlah minimum node yang diperlukan oleh komponen. Jika tidak, kode kesalahan IncorrectCapacity akan dikembalikan.

  • Sebelum mengeksekusi template ini, pastikan saldo akun Anda mencukupi untuk pembelian instance baru. Jika tidak, kode kesalahan InvalidAccountStatus.NotEnoughBalance akan dikembalikan.

  • Untuk menambah skala grup penskalaan yang diterapkan di beberapa zona, hitung nilai parameter AdjustmentCount menggunakan rumus berikut: Jumlah instance yang ditambahkan per zona × Jumlah zona.

  • Instance Elastic Compute Service (ECS) yang ditambahkan setelah peningkatan skala dibebankan berdasarkan sistem bayar sesuai pemakaian. Anda dapat mengubah metode penagihan menjadi berlangganan sesuai kebutuhan bisnis. Untuk informasi lebih lanjut, lihat Ubah metode penagihan dari bayar sesuai pemakaian menjadi berlangganan.

  • Anda dapat menggunakan salah satu metode pengurangan skala berikut: hapus sejumlah instance ECS tertentu dengan mengonfigurasi parameter AdjustmentCount, atau hapus instance ECS tertentu dengan mengatur parameter AdjustmentCount ke 0 dan memilih instance ECS yang akan dihapus.

  • Jumlah instance yang dihapus untuk pengurangan skala tidak boleh kurang dari jumlah instance awal yang dibuat untuk grup penskalaan.

Menyesuaikan jumlah node dalam kolam node kluster ACK. Untuk informasi lebih lanjut, lihat Buat dan kelola kolam node. Catatan:

  • Baca dokumen terkait dan berikan izin kepada peran AliyunOOSLifecycleHook4CSRole.

Jenis Template

Otomatis

Pemilik

Alibaba Cloud

Parameter Input

Parameter

Deskripsi

Tipe

Diperlukan

Nilai Default

Batasan

resourceType

Jenis sumber daya yang ingin Anda sesuaikan.

String

Tidak

ESS

regionId

ID wilayah instance ECS yang akan dikloning.

String

Tidak

{{ ACS::RegionId }}

scalingGroupId

ID grup penskalaan.

String

Tidak

""

adjustmentType

Metode penskalaan.

String

Tidak

ScaleOut

adjustmentCount

Jumlah instance ECS yang akan dimodifikasi dalam grup penskalaan.

Number

Tidak

0

instancesToBeRemoved

Instance ECS yang akan dihapus dari grup penskalaan.

Json

Tidak

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

clusterId

ID kluster.

String

Tidak

""

nodepoolId

ID kolam node.

String

Tidak

""

desiredSize

Jumlah node yang diharapkan.

Number

Tidak

0

OOSAssumeRole

Peran Resource Access Management (RAM) yang diasumsikan oleh CloudOps Orchestration Service (OOS).

String

Tidak

""

Parameter Output

Parameter

Deskripsi

Tipe

adjustDetail

String

lifecycleHookOOSExecutionResult

String

Kebijakan yang diperlukan untuk mengeksekusi template

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

Referensi

ACS-ESS-AdjustScalingGroupInstanceCount

Konten Template

FormatVersion: OOS-2019-06-01
Description:
  en: <p class="p">Sesuaikan jumlah instance dalam grup penskalaan dengan membuat dan mengeksekusi aturan grup penskalaan. Deskripsi:</p>
    <ul class="ul">
    <li class="li">Jika grup penskalaan telah dikonfigurasi dengan jumlah instance yang diinginkan, ketika jumlah instance dalam grup penskalaan tidak sama dengan jumlah instance yang diharapkan, layanan auto scaling akan secara otomatis menskalakan untuk memastikan bahwa jumlah instance dalam grup penskalaan selalu dipertahankan. Setelah eksekusi selesai, silakan kunjungi konsol ESS untuk melihat hasil penyesuaian. </li>
    <li class="li">Jumlah node kluster setelah penskalaan turun tidak boleh kurang dari persyaratan node minimum komponen, jika tidak operasi penskalaan mungkin mengembalikan kesalahan dengan kode:IncorrectCapacity. </li>
    <li class="li">Pastikan saldo akun Anda lebih besar dari biaya instance yang baru dibeli, jika tidak kesalahan dengan kode:InvalidAccountStatus.NotEnoughBalance akan dikembalikan. </li>
    <li class="li">Jika multi-zona, harap perluas kelipatan jumlah zona. </li>
    <li class="li">Metode pembayaran untuk ECS yang diperluas adalah bayar sesuai pemakaian. Jika perlu, pelanggan perlu melakukan kontrak tahunan dan bulanan secara manual. </a></li>
    <li class="li"> Ada dua cara untuk penskalaan turun: turunkan jumlah instance ECS tertentu ( tidak 0), hapus instance ECS tertentu dari grup penskalaan ( adalah 0 dan instance ECS yang akan dihapus dipilih)</li>
    <li class="li">Penskalaan tidak boleh kurang dari jumlah yang awalnya dibuka dalam grup penskalaan. </li>
    </ul>
    <p class="p">Sesuaikan jumlah instance dalam grup penskalaan dengan membuat dan mengeksekusi aturan grup penskalaan. Deskripsi:</p>
    <ul class="ul">
    <li class="li">Sesuaikan kolam node kluster ACK<a href='https://www.alibabacloud.com/help/en/ack/ack-edge/user-guide/create-a-node-pool?spm=a3c0i.23458820.2359477120.9.57186e9b4Ewe21'>Jumlah node yang diharapkan</a>, harap baca dokumen terkait dengan cermat dan otorisasi peran 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: Pilih tugas berikutnya berdasarkan jenis sumber daya
    Properties:
      DefaultTask: whetherToRemoveInstancesFromScalingGroup
      Choices:
        - When:
            Fn::Equals:
              - 'ACK'
              - '{{ resourceType }}'
          NextTask: getNodePoolDetail
  - Name: whetherToRemoveInstancesFromScalingGroup
    Action: 'ACS::Choice'
    Description:
      en: Pilih tugas berikutnya berdasarkan jenis penyesuaian
    Properties:
      DefaultTask: createScalingRule
      Choices:
        - When:
            Fn::And:
              - Fn::Equals:
                  - '{{adjustmentType}}'
                  - ScaleIn
              - Fn::Equals:
                  - '{{adjustmentCount}}'
                  - 0
          NextTask: getInstanceToBeRemoved
  - Name: getInstanceToBeRemoved
    Description:
      en: Dapatkan instance ECS yang akan dihapus
    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: Hapus instance dari grup penskalaan
    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: Buat 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: Eksekusi 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: Pantau eksekusi aktivitas penskalaan hingga berhasil atau gagal
    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: Hapus ScalingRule
    Action: 'ACS::ExecuteApi'
    Properties:
      Service: ESS
      API: DeleteScalingRule
      Parameters:
        RegionId: '{{ regionId }}'
        ScalingRuleId: '{{ createScalingRule.scalingRuleId }}'
  - Name: describeScalingActivityDetail
    Description:
      en: Jelaskan detail aktivitas penskalaan
    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: Dapatkan output eksekusi OOS untuk lifecycle hook
    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: Dapatkan informasi kolam node kluster
    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: Ubah konfigurasi kolam node kluster
    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: Tunggu hingga konfigurasi kolam node kluster selesai
    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: Parameter Konfigurasi Aturan Penskalaan
      - Parameters:
          - OOSAssumeRole
        Label:
          default:
            en: Opsi Kontrol