

# Otimização do ajuste de escala automático do ECS
<a name="target-tracking-faster-auto-scaling"></a>

Por padrão, o Amazon ECS publica métricas `CPUUtilization` e `MemoryUtilization` com resolução de 60 segundos. É possível configurar uma resolução de 20 segundos para acelerar o ajuste de escala automático do serviço.

As seguintes métricas predefinidas de alta resolução estão disponíveis para as políticas de escalabilidade do rastreamento de destinos:


| PredefinedMetricType | Descrição | 
| --- | --- | 
| ECSServiceAverageCPUUtilizationHighResolution | Utilização média da CPU com resolução de 20 segundos | 
| ECSServiceAverageMemoryUtilizationHighResolution | Utilização média da memória com resolução de 20 segundos | 

## Criar um novo serviço com métricas de alta resolução para um ajuste de escala automático mais rápido
<a name="faster-auto-scaling-create-service"></a>

### Console
<a name="faster-auto-scaling-create-service-console"></a>

1. Na página **Clusters**, selecione o cluster no qual deseja criar o serviço.

1. Na seção **Serviços**, selecione **Criar**.

1. No formulário Criar serviço, na seção **Configuração de monitoramento**, selecione **Adicionar configuração de métrica**.

1. Em **Nome da métrica**, selecione a métrica que você deseja coletar em alta resolução. Selecione `CPUUtilization` ou `MemoryUtilization`.

1. Em **Resolução (segundos)**, selecione **20**.

1. (Opcional) Para adicionar as duas métricas em alta resolução, escolha **Adicionar configuração métrica** novamente e repita as duas etapas anteriores para a outra métrica.

1. Na seção **Autoescala do serviço**, selecione **Usar ajuste de escala automático do serviço**.

1. Em **Número mínimo de tarefas**, insira o limite inferior do número de tarefas a serem usadas pelo ajuste de escala automático. A contagem desejada não será inferior a essa contagem.

1. Em **Número máximo de tarefas**, insira o limite superior do número de tarefas a serem usadas pelo ajuste de escala automático. A contagem desejada não ultrapassará essa contagem.

1. Em **Scaling policy type** (Tipo de política de escalabilidade), escolha **Target tracking** (Rastreamento de destino).

1. Em **Tipo de métrica**, selecione a métrica de alta resolução correspondente. Por exemplo, escolha `ECSServiceAverageCPUUtilizationHighResolution` se você configurou `CPUUtilization` na resolução de 20 segundos ou `ECSServiceAverageMemoryUtilizationHighResolution` se você configurou `MemoryUtilization` na resolução de 20 segundos.

1. Em **Valor alvo**, insira a porcentagem de utilização-alvo. O ajuste de escala automático do serviço aumenta horizontalmente a escala da sua capacidade até que a utilização média atinja o valor alvo ou até que seja atingido o número máximo de tarefas que você especificou.

1. Na seção **Configurações adicionais**, configure o seguinte:

   1. Em **Período de espera após aumentar a escala horizontalmente**, insira a quantidade de tempo em segundos para aguardar que uma atividade de ajuste de escala anterior entre em vigor.

   1. Em **Período de espera após reduzir a escala horizontalmente**, insira a quantidade de tempo em segundos após a conclusão de uma ação de redução antes que uma outra atividade de redução possa iniciar.

1. Escolha **Criar** para criar o serviço.

### AWS CLI
<a name="faster-auto-scaling-create-service-cli"></a>

1. Crie o serviço com a configuração de monitoramento usando o comando [create-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html).

   ```
   aws ecs create-service --region {{us-east-1}} \
       --cluster {{my-cluster}} \
       --service-name {{my-service}} \
       --task-definition {{my-app:1}} \
       --desired-count 2 \
       --monitoring "metricConfigurations=[{metricNames=[CPUUtilization,MemoryUtilization],resolutionSeconds=20}]"
   ```

