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
O Function Compute está ativado e você concedeu as permissões necessárias. Para mais informações, consulte Etapa 1: Ativar o Function Compute.
O Simple Log Service está ativado e você possui as permissões necessárias. Para mais informações, consulte Coletar e analisar logs de texto de ECS usando LoongCollector.
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.
-
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.
No painel de navegação à esquerda, clique em Services & Functions.
Na barra de navegação superior, selecione uma região.
-
Crie um service.
Na página Services, clique em Create Service.
-
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.
-
Crie uma função.
Clique no nome do service e, em seguida, clique em Function Management no painel de navegação à esquerda.
Clique em Create Function.
-
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.
-
-
Escreva e implante o código da função.
Clique no nome da função para acessar a página de detalhes da função.
-
Na aba Code, edite o arquivo
index.pyno 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
-
(Opcional) Teste a função.
Na aba Code, clique no ícone
ao lado de Test Function e selecione Configure Test Parameters na lista suspensa.-
Insira o objeto de evento de teste e clique em OK.
O código a seguir serve como exemplo de teste.
ScalingGroupIdespecifica o grupo de dimensionamento a ser gerenciado.CapacityToRemoveindica a remoção de uma instância ECS da zonacn-beijing-g.Instancesdefine 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" } Clique em Test Function.
-
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****" ] }
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.
Faça login no console do Auto Scaling.
-
Crie um grupo de dimensionamento.
Na página Scaling Groups, clique em Create Scaling Group.
-
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.
-
Crie uma configuração de dimensionamento. Para mais informações, consulte Criar uma configuração de dimensionamento para instâncias ECS.
-
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
-
Dispare uma atividade de redução de escala e verifique a remoção da instância.
-
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.
ImportanteTambé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.
-
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.
-
-
Consulte os logs de invocação da função para confirmar que a atividade de redução acionou a função.
No console do Function Compute, acesse a página Services e clique no nome do seu service.
Na página Function Management, clique no nome da sua função.
Na página de detalhes da função, clique na aba Logs.
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.
-
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****tldqpara 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