Políticas de escalabilidade com monitoramento do objetivo para o Amazon EC2 Auto Scaling - Amazon EC2 Auto Scaling

Políticas de escalabilidade com monitoramento do objetivo para o Amazon EC2 Auto Scaling

Para criar uma política de escalabilidade com monitoramento de objetivo, você especifica uma métrica do Amazon CloudWatch e um valor de objetivo que representa a utilização média ideal ou o nível de throughput para seu aplicativo. Em seguida, o Amazon EC2 Auto Scaling poderá aumentar a escala na horizontal do seu grupo (adicionar mais instâncias) para processar picos de tráfego, e reduzir a escala na horizontal do seu grupo (executar menos instâncias) para reduzir custos durante períodos de baixa utilização ou throughput.

Por exemplo, digamos que você tenha um aplicativo que seja executado em duas instâncias e queira que a utilização de CPU do grupo do Auto Scaling permaneça em cerca de 50% quando a carga no aplicativo mudar. Isso fornece capacidade extra para lidar com picos de tráfego sem manter um número excessivo de recursos ociosos.

Você pode satisfazer essa necessidade criando uma política de escalabilidade com monitoramento de objetivo visando uma utilização média de 50% da CPU. Em seguida, seu grupo do Auto Scaling dimensionará o número de instâncias para manter o valor efetivo da métrica em ou perto de 50%.

Várias políticas de escalabilidade de monitoramento de objetivo

Para ajudar a otimizar o desempenho de escalonamento, você pode usar várias políticas de escalabilidade com monitoramento de objetivo juntas desde que cada uma delas use uma métrica diferente. Por exemplo, utilização e throughput podem promover influência cruzada. Sempre que uma dessas métricas muda, geralmente isso significa que outras métricas também serão afetadas. Portanto, o uso de várias métricas fornece informações adicionais sobre a carga em seu grupo do Auto Scaling e melhora a tomada de decisões ao determinar quanta capacidade adicionar ao seu grupo.

A intenção do Amazon EC2 Auto Scaling é sempre priorizar a disponibilidade, portanto, seu comportamento será diferente dependendo se as políticas de monitoramento do objetivo estão prontas para aumentar ou reduzir a escala na horizontal. Ele vai aumentar a escala na horizontal do grupo do Auto Scaling se qualquer uma das políticas com monitoramento do objetivo estiverem prontas para aumentar a escala, mas vai reduzir a escala na horizontal somente se todas as políticas com monitoramento do objetivo (com a parte de redução habilitada) estiverem prontas para reduzir a escala.

Considerações