1. Registre seu serviço como um destino escalável usando o comando [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html).

   ```
   aws application-autoscaling register-scalable-target \
       --service-namespace ecs \
       --resource-id service/{{my-cluster}}/{{my-service}} \
       --scalable-dimension ecs:service:DesiredCount \
       --min-capacity {{1}} \
       --max-capacity {{10}} \
       --region {{us-east-1}}
   ```

1. Crie uma política de dimensionamento com acompanhamento de metas utilizando uma métrica predefinida de alta resolução por meio do comando [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html).

   ```
   aws application-autoscaling put-scaling-policy \
       --service-namespace ecs \
       --resource-id service/{{my-cluster}}/{{my-service}} \
       --scalable-dimension ecs:service:DesiredCount \
       --policy-name {{my-highres-cpu-policy}} \
       --policy-type TargetTrackingScaling \
       --target-tracking-scaling-policy-configuration '{
           "TargetValue": {{50.0}},
           "PredefinedMetricSpecification": {
               "PredefinedMetricType": "ECSServiceAverageCPUUtilizationHighResolution"
           }
       }' \
       --region {{us-east-1}}
   ```

1. Verifique se a política foi criada usando o comando [describe-scaling-policies](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-policies.html).

   ```
   aws application-autoscaling describe-scaling-policies \
       --service-namespace ecs \
       --resource-id service/{{my-cluster}}/{{my-service}} \
       --scalable-dimension ecs:service:DesiredCount \
       --region {{us-east-1}}
   ```

## Atualizar um serviço existente para usar métricas de alta resolução, a fim de acelerar o ajuste de escala automático
<a name="faster-auto-scaling-update-service"></a>

A atualização de um serviço existente para utilizar métricas de alta resolução, a fim de acelerar o autoescalonamento do serviço, é um processo que ocorre em duas etapas. Primeiro, é necessário atualizar a resolução de monitoramento, o que aciona a implantação de um serviço. Após a conclusão bem-sucedida da implantação e quando todas as tarefas estiverem gerando métricas com resolução de 20 segundos, você poderá configurar uma política de escalonamento de alta resolução.

**Importante**  
Se o seu serviço utilizava anteriormente uma resolução de métricas de 60 segundos, as métricas de alta resolução para a política de escalonamento só estarão disponíveis no console do Amazon ECS depois que você atualizar o serviço para usar uma resolução de métricas de 20 segundos e a implantação do serviço for concluída.

### Console
<a name="faster-auto-scaling-update-service-console"></a>

**Etapa 1: Atualizar a resolução do monitoramento**  


1. Na página **Clusters**, escolha o cluster que contém o serviço que você deseja atualizar.

1. Na seção **Serviços**, selecione o serviço e escolha **Atualizar**.

1. No formulário Atualizar serviço, na seção **Configuração de monitoramento**, selecione **Adicionar configuração de métrica**.

1. Em **Nome da métrica**, selecione a métrica que você deseja coletar em alta resolução. Selecione `CPUUtilization` ou `MemoryUtilization`.

1. Em **Resolução (segundos)**, selecione **20**.

1. (Opcional) Para adicionar as duas métricas em alta resolução, escolha **Adicionar configuração métrica** novamente e repita as duas etapas anteriores para a outra métrica.

1. Escolha **Atualizar** para enviar a alteração. Isso aciona a implantação de um serviço.

1. Aguarde até que a implantação seja concluída. É possível acompanhar o andamento na página de detalhes do serviço, na guia **Implantações**.
**nota**  
As opções de métricas de ajuste de escala automático de alta resolução ficam desativadas na seção de escalonamento automático do serviço até que a implantação seja bem-sucedida e todas as tarefas estejam gerando dados com resolução de 20 segundos.

**Etapa 2: Configurar a política de escalabilidade em alta resolução**  


Após a conclusão da implantação, configure a política de escalabilidade usando um dos métodos a seguir:

Opção A: Página de detalhes do serviço  

