Todos os produtos
Search
Central de documentação

Auto Scaling:Custom ECS scale-in policy with Function Compute

Última atualização: Jul 17, 2026

Use o Function Compute para criar uma política personalizada de redução de escala que controle quais instâncias são removidas durante um evento de redução, como priorizar a remoção das instâncias com menor carga de CPU.

Informações básicas

O Auto Scaling oferece políticas integradas para remover instâncias durante uma atividade de redução de escala com base em critérios como horário de criação da instância ou versão da configuração de dimensionamento. Para mais informações, consulte Configurar uma política de encerramento de instância para um grupo de dimensionamento.

Para requisitos mais específicos, utilize o Function Compute na criação de uma política personalizada de redução de escala. Os casos de uso comuns incluem:

  • Cenário 1: Remover instâncias com a menor carga de CPU para minimizar o impacto na aplicação.

  • Cenário 2: Integrar ao seu próprio sistema de agendamento para remover primeiro as instâncias ociosas, reduzindo custos e mantendo a disponibilidade do service.

Pré-requisitos

Procedimento

Etapa 1: Criar uma função

O console do Alibaba Cloud Function Compute está disponível em duas versões: Function Compute 2.0 e Function Compute 3.0. Este guia utiliza o Function Compute 2.0.

  1. Faça login no console do Function Compute.

    Se estiver no console do Function Compute 3.0, clique em Back to Function Compute 2.0.

  2. No painel de navegação à esquerda, clique em Services & Functions.

  3. Na barra de navegação superior, selecione uma região.

  4. Crie um service.

    1. Na página Services, clique em Create Service.

    2. No painel exibido, configure as definições do service e clique em OK.

      Este tópico usa as seguintes configurações como exemplo. Utilize os valores padrão para quaisquer outros parâmetros. Para mais informações, consulte Criar um service.

      Parâmetro

      Exemplo

      Descrição

      Service

      test-service

      Nome do service do Function Compute. Siga as convenções de nomenclatura exibidas no console.

      Description

      test

      Descrição para o service do Function Compute.

      Logging

      Enable

      Ative o log para enviar automaticamente os logs de execução da função ao Simple Log Service. Isso permite depurar código, diagnosticar falhas e realizar análises de dados.

  5. Crie uma função.

    1. Clique no nome do service e, em seguida, clique em Function Management no painel de navegação à esquerda.

    2. Clique em Create Function.

    3. Na página Create Function, configure as definições da função e clique em Create.

      Este tópico utiliza o método Use Built-in Runtime para criar a função. As configurações a seguir servem como exemplo. Mantenha os valores padrão para os demais parâmetros. Para mais detalhes, consulte Criar uma função.

      Parâmetro

      Exemplo

      Descrição

      Basic Settings

      Function Name

      test-fc

      Insira um nome para a função. Siga as convenções de nomenclatura exibidas no console.

      Handler Type

      Event Handler

      Os seguintes tipos de handler são suportados:

      • Event Handler: A função processa solicitações orientadas por eventos.

      • HTTP Handler: A função processa solicitações HTTP ou WebSocket.

      Code

      Runtime Environment

      Python 3.9

      Ambiente de execução para o seu código.

      Code Upload Method

      Use Sample Code

      Hello, world! sample

      Método para fazer upload do código da função para o Function Compute.

  6. Escreva e implante o código da função.

    1. Clique no nome da função para acessar a página de detalhes da função.

    2. Na aba Code, edite o arquivo index.py no editor de código e clique em Deploy.

      Implemente a lógica de filtragem conforme seus requisitos de negócio, como recuperar a carga de CPU de cada instância ou consultar seu sistema de agendamento.

      O código de exemplo abaixo seleciona instâncias para remoção com base no número de instâncias a serem removidas (Capacity) e na lista de IDs de instância (InstanceId) passados no evento.

      # -*- coding: utf-8 -*-
      import logging
      import json
      def handler(event, context):
          evt = json.loads(event)
          logger = logging.getLogger()
          logger.info(evt)
          removeCount = 0
          if "CapacityToRemove" in evt:
              for cp in evt["CapacityToRemove"]:
                  logger.info(cp["Capacity"])
                  removeCount += int(cp["Capacity"])
          instances_to_terminate = []
          if "Instances" in evt:
              for i in evt["Instances"]:
                  instances_to_terminate.append(i["InstanceId"])
          response = {
              'InstanceIds': instances_to_terminate[:removeCount]
          }
          logger.info(response)
          return response
      
  7. (Opcional) Teste a função.

    1. Na aba Code, clique no ícone 图标 ao lado de Test Function e selecione Configure Test Parameters na lista suspensa.

    2. Insira o objeto de evento de teste e clique em OK.

      O código a seguir serve como exemplo de teste. ScalingGroupId especifica o grupo de dimensionamento a ser gerenciado. CapacityToRemove indica a remoção de uma instância ECS da zona cn-beijing-g. Instances define a lista de instâncias disponíveis para remoção.

      {
      	"ScalingGroupARN": "acs:ess:cn-beijing:160998252992****.scalinggroup/asg-2zei8mzn72rb115k****",
      	"ScalingGroupId": "asg-2zei8mzn72rb115k****",
      	"CapacityToRemove": [{
      		"ZoneId": "cn-beijing-g",
      		"Capacity": 1
      	}],
      	"Instances": [{
      			"InstanceId": "i-2zeinb37ovdsx6l0****",
      			"ZoneId": "cn-beijing-g",
      			"InstanceType": "ecs.g7.xlarge",
      			"ChargeType": "PostPaid"
      		},
      		{
      			"InstanceId": "i-2zeinb37ovdsx6l0****",
      			"ZoneId": "cn-beijing-g",
      			"InstanceType": "ecs.g7.xlarge",
      			"ChargeType": "PostPaid"
      		},
      		{
      			"InstanceId": "i-2zeinb37ovdsx6l0****",
      			"ZoneId": "cn-beijing-g",
      			"InstanceType": "ecs.g7.xlarge",
      			"ChargeType": "PostPaid"
      		}
      	],
      	"AdjustmentType": "SystemScaleIn"
      }
    3. Clique em Test Function.

    4. Na aba Response, visualize o resultado do teste.

      A resposta esperada da função é mostrada abaixo. Essa resposta instrui o Auto Scaling a remover a primeira instância da lista durante um evento de redução de escala.

      {
          "InstanceIds": [
              "i-2zeinb37ovdsx6l0****"
          ]
      }
  8. No topo da página, clique em Publish Version e, em seguida, clique em OK.