As considerações a seguir são aplicáveis ao trabalhar com políticas de escalabilidade com monitoramento de objetivo:

  • Não crie, edite ou exclua os alarmes do CloudWatch usados com uma política de dimensionamento com monitoramento de objetivo. O Amazon EC2 Auto Scaling cria e gerencia os alarmes do CloudWatch que estão associados às suas políticas de dimensionamento com monitoramento de objetivo, além de excluí-los quando eles não são mais necessários.

  • Uma política de escalonamento com monitoramento de objetivo prioriza a disponibilidade durante períodos de níveis flutuantes de tráfego, reduzindo a escala na horizontal de maneira mais gradual quando o tráfego está diminuindo. Se você quiser que seu grupo do Auto Scaling tenha a escala reduzida na horizontal imediatamente após o término de uma workload, é possível desabilitar a parte de redução da escala da política. Isso proporciona a flexibilidade de usar o método de redução da escala na horizontal que melhor atenda às suas necessidades quando a utilização estiver baixa. Para garantir que a redução da escala na horizontal ocorra o mais rápido possível, recomendamos não usar uma política simples de escalabilidade para evitar a adição de um período de esfriamento.

  • Se houver pontos de dados faltando na métrica, isso fará com que o estado de alarme do CloudWatch mude para INSUFFICIENT_DATA. Quando isso acontece, o Amazon EC2 Auto Scaling não poderá escalar seu grupo até que novos pontos de dados sejam encontrados.

  • É possível ver lacunas entre o valor de destino e os pontos de dados de métrica reais. Isso ocorre porque agimos de maneira conservadora arredondando para cima ou para baixo, ao determinarmos quantas instâncias adicionar ou remover. Isso evita a adição de um número insuficiente de instâncias ou remova muitas instâncias. No entanto, para grupos do Auto Scaling menores, com um número menor de instâncias, a utilização do grupo pode parecer distante do valor do objetivo. Por exemplo, vamos supor que você defina um valor de objetivo de 50% para a utilização da CPU, e o seu grupo do Auto Scaling exceda o objetivo. Podemos determinar que a adição de 1,5 instância diminuirá a utilização da CPU em cerca de 50%. Como não é possível adicionar 1,5 instância, arredondamos para cima e adicionamos duas instâncias. Isso pode diminuir a utilização da CPU para um valor abaixo de 50%, mas garante que sua aplicação tenha recursos suficientes para oferecer suporte a ele. Da mesma forma, se determinarmos que remover 1,5 instância aumenta a utilização da CPU para acima de 50%, removeremos apenas uma instância.

  • Para grupos do Auto Scaling maiores, com mais instâncias, a utilização é distribuída entre um maior número de instâncias, caso em que adicionar ou remover instâncias causa menos de uma lacuna entre o valor do objetivo e os pontos de dados de métrica reais.

  • Uma política de escalabilidade com monitoramento do objetivo pressupõe que ela deve aumentar a escalabilidade de seu grupo do Auto Scaling quando a métrica especificada estiver acima do valor do objetivo. Você não pode usar uma política de escalabilidade com monitoramento do objetivo para aumentar horizontalmente a escala do seu grupo do Auto Scaling quando a métrica especificada estiver abaixo do valor do objetivo.

Escolher métricas

Em uma política de escalabilidade com monitoramento do objetivo, é possível usar métricas predefinidas ou personalizadas.

As seguintes métricas predefinidas estão disponíveis:

  • ASGAverageCPUUtilization: média de utilização da CPU do grupo do Auto Scaling.

  • ASGAverageNetworkIn: número médio de bytes recebidos por uma única instância em todas as interfaces de rede.

  • ASGAverageNetworkOut: número médio de bytes enviados de uma única instância em todas as interfaces de rede.

  • ALBRequestCountPerTarget: quantidade média de solicitações do Application Load Balancer por destino.

Importante

Outras informações valiosas sobre as métricas de uso de CPU, E/S de rede e número de solicitações do Application Load Balancer por alvo estão disponíveis respectivamente no tópico Listar as métricas disponíveis do CloudWatch para as instâncias no Guia do usuário do Amazon EC2 para instâncias do Linux e no tópico CloudWatch metrics for your Application Load Balancer (Métricas do CloudWatch para o Application Load Balancer) no User Guide for Application Load Balancers (Guia do usuário de Application Load Balancers).

Você pode escolher outras métricas disponíveis do CloudWatch ou suas próprias métricas no CloudWatch especificando uma métrica personalizada. É necessário usar a AWS CLI ou um SDK para criar uma política com monitoramento do objetivo com uma métrica personalizada.

