

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
<a name="scale-sqs-queue-cli"></a>

O procedimento a seguir descreve como configurar a escalabilidade com base no Amazon SQS. Você aprenderá a criar uma métrica CloudWatch personalizada, a configurar uma política de rastreamento de metas usando o AWS CLI e a testar sua configuração. 

Antes de começar, verifique se você tem o AWS CLI [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html). 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](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/).

**Topics**
+ [

## Etapa 1: criar uma métrica CloudWatch personalizada
](#create-sqs-cw-alarms-cli)
+ [

## Etapa 2: Criar uma política de escalabilidade com monitoramento do objetivo
](#create-sqs-policies-cli)
+ [

## Etapa 3: Testar sua política de escalabilidade
](#validate-sqs-scaling-cli)

## Etapa 1: criar uma métrica CloudWatch personalizada
<a name="create-sqs-cw-alarms-cli"></a>

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](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html) 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](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sqs/get-queue-attributes.html) 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
   ```

1. Use o comando [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) 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
   ```

1. 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. 

1. 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](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/put-metric-data.html) 

   ```
   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 Console de gerenciamento da AWS 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](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html) no *Guia CloudWatch do usuário da Amazon*.

## Etapa 2: Criar uma política de escalabilidade com monitoramento do objetivo
<a name="create-sqs-policies-cli"></a>

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"
      }
   }
   ```

1. Use o comando [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html), 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
<a name="validate-sqs-scaling-cli"></a>

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**

1. Siga as etapas em [Criar uma fila padrão do Amazon SQS e enviar uma mensagem](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/creating-sqs-standard-queues.html) ou [Criar uma fila FIFO do Amazon SQS e enviar uma mensagem](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/creating-sqs-fifo-queues.html) 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.

1. Use o comando [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) 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)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/step-receive-delete-message.html) 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.

1. Use o comando [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) para verificar se o grupo encerrou uma instância.

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