Etapa 2: Configurar a política de redução de escala

Esta seção demonstra como aplicar a política personalizada de redução de escala ao criar um novo grupo de dimensionamento. Para aplicá-la a um grupo existente, modifique a política de redução de escala desse grupo.

  1. Faça login no console do Auto Scaling.

  2. Crie um grupo de dimensionamento.

    1. Na página Scaling Groups, clique em Create Scaling Group.

    2. Configure os parâmetros do grupo de dimensionamento e clique em Create.

      Este tópico utiliza as configurações abaixo como exemplo. Use os valores padrão para quaisquer parâmetros não mencionados. Para mais informações, consulte Configurar um grupo de dimensionamento.

      Parâmetro

      Exemplo

      Descrição

      Scaling Group Name

      test

      Insira um nome para o grupo de dimensionamento. Siga as convenções de nomenclatura exibidas no console.

      Type

      ECS

      Tipo de instâncias no grupo de dimensionamento.

      Este exemplo usa ECS, o que significa que o grupo gerencia instâncias ECS.

      Instance Configuration Source

      Create from Scratch

      Modelo para criação de instâncias.

      Este exemplo utiliza Create from Scratch, indicando que nenhum modelo é especificado nesta etapa. Posteriormente, será necessário criar uma configuração de dimensionamento após a criação do grupo.

      Instance Removing Policy

      Custom Policy

      • Service: test-service

      • Version: LATEST

      • Function: test-fc

      Política para remover instâncias do grupo durante uma atividade de redução de escala.

      Selecione Custom Policy e escolha a função criada na Etapa 1.

      Minimum Number of Instances

      0

      Número mínimo de instâncias no grupo. Se a quantidade atual ficar abaixo desse valor, o Auto Scaling adicionará instâncias para atender ao requisito mínimo.

      Maximum Number of Instances

      5

      Número máximo de instâncias no grupo. Caso a quantidade atual exceda esse valor, o Auto Scaling removerá instâncias para respeitar o limite máximo.

      Enable Expected Number of Instances e Expected Number of Instances

      Enabled, 3

      Ative este recurso e defina o número esperado de instâncias. O Auto Scaling mantém automaticamente essa quantidade no grupo.

  3. Crie uma configuração de dimensionamento. Para mais informações, consulte Criar uma configuração de dimensionamento para instâncias ECS.

  4. Ative o grupo de dimensionamento. Para mais informações, consulte Ativar ou desativar um grupo de dimensionamento.

    Como o número esperado de instâncias deste grupo está definido como 3, o Auto Scaling cria automaticamente três instâncias ECS após a ativação do grupo.