Lembre-se do seguinte ao escolher uma métrica:

  • Nem todas as métricas do funcionam para o rastreamento de destino. Isso pode ser importante quando você estiver especificando uma métrica personalizada. A métrica deve ser de utilização válida e descrever o quão ocupada uma instância está. O valor da métrica deve aumentar e diminuir em proporção ao número das instâncias no grupo do Auto Scaling. Isso é para que os dados da métrica possam ser usados para expandir ou reduzir o número de instâncias. Por exemplo, a utilização da CPU de um grupo do Auto Scaling funcionará (ou seja, a métrica CPUUtilization do Amazon EC2 com a dimensão da métrica AutoScalingGroupName) se a carga no grupo do Auto Scaling for distribuída entre as instâncias.

  • As métricas a seguir não funcionam para rastreamento de destino:

    • O número de solicitações recebidas pelo balanceador de carga voltadas para o grupo do Auto Scaling (ou seja, a métrica RequestCount do Elastic Load Balancing). O número de solicitações recebidas pelo balanceador de carga não é alterado com base na utilização do grupo do Auto Scaling.

    • A latência da solicitação do balanceador de carga (ou seja, a métrica Latency do Elastic Load Balancing). A latência da solicitação pode aumentar com base no aumento da utilização, mas não necessariamente muda de forma proporcional.

    • A métrica ApproximateNumberOfMessagesVisible da fila do Amazon SQS do CloudWatch. O número de mensagens em uma fila pode não mudar proporcionalmente ao tamanho do grupo do Auto Scaling que processa mensagens da fila. Contudo, uma métrica personalizada que meça o número de mensagens na fila por instância do EC2 no grupo do Auto Scaling pode funcionar. Para mais informações, consulte Escalabilidade baseada no Amazon SQS.

  • Para usar a métrica ALBRequestCountPerTarget, é necessário especificar o parâmetro ResourceLabel a fim de identificar o grupo de destino do balanceador de carga que está associado à métrica.

  • Quando uma métrica emite valores reais 0 para o CloudWatch (por exemplo, ALBRequestCountPerTarget), um grupo do Auto Scaling pode reduzir a escala horizontalmente para 0 quando não houver tráfego para seu aplicativo. A capacidade mínima do grupo deve estar definida como 0 para que seu grupo do Auto Scaling reduza a escala horizontalmente para 0 quando não houver solicitação roteada para ele.

Quando você usar métricas de instância do EC2 em políticas de escalabilidade, recomendamos que defina essas métricas com uma granularidade de um minuto para garantir uma resposta mais rápida a alterações no valor da métrica. O dimensionamento baseado em métricas de instância com uma granularidade de cinco minutos pode resultar em tempos de resposta mais lentos e operações de dimensionamento baseadas em dados de métrica obsoletos.

Para obter esse nível de dados para métricas do Amazon EC2, é necessário habilitar especificamente o monitoramento detalhado. Por padrão, as instâncias do EC2 são habilitadas para monitoramento básico, o que significa que os dados de métrica para instâncias estão disponíveis com uma granularidade de cinco minutos. Para mais informações, consulte Configurar monitoramento para instâncias do Auto Scaling.

Definir valor de objetivo

Ao criar uma política de escalabilidade com monitoramento de objetivo, você deve especificar um valor para o objetivo. O valor-alvo representa o uso ou o throughput médio ideal para o grupo do Auto Scaling. Para usar os recursos de maneira econômica, defina o valor do objetivo com o número mais alto possível considerando um buffer razoável para aumentos inesperados de tráfego. Quando seu aplicativo aumentar a escala horizontalmente para um fluxo de tráfego normal, o valor efetivo da métrica deve estar no valor desejado ou logo abaixo dele.

Quando uma política de dimensionamento é baseada no throughput, como o número de solicitações por destino para um Application Load Balancer, E/S de rede ou outras métricas de contagem, o valor-alvo representa o throughput médio ideal de uma única instância em um período de um minuto.

Definir o tempo de aquecimento da instância

Importante

Recomendamos usar a configuração padrão de aquecimento da instância, que unifica todas as configurações de aquecimento e desaquecimento de seu grupo do Auto Scaling. Para mais informações, consulte Configurações de aquecimento e desaquecimento disponíveis.

Como opção, você pode especificar o número de segundos necessários para o aquecimento de uma instância recém-ativada. Até que o tempo de aquecimento especificado expire, uma instância não é contada para as métricas de instância do EC2 agregadas do grupo do Auto Scaling.

