Configurar escalabilidade baseada no Amazon SQS - Amazon EC2 Auto Scaling

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurar escalabilidade baseada no Amazon SQS

Esta seção descreve como configurar a escala com base no Amazon SQS.

Etapa 1: criar uma métrica CloudWatch personalizada

Uma métrica personalizada é definida usando um nome de métrica e um namespace de sua escolha. Namespaces para métricas personalizadas não podem começar com AWS/. Para obter mais informações sobre a publicação de métricas personalizadas, consulte o tópico Publicar métricas personalizadas no Guia CloudWatch do usuário da Amazon.

Siga este procedimento para criar a métrica personalizada lendo primeiro as informações da sua AWS conta. Depois, calcule a métrica de backlog por instância, conforme recomendado em uma seção anterior. Por fim, publique esse número com uma CloudWatch granularidade de 1 minuto. Sempre que possível, é altamente recomendável que você escale as métricas com uma granularidade de um minuto para garantir uma resposta mais rápida às alterações na carga do sistema.

Para criar uma métrica CloudWatch personalizada (AWS CLI)
  1. Use o comando get-queue-attributes do SQS para obter o número de mensagens em espera na fila (ApproximateNumberOfMessages):

    aws sqs get-queue-attributes --queue-url https://sqs.region.amazonaws.com/123456789/MyQueue \ --attribute-names ApproximateNumberOfMessages
  2. Use o comando describe-auto-scaling-groups para obter a capacidade de execução do grupo, que é o número de instâncias no estado do ciclo de vida InService. Esse comando retorna as instâncias de um grupo do Auto Scaling juntamente com seu estado de ciclo de vida.

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg
  3. Calcule o backlog por instância dividindo o número aproximado de mensagens disponíveis para recuperação da fila pela capacidade de execução do grupo.

  4. Crie um script que seja executado a cada minuto para recuperar o valor do backlog por instância e publicá-lo em uma métrica CloudWatch personalizada. Ao publicar uma métrica personalizada, você especifica o nome da métrica, o espaço nominal, a unidade, o valor e zero ou mais dimensões. Uma dimensão consiste em um nome e um valor de dimensão.

    Para publicar sua métrica personalizada, substitua os valores do espaço reservado pelo nome da métrica preferida, pelo valor da métrica, por um namespace (desde que não comece com "AWS“) e pelas dimensões (opcional) e execute o comando a seguir. italics put-metric-data

    aws cloudwatch put-metric-data --metric-name MyBacklogPerInstance --namespace MyNamespace \ --unit None --value 20 --dimensions MyOptionalMetricDimensionName=MyOptionalMetricDimensionValue

Depois que seu aplicativo estiver emitindo a métrica desejada, os dados serão enviados para o CloudWatch. A métrica é visível no CloudWatch console. Você pode acessá-lo fazendo login AWS Management Console e navegando até a CloudWatch página. Depois, visualize a métrica navegando até a página de métricas ou procurando-a usando a caixa de pesquisa. Para obter informações sobre métricas de visualização, consulte Visualizar métricas disponíveis no Guia CloudWatch do usuário da Amazon.

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

A métrica que você criou agora pode ser adicionada a uma política de escalabilidade com rastreamento de destino.

Para criar uma política de escalabilidade com rastreamento do destino (AWS CLI)
  1. Use o comando cat a seguir para especificar um valor de destino para sua política de escalabilidade e uma especificação de métrica personalizada em um arquivo JSON chamado config.json em seu diretório inicial. Substitua cada user input placeholder por suas próprias informações. Para o TargetValue, calcule a métrica backlog aceitável por instância e insira-a aqui. Para calcular esse número, decida um valor de latência normal e divida-o pelo tempo médio necessário para processar uma mensagem, conforme descrito em uma seção anterior.

    Se você não especificou nenhuma dimensão para a métrica criada na etapa 1, não inclua nenhuma dimensão na especificação métrica personalizada.

    $ cat ~/config.json { "TargetValue":100, "CustomizedMetricSpecification":{ "MetricName":"MyBacklogPerInstance", "Namespace":"MyNamespace", "Dimensions":[ { "Name":"MyOptionalMetricDimensionName", "Value":"MyOptionalMetricDimensionValue" } ], "Statistic":"Average", "Unit":"None" } }
  2. Use o comando put-scaling-policy, juntamente com o arquivo config.json criado na etapa anterior, para criar sua política de escalabilidade.

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

    Isso cria dois alarmes: um para escalabilidade e outro para dimensionamento. Ele também retorna o Amazon Resource Name (ARN) da política registrada CloudWatch, que CloudWatch usa para invocar a escalabilidade sempre que o limite métrico é violado.

Etapa 3: Testar sua política de escalabilidade

Depois que a configuração estiver concluída, verifique se a sua política de escalabilidade está funcionando. Você pode testá-lo aumentando o número de mensagens em sua fila do SQS e, em seguida, verificando se seu grupo de Auto Scaling iniciou uma instância adicional. EC2 Você também pode testá-lo diminuindo o número de mensagens na fila do SQS e, em seguida, verificando se o grupo Auto Scaling encerrou uma instância. EC2

Para testar a função de expansão
  1. Siga as etapas em Criar uma fila padrão do Amazon SQS e enviar uma mensagem ou Criar uma fila FIFO do Amazon SQS e enviar uma mensagem para adicionar mensagens à sua fila. Certifique-se de que você aumentou o número de mensagens na fila para que a métrica backlog por instância exceda o valor de destino.

    Pode levar alguns minutos para que as alterações invoquem o alarme.

  2. Use o comando describe-auto-scaling-groups para verificar se o grupo executou uma instância.

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
Para testar a função de redução
  1. Siga as etapas em Receber e excluir mensagens (console) para excluir mensagens da fila. Certifique-se de que você diminuiu o número de mensagens na fila para que a métrica backlog por instância não fique abaixo do valor de destino.

    Pode levar alguns minutos para que as alterações invoquem o alarme.

  2. Use o comando describe-auto-scaling-groups para verificar se o grupo encerrou uma instância.

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg