Configurar escalabilidade baseada no Amazon SQS
O procedimento a seguir descreve como configurar a escalabilidade com base no Amazon SQS. Você aprenderá como criar uma métrica personalizada do CloudWatch, como configurar uma política de rastreamento de destino usando a AWS CLI e como testar sua configuração.
Antes de iniciar, certifique-se de que você tenha a AWS CLI instalada e configurada. Além disso, é necessário ter uma fila do Amazon SQS para usar. Nas tarefas a seguir, supõe-se que você já tenha uma fila (padrão ou FIFO), um grupo do Auto Scaling e instâncias do EC2 executando a aplicação que usa a fila.
Para obter mais informações sobre o Amazon SQS, consulte o Guia do desenvolvedor do Amazon Simple Queue Service.
Tarefas
Etapa 1: Criar uma métrica personalizada do CloudWatch
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 Manual do usuário do Amazon CloudWatch.
Siga este procedimento para criar a métrica personalizada lendo primeiro as informações da sua conta da AWS. Depois, calcule a métrica de backlog por instância, conforme recomendado em uma seção anterior. Por fim, publique esse número no CloudWatch a uma 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 personalizada do CloudWatch (AWS CLI)
-
Use o comando do SQS get-queue-attributes
para obter o número de mensagens em espera na fila ( ApproximateNumberOfMessages).aws sqs get-queue-attributes --queue-urlhttps://sqs.region.amazonaws.com/123456789/MyQueue\ --attribute-names ApproximateNumberOfMessages -
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-namesmy-asg -
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.
-
Criar um script que seja executado a cada minuto para recuperar o valor do backlog por instância e publicá-lo em uma métrica personalizada do CloudWatch. 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 em
itálicopelo 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 seguinte comando put-metric-data. aws cloudwatch put-metric-data --metric-nameMyBacklogPerInstance--namespaceMyNamespace\ --unit None --value20--dimensionsMyOptionalMetricDimensionName=MyOptionalMetricDimensionValue
Depois que sua aplicação estiver emitindo a métrica desejada, os dados serão enviados para o CloudWatch. A métrica é visível no console do CloudWatch. Você pode acessá-la fazendo login no Console de gerenciamento da AWS e navegando para a página do CloudWatch. Depois, visualize a métrica navegando até a página de métricas ou procurando-a usando a caixa de pesquisa. Para obter mais informações sobre visualização de métricas, consulte View available metrics (Visualizar métricas disponíveis) no Manual do usuário do Amazon CloudWatch.
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)
-
Use o comando
cata 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 chamadoconfig.jsonem seu diretório inicial. Substitua cadaespaço reservado para entrada do usuáriopor suas próprias informações. Para oTargetValue, 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" } } -
Use o comando put-scaling-policy
, juntamente com o arquivo config.jsonque você criou na etapa anterior, para criar sua política de escalabilidade.aws autoscaling put-scaling-policy --policy-namesqs100-target-tracking-scaling-policy\ --auto-scaling-group-namemy-asg--policy-type TargetTrackingScaling \ --target-tracking-configurationfile://~/config.jsonIsso cria dois alarmes: um para escalabilidade e outro para dimensionamento. Isso também retorna o nome do recurso da Amazon (ARN) da política registrada no CloudWatch que o CloudWatch usa para invocar a dimensionamento sempre que a métrica for violada.
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. É possível testá-la aumentando o número de mensagens na fila do SQS e verificando se o grupo do Auto Scaling iniciou uma instância do EC2 adicional. Também é possível testá-la diminuindo o número de mensagens na fila do SQS e verificando se o grupo do Auto Scaling terminou uma instância do EC2.
Para testar a função de expansão
-
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.
-
Use o comando describe-auto-scaling-groups
para verificar se o grupo iniciou uma instância. aws autoscaling describe-auto-scaling-groups --auto-scaling-group-namemy-asg
Para testar a função de redução
-
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.
-
Use o comando describe-auto-scaling-groups
para verificar se o grupo terminou uma instância. aws autoscaling describe-auto-scaling-groups --auto-scaling-group-namemy-asg