Enquanto as instâncias estiverem no período de aquecimento, suas políticas de escalabilidade somente aumentarão a escala na horizontal se o valor da métrica das instâncias que não estão se aquecendo for maior do que a utilização de destino da política.

Se o grupo voltar a aumentar a escala na horizontal, as instâncias que ainda estão se aquecendo serão contadas como parte da capacidade desejada para a próxima ação de aumento da escala na horizontal. A intenção é expandir de forma contínua (mas não excessivamente).

Enquanto a atividade de aumentar a escala na horizontal estiver em andamento, todas as atividades de reduzir a escala na horizontal iniciadas por políticas de escalabilidade serão bloqueadas até que as instâncias terminem de aquecer.

Criar uma política de escalabilidade com monitoramento do objetivo (console)

Você pode optar por configurar uma política de escalabilidade com monitoramento do objetivo em um grupo do Auto Scaling enquanto o cria ou após o grupo do Auto Scaling ser criado.

Para criar um grupo do Auto Scaling com uma política de escalabilidade com monitoramento do objetivo

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/ e escolha grupos do Auto Scaling no painel de navegação.

  2. Selecione Criar grupo do Auto Scaling.

  3. Nas etapas 1, 2 e 3, escolha as opções conforme desejado e prossiga para a Etapa 4: Configurar políticas de escalabilidade e tamanho do grupo.

  4. Em Group size (Tamanho do grupo), especifique o intervalo no qual você deseja escalar atualizando a capacidade mínima e a capacidade máxima. Essas duas configurações permitem que seu grupo do Auto Scaling seja escalado dinamicamente. O Amazon EC2 Auto Scaling escala seu grupo no intervalo de valores especificados pela capacidade mínima e capacidade máxima.

  5. Em Scaling policies (Políticas de escalabilidade), escolha Target tracking scaling policy (Política de escalabilidade com monitoramento do objetivo).

  6. Para definir a política, faça o seguinte:

    1. Especifique um nome para a política.

    2. Escolha uma métrica para o Tipo de métrica.

      Se tiver escolhido Application Load Balancer request count per target (Contagem de solicitações do Application Load Balancer por destino), escolha um grupo de destino em Target group (Grupo de destino).

    3. Especifique um Target value (Valor de destino) para a métrica.

    4. (Opcional) Em Instances need (As instâncias precisam), atualize o valor de aquecimento de instâncias conforme necessário.

    5. (Opcional) Selecione Disable scale in to create only a scale-out policy (Desabilitar redução para criar somente uma política de expansão). Isso permite que você crie uma política de redução separada de um tipo diferente, se desejado.

  7. Prossiga para criar o grupo do Auto Scaling. Sua política de escalabilidade será criada depois que o grupo do Auto Scaling for criado.

Para criar uma política de escalabilidade com monitoramento do objetivo para um grupo do Auto Scaling existente

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/ e escolha grupos do Auto Scaling no painel de navegação.

  2. Marque a caixa de seleção ao lado do seu grupo do Auto Scaling.

    Um painel dividido é aberto na parte inferior da página Auto Scaling groups (Grupos do Auto Scaling).

  3. Verifique se a capacidade mínima e a capacidade máxima estão definidas adequadamente. Por exemplo, se seu grupo já estiver em seu tamanho máximo, especifique um novo máximo para expandir. O Amazon EC2 Auto Scaling não escala seu grupo abaixo da capacidade mínima ou acima da capacidade máxima. Para atualizar o grupo, na guia Detalhes, altere as configurações atuais de capacidade mínima e máxima.

  4. Na guia Automatic scaling (Escalabilidade automática), em Dynamic scaling policies (Políticas dinâmicas de escalabilidade), selecione Create dynamic scaling policy (Criar política dinâmica de escalabilidade).

  5. Para definir a política, faça o seguinte:

    1. Em Policy type (Tipo de política), mantenha o padrão de Target tracking scaling (Escalabilidade de rastreamento de destino).

    2. Especifique um nome para a política.

    3. Escolha uma métrica para o Tipo de métrica. É possível escolher apenas um tipo de métrica. Para usar mais de uma métrica, crie várias políticas.

      Se você escolheu Application Load Balancer request count per target (Contagem de solicitações do balanceador de carga da aplicação por destino), escolha um grupo de destino em Target group (Grupo de destino).

    4. Especifique um Target value (Valor de destino) para a métrica.

    5. (Opcional) Em Instances need (As instâncias precisam), atualize o valor de aquecimento de instâncias conforme necessário.

    6. (Opcional) Selecione Disable scale in to create only a scale-out policy (Desabilitar redução para criar somente uma política de expansão). Isso permite que você crie uma política de redução separada de um tipo diferente, se desejado.

  6. Escolha Create (Criar OpsItem).