1. Na página de detalhes do serviço, selecione a guia **Ajuste de escala automático do serviço**.

1. Escolha **Criar política de escalabilidade** (ou editar uma política existente).

1. Em **Scaling policy type** (Tipo de política de escalabilidade), escolha **Target tracking** (Rastreamento de destino).

1. Em **Tipo de métrica**, selecione a métrica de alta resolução. Por exemplo, o `ECSServiceAverageCPUUtilizationHighResolution` ou o `ECSServiceAverageMemoryUtilizationHighResolution`.

1. Em **Valor alvo**, insira a porcentagem de utilização-alvo.

1. Na seção **Configurações adicionais**, configure o seguinte:

   1. Em **Período de espera após aumentar a escala horizontalmente**, insira a quantidade de tempo em segundos para aguardar que uma atividade de ajuste de escala anterior entre em vigor.

   1. Em **Período de espera após reduzir a escala horizontalmente**, insira a quantidade de tempo em segundos após a conclusão de uma ação de redução antes que uma outra atividade de redução possa iniciar.

1. Escolha **Criar política de escalabilidade**.

Opção B: Formulário do Serviço de Atualização  

1. Na página de detalhes da implantação, escolha **Atualizar**.

1. Na seção **Ajuste de escala automático do serviço**, selecione **Usar autoescala do serviço** (caso ainda não esteja habilitada).

1. Em **Número mínimo de tarefas**, insira o limite inferior.

1. Em **Número máximo de tarefas**, insira o limite superior.

1. Em **Scaling policy type** (Tipo de política de escalabilidade), escolha **Target tracking** (Rastreamento de destino).

1. Em **Tipo de métrica**, selecione a métrica de alta resolução (agora habilitada após a conclusão da implantação).

1. Em **Valor alvo**, insira a porcentagem de utilização-alvo.

1. Em **Configurações adicionais**, defina o **Período de espera para aumentar a escala horizontalmente** e **Período de espera para reduzir a escala horizontalmente**.

1. Escolha **Atualizar** para enviar a alteração.

### AWS CLI
<a name="faster-auto-scaling-update-service-cli"></a>

**Etapa 1: Atualizar a resolução do monitoramento**  


1. Atualize o serviço com a configuração de monitoramento usando o comando [update-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/update-service.html).

   ```
   aws ecs update-service --region {{us-east-1}} \
       --cluster {{my-cluster}} \
       --service {{my-service}} \
       --monitoring "metricConfigurations=[{metricNames=[CPUUtilization,MemoryUtilization],resolutionSeconds=20}]"
   ```

1. Aguarde até que a implantação seja concluída. Você pode monitorar o progresso usando o comando [describe-services](https://docs.aws.amazon.com/cli/latest/reference/ecs/describe-services.html) e verificando o status da implantação.

   ```
   aws ecs describe-services --region {{us-east-1}} \
       --cluster {{my-cluster}} \
       --services {{my-service}}
   ```

1. Após a conclusão da implantação, verifique se a configuração de monitoramento está ativa, consultando a revisão do serviço. Obtenha o ARN da revisão do serviço ativo na `describe-services` saída e execute:

   ```
   aws ecs describe-service-revisions --region {{us-east-1}} \
       --service-revision-arns {{arn:aws:ecs:us-east-1:012345678910:service-revision/my-cluster/my-service/1234567890123456789}}
   ```

   Confirme se a configuração de monitoramento aparece na resposta:

   ```
   {
       "serviceRevisions": [
           {
               ...
               "monitoring": {
                   "metricConfigurations": [
                       {
                           "metricNames": ["CPUUtilization", "MemoryUtilization"],
                           "resolutionSeconds": 20
                       }
                   ]
               }
           }
       ]
   }
   ```

**Etapa 2: Configurar a política de escalabilidade em alta resolução**  


1. Registre o serviço como um destino escalável, caso ainda não esteja registrado, usando o comando [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html).

   ```
   aws application-autoscaling register-scalable-target \
       --service-namespace ecs \
       --resource-id service/{{my-cluster}}/{{my-service}} \
       --scalable-dimension ecs:service:DesiredCount \
       --min-capacity {{1}} \
       --max-capacity {{10}} \
       --region {{us-east-1}}
   ```

1. Crie uma política de dimensionamento com acompanhamento de metas utilizando uma métrica predefinida de alta resolução por meio do comando [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html). O exemplo a seguir tem como destino uma utilização de 50% da CPU:

   ```
   aws application-autoscaling put-scaling-policy \
       --service-namespace ecs \
       --resource-id service/{{my-cluster}}/{{my-service}} \
       --scalable-dimension ecs:service:DesiredCount \
       --policy-name {{my-highres-cpu-policy}} \
       --policy-type TargetTrackingScaling \
       --target-tracking-scaling-policy-configuration '{
           "TargetValue": {{50.0}},
           "PredefinedMetricSpecification": {
               "PredefinedMetricType": "ECSServiceAverageCPUUtilizationHighResolution"
           }
       }' \
       --region {{us-east-1}}
   ```

1. Verifique se a política foi criada:

   ```
   aws application-autoscaling describe-scaling-policies \
       --service-namespace ecs \
       --resource-id service/{{my-cluster}}/{{my-service}} \
       --scalable-dimension ecs:service:DesiredCount \
       --region {{us-east-1}}
   ```

## Validar o ajuste de escala automático do serviço mais rápido
<a name="faster-auto-scaling-validate"></a>

**Parte 1: Verifique se as métricas de alta resolução estão sendo publicadas**  


1. Navegue até o console do CloudWatch.

1. No painel de navegação, escolha **Metrics** e, em seguida, **All metrics**.

1. Escolha o namespace **AWS/ECS**.

1. Escolha **ClusterName, ServiceName**.

1. Localize as métricas `CPUUtilization` e `MemoryUtilization` do seu serviço.

1. Defina o período para **20 segundos**. Você deverá ver pontos de dados a cada 20 segundos, o que confirma que as métricas de alta resolução estão ativas.

**Parte 2: Verifique se a política de escalabilidade está utilizando a métrica de alta resolução**  


1. Na página de detalhes do serviço, selecione a guia **Ajuste de escala automático do serviço**.

1. Visualize suas políticas de escalabilidade atuais e confirme se a métrica está configurada para uma variante de alta resolução (`ECSServiceAverageCPUUtilizationHighResolution` ou `ECSServiceAverageMemoryUtilizationHighResolution`).

1. Como alternativa, verifique usando a CLI:

   ```
   aws application-autoscaling describe-scaling-policies \
       --service-namespace ecs \
       --resource-id service/{{my-cluster}}/{{my-service}} \
       --scalable-dimension ecs:service:DesiredCount \
       --region {{us-east-1}}
   ```

   Confirme se `PredefinedMetricType` a resposta está definida como uma métrica de alta resolução.

## Considerações
<a name="faster-auto-scaling-considerations"></a>
+ O monitoramento de alterações na configuração cria uma nova revisão do serviço e é necessário realizar uma implantação do serviço. A métrica de escalabilidade de alta resolução não estará disponível até que a implantação seja concluída e todas as tarefas estejam gerando dados com resolução de 20 segundos.
+ Métricas de alta resolução são compatíveis com serviços que utilizam Application Load Balancers e Network Load Balancers. Serviços que utilizam Classic Load Balancers sem grupos de destino não são compatíveis.
+ Métricas de alta resolução não são compatíveis com serviços que utilizam os tipos de controlador de implantação `CODE_DEPLOY` ou `EXTERNAL`.
+ Você pode visualizar a configuração de monitoramento do seu serviço usando `DescribeServiceRevisions`. A configuração de monitoramento não é retornada em nossas respostas `CreateService` ou `UpdateService`.