Etapa 3: Verificar a redução de escala

  1. Dispare uma atividade de redução de escala e verifique a remoção da instância.

    1. Inicie uma atividade de redução modificando o número esperado de instâncias do grupo. Para mais informações, consulte Visualizar ou modificar um grupo de dimensionamento.

      Importante

      Também é possível disparar atividades de redução usando tarefas agendadas, tarefas acionadas por eventos ou executando manualmente uma regra de dimensionamento. No entanto, uma política personalizada de redução criada com o Function Compute não se aplica a atividades disparadas pela alteração dos números mínimo ou máximo de instâncias do grupo.

      Neste exemplo, o número esperado de instâncias foi alterado para 2. Como o grupo possuía anteriormente três instâncias ECS, isso dispara uma atividade de redução para remover uma instância.

    2. Verifique os detalhes da atividade de dimensionamento para confirmar qual instância foi removida. Para mais informações, consulte Visualizar detalhes da atividade de dimensionamento.

      Neste exemplo, o ID da instância removida é i-2ze2qdthrkpf****tldq.

      Nos detalhes da atividade, o campo Cause mostra que o usuário alterou a capacidade esperada de 3 para 2. O campo Details indica que a instância correspondente foi excluída. Já o campo Status Information informa que uma instância ECS foi removida e o status da atividade é Successful.

  2. Consulte os logs de invocação da função para confirmar que a atividade de redução acionou a função.

    1. No console do Function Compute, acesse a página Services e clique no nome do seu service.

    2. Na página Function Management, clique no nome da sua função.

    3. Na página de detalhes da função, clique na aba Logs.

    4. Na aba Requests, dentro da Requests List, localize a solicitação correspondente ao horário da atividade de redução e clique no ID da solicitação.

    5. No painel de detalhes da solicitação exibido, clique em Log Details para visualizar os logs da invocação da função.

      O log mostra que o Auto Scaling passou o número de instâncias a remover e a lista atual de IDs de instância para o Function Compute. A função retornou o ID da instância i-2ze2qdthrkpf****tldq para remoção, o que corresponde à instância efetivamente removida.

      FC Invoke Start RequestId: 000BFA95-CAA4-5D83-B643-BC51C42402CD
      2024-06-13 11:28:22 000BFA95-CAA4-5D83-B643-BC51C42402CD [INFO] {'ScalingGroupARN': 'acs:ess:cn-beijing:16099825xxx:scalinggroup/asg-2e6ny5x9dtxxx', 'ScalingGroupId': 'asg-2e6ny5x9dtiaxxxg', 'CapacityToRemove': [{'ZoneId': 'cn-beijing-g', 'Capacity': 1}], 'Instances': [{'InstanceId': 'i-2ze2qdthrxxxxtldq', 'ZoneId': 'cn-beijing-g', 'InstanceType': 'ecs.c6e.large', 'ChargeType': 'SpotAsPriceGo'}, {'InstanceId': 'i-2ze2qdtxxxxtldr', 'ZoneId': 'cn-beijing-g', 'InstanceType': 'ecs.c6e.large', 'ChargeType': 'SpotAsPriceGo'}, {'InstanceId': 'i-2ze2qdthxxxxtlds', 'ZoneId': 'cn-beijing-g', 'InstanceType': 'ecs.c6e.large', 'ChargeType': 'SpotAsPriceGo'}], 'AdjustmentType': 'SystemScaleIn'}
      2024-06-13 11:28:22 000BFA95-CAA4-5D83-B643-BC51C42402CD [INFO] 1
      2024-06-13 11:28:22 000BFA95-CAA4-5D83-B643-BC51C42402CD [INFO] {'InstanceIds': ['i-2ze2qdtxxxxtldq']}
      FC Invoke End RequestId: 000BFA95-CAA4-5D83-B643-BC51C42402CD