Criar uma política de escalabilidade com monitoramento do objetivo (AWS CLI)

Use a AWS CLI da seguinte maneira para configurar políticas de escalabilidade com monitoramento do objetivo para o grupo do Auto Scaling.

Etapa 1: Criar um grupo do Auto Scaling

Use o comando create-auto-scaling-group para criar um grupo do Auto Scaling denominado my-asg usando o modelo de inicialização my-template. Se você não tiver um modelo de inicialização, consulte Exemplos da AWS CLI para trabalhar com modelos de execução.

aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg \ --launch-template LaunchTemplateName=my-template,Version='2' \ --vpc-zone-identifier "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" \ --max-size 5 --min-size 1

Etapa 2: Criar uma política de escalabilidade com monitoramento do objetivo

Depois de criar o grupo do Auto Scaling, é possível criar uma política de escalabilidade com monitoramento do objetivo que instrua o Amazon EC2 Auto Scaling a aumentar e diminuir dinamicamente o número de instâncias do EC2 em execução no grupo quando a carga na aplicação for alterada.

Exemplo: arquivo de configuração de rastreamento de destino

Veja a seguir, um exemplo de configuração de rastreamento de destino que mantém a utilização média da CPU em 40%. Salve esta configuração em um arquivo chamado config.json.

{ "TargetValue": 40.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "ASGAverageCPUUtilization" } }

Para obter mais informações, consulte PredefinedMetricSpecification na Referência da API do Amazon EC2 Auto Scaling.

Se preferir, você poderá personalizar a métrica usada para a escalabilidade criando uma especificação de métrica personalizada e adicionando valores para cada parâmetro do CloudWatch. Veja a seguir um exemplo de configuração de rastreamento de destino que mantém a utilização média da métrica especificada em 40%.

{ "TargetValue":40.0, "CustomizedMetricSpecification":{ "MetricName":"MyUtilizationMetric", "Namespace":"MyNamespace", "Dimensions":[ { "Name":"MyOptionalMetricDimensionName", "Value":"MyOptionalMetricDimensionValue" } ], "Statistic":"Average", "Unit":"Percent" } }

Para obter mais informações, consulte CustomizedMetricSpecification na Referência da API do Amazon EC2 Auto Scaling.

Exemplo: cpu40-target-tracking-scaling-policy

Use o comando put-scaling-policy junto com o arquivo config.json que você criou anteriormente, para criar uma política de escalabilidade chamada de cpu40-target-tracking-scaling-policy que mantenha a utilização média da CPU do grupo do Auto Scaling em 40 por cento.

aws autoscaling put-scaling-policy --policy-name cpu40-target-tracking-scaling-policy \ --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \ --target-tracking-configuration file://config.json

Se for bem-sucedido, esse comando retornará os ARNs e os nomes dos dois alarmes do CloudWatch criados em seu nome.

{ "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:228f02c2-c665-4bfd-aaac-8b04080bea3c:autoScalingGroupName/my-asg:policyName/cpu40-target-tracking-scaling-policy", "Alarms": [ { "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e", "AlarmName": "TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e" }, { "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2", "AlarmName": "TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2" } ] }