

# Usar padrões históricos para escalar os serviços do Amazon ECS com escalabilidade preditiva
<a name="predictive-auto-scaling"></a>

A escalabilidade preditiva utiliza dados de carga anteriores dos fluxos de tráfego para analisar padrões diários ou semanais. Em seguida, ela usa essa análise para prever necessidades futuras e aumentar proativamente as tarefas em seu serviço, conforme necessário.

O ajuste de escala automático preditivo é mais útil nas situações a seguir.
+ Tráfego cíclico: maior utilização de recursos durante o horário comercial e utilização reduzida de recursos durante a noite e nos fins de semana.
+ Padrões recorrentes de workloads intermitentes: exemplos incluem processamento em lote, testes ou análise periódica de dados.
+ Aplicações com tempo de inicialização longo: isso pode afetar a performance da aplicação durante eventos de aumentar a escala horizontalmente, causando latência perceptível.

Se suas aplicações demoram muito para inicializar e o tráfego aumenta em um padrão regular, considere o uso de escalabilidade preditiva. Ela ajuda você a escalar mais rapidamente aumentando proativamente o número de tarefas para cargas previstas, em vez de usar políticas de escalabilidade dinâmica, como Rastreamento de destino ou Escalabilidade em etapas, sozinhas. Ao ajudar você a evitar a possibilidade de provisionar excessivamente o número de tarefas, a escalabilidade preditiva também pode economizar dinheiro.

Por exemplo, considere uma aplicação com elevado índice de utilização durante o horário comercial e baixo uso durante a noite. No início de cada dia útil, a escalabilidade preditiva pode aumentar a escala para execução de tarefas antes do primeiro fluxo de tráfego. Isso ajuda sua aplicação a manter alta disponibilidade e performance ao passar de um período de menor utilização para um período de maior utilização. Você não precisa esperar que a escalabilidade dinâmica reaja à mudança de tráfego. Você também não precisa gastar tempo revisando os padrões de carga da aplicação e tentando alocar a quantidade certa de tarefas usando a escalabilidade programada.

O ajuste de escala preditivo é um recurso de nível de serviço que dimensiona a tarefa do seu serviço independentemente do dimensionamento da capacidade computacional subjacente (por exemplo, EC2 ou Fargate). Para o Fargate, a AWS gerencia e ajusta automaticamente a escala da capacidade subjacente com base nos requisitos da tarefa. Para a capacidade do EC2, é possível usar provedores de capacidade do grupo do Auto Scaling para escalar automaticamente as instâncias do EC2 subjacentes com base nos requisitos de ajuste de escala das suas tarefas.

**Topics**
+ [Visão geral da escalabilidade preditiva](#predictive-auto-scaling-overview)
+ [Criar uma política de escalabilidade preditiva](predictive-scaling-create-policy.md)
+ [Avaliar as políticas de escalabilidade preditiva](predictive-scaling-graphs.md)
+ [Substituir a previsão](predictive-scaling-overriding-forecast-capacity.md)
+ [Usar métricas personalizadas](predictive-scaling-custom-metrics.md)

## Saiba como o ajuste de escala preditivo funciona com o Amazon ECS
<a name="predictive-auto-scaling-overview"></a>

Aqui você pode conhecer as considerações relacionadas o uso da escalabilidade preditiva, como ela funciona e quais são os limites.

### Considerações sobre o uso da escalabilidade preditiva
<a name="predictive-auto-scaling-considerations"></a>
+ Você deseja garantir que a escalabilidade preditiva seja adequada à sua workload. Você pode verificar isso configurando políticas de escalabilidade no modo **somente previsão** e ver a recomendação feita pelo console. Você deve avaliar a previsão e as recomendações antes de começar a usar a escalabilidade preditiva.
+ Antes que a escalabilidade preditiva possa iniciar a previsão, pelo menos 24 horas de dados históricos são necessários. Quanto mais dados históricos estiverem disponíveis, mais eficaz será a previsão, sendo duas semanas o ideal. Também será necessário aguardar 24 horas antes que a escalabilidade preditiva possa gerar novas previsões quando um serviço do Amazon ECS é excluído e um novo serviço é criado. Uma maneira de acelerar isso é usar métricas personalizadas para agregar métricas no novo serviço e no serviço antigo do Amazon ECS.
+ Escolha uma métrica de carga que represente com precisão a carga total da sua aplicação e que seja o aspecto mais importante a ser escalado.
+ A escalabilidade dinâmica com escalabilidade preditiva ajuda você a acompanhar de perto a demanda da sua aplicação para que você possa reduzir a escala durante períodos de calmaria e aumentá-la durante aumentos inesperados no tráfego. Quando várias políticas de escalabilidade estão ativas, cada política determina o número de tarefas desejadas de forma independente, e esse número é definido como o maior entre eles.
+ É possível usar a escalabilidade preditiva junto com suas políticas de escalabilidade dinâmica, como rastreamento de destino ou escalabilidade em etapas, para que suas aplicações sejam dimensionadas com base em padrões históricos e em tempo real. Por si só, a escalabilidade preditiva não reduz a escala para suas tarefas. 
+ Se você usar um perfil personalizado ao chamar a API `register-scalable-target`, poderá receber um erro dizendo que a política de escalabilidade preditiva só pode funcionar com o SLR habilitado. Nesse caso, você deve chamar `register-scalable-target` novamente, mas sem role-arn. Use SLR ao registrar o destino escalável e chame a API `put-scaling-policy`.

### Como a escalabilidade preditiva funciona
<a name="predictive-auto-scaling-details"></a>

Use a escalabilidade preditiva criando uma política de escala preditiva que especifique a métrica do CloudWatch a ser monitorada e analisada. A escalabilidade preditiva deve ter pelo menos 24 horas de dados para começar a prever valores futuros.

Depois que você cria a política, a escala preditiva começa a analisar os dados de métricas dos últimos 14 dias para identificar padrões. Essa análise é usada para gerar as próximas 48 horas de previsões horárias de requisitos. Os dados mais recentes do CloudWatch são usados ​​para atualizar a previsão a cada seis horas. À medida que novos dados são recebidos, a escalabilidade preditiva é capaz de melhorar continuamente a precisão das previsões futuras.

Quando você ativa a escala preditiva pela primeira vez, ela é executada no modo *somente de previsão*. Eae gera previsões nesse modo, mas não escala seu serviço do Amazon ECS com base nessas previsões. Isso significa que você pode avaliar a exatidão e a adequação da previsão. Você pode visualizar os dados de previsão usando a operação da API `GetPredictiveScalingForecast` ou o Console de gerenciamento da AWS.

Quando você decidir começar a usar a escala preditiva, alterne a política de escalabilidade para o modo *prever e escalar*. O cenário a seguir ocorre nesse modo.

Seu serviço do Amazon ECS é escalado no início de cada hora com base na previsão para essa hora, por padrão. Você pode optar por começar mais cedo usando a propriedade `SchedulingBufferTime` na operação da API `PutScalingPolicy`. Isso faz com que novas tarefas sejam iniciadas antes da demanda prevista e concede a elas tempo para inicializar e se preparar para lidar com o tráfego.

### Limite máximo de tarefas
<a name="predictive-scaling-maximum-tasks-limit"></a>

Ao registrar serviços do Amazon ECS para escalabilidade, você define um número máximo de tarefas que podem ser iniciadas por serviço. Por padrão, quando políticas de escalabilidade estão definidas, não é possível aumentar o número de tarefas além do limite máximo.

Como alternativa, é possível permitir que o número máximo de tarefas do serviço seja aumentado automaticamente se a previsão se aproximar ou exceder o número máximo de tarefas do serviço do Amazon ECS.

**Atenção**  
Tenha cuidado ao permitir que o número máximo de tarefas seja aumentado automaticamente. Isso pode fazer com que mais instâncias do que o pretendido sejam executadas se a capacidade máxima aumentada não for monitorada e gerenciada. O número máximo de tarefas aumentado passará a ser o novo número máximo normal de tarefas para o serviço do Amazon ECS até que você o atualize manualmente. O número máximo de tarefas não diminui automaticamente de volta para o máximo original.

### Regiões compatíveis
<a name="predictive-auto-scaling-supported-regions"></a>
+ Leste dos EUA (Norte da Virgínia)
+ Leste dos EUA (Ohio)
+ Oeste dos EUA (N. da Califórnia)
+ Oeste dos EUA (Oregon)
+ África (Cidade do Cabo)
+ Ásia-Pacífico (Hong Kong)
+ Ásia-Pacífico (Jacarta)
+ Ásia-Pacífico (Mumbai)
+ Ásia-Pacífico (Osaka)
+ Ásia-Pacífico (Seul)
+ Ásia-Pacífico (Singapura)
+ Ásia-Pacífico (Sydney)
+ Ásia-Pacífico (Tóquio)
+ Canadá (Central)
+ China (Pequim)
+ China (Ningxia)
+ Europa (Frankfurt)
+ Europa (Irlanda)
+ Europa (Londres)
+ Europa (Milão)
+ Europa (Paris)
+ Europa (Estocolmo)
+ Oriente Médio (Bahrein)
+ South America (São Paulo)
+ AWS GovCloud (Leste dos EUA)
+ AWS GovCloud (Oeste dos EUA)

# Criar uma política de escalabilidade preditiva para ajuste de escala automático do serviço do Amazon ECS
<a name="predictive-scaling-create-policy"></a>

Crie uma política de escalabilidade preditiva para que o Amazon ECS aumente ou diminua o número de tarefas executadas pelo serviço com base em dados de histórico. 

**nota**  
Um novo serviço precisa fornecer pelo menos 24 horas de dados antes que uma previsão possa ser gerada.

## Console
<a name="predictive-scaling-policy-aws-console"></a>

1. Além das permissões padrão do IAM para criar e atualizar serviços, você precisa de permissões adicionais. Para obter mais informações, consulte [Permissões obrigatórias do IAM para o ajuste de escala automático do serviço Amazon ECS](auto-scaling-IAM.md).

1. Determine as métricas a serem usadas para a política. As seguintes métricas estão disponíveis:
   +  **ECSServiceAverageCPUUtilization**: utilização média da CPU que o serviço deveria usar. 
   + **ECSServiceAverageMemoryUtilization**: utilização média da memória que o serviço deveria usar. 
   + **ALBRequestCountPerTarget**: o número médio de solicitações por minuto que a tarefa deve idealmente receber.

   Como alternativa, você pode usar uma métrica personalizada. É necessário definir os seguintes valores:
   + Carga: uma métrica que representa com precisão a carga total da aplicação e é o aspecto mais importante a ser escalado.
   + Métrica de escalabilidade: o melhor indicador de quanta utilização é ideal para sua aplicação.

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Na página **Clusters**, escolha o cluster.

1. Na página de detalhes do cluster, na seção **Serviços**, escolha o serviço.

   A página de detalhes do serviço é exibida.

1. Escolha **Ajuste de escala automático do serviço** e depois **Definir o número de tarefas**.

1. Em **Contagem de tarefas do serviço do Amazon ECS**, escolha **Usar ajuste de escala automático**.

   A seção **Contagem de tarefas** é exibida.

   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 **Máximo**, 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. Escolha **Salvar**.

      A página de políticas será exibida.

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

   A página **Criar política** é exibida.

1. Em **Tipo de política de escalabilidade**, escolha **Escalabilidade preditiva**.

1. Em **Policy name** (Nome da política), insira o nome da política.

1. Em **Métricas**, escolha suas métricas na lista de opções.

   Se tiver escolhido **Application Load Balancer request count per target** (Número de solicitações do Application Load Balancer por destino), escolha um grupo de destino em **Target group** (Grupo de destino). A opção **Número de solicitações do Application Load Balancer por destino** só será válida de você tiver anexado um grupo de destino do Application Load Balancer para seu serviço. 

   Se você escolheu **Par de métricas personalizadas**, escolha métricas individuais nas listas para **Métrica de carga** e **Métrica de escalabilidade**. 

1. Em **Utilização pretendida**, insira o valor desejado para o percentual de tarefas que o Amazon ECS deve manter. O ajuste de escala automático do serviço expandirá sua capacidade até que a utilização média seja igual à utilização pretendida ou até atingir o número máximo de tarefas especificado.

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

## AWS CLI
<a name="predictive-scaling-policy-aws-cli"></a>

Use a AWS CLI conforme mostrado a seguir para configurar políticas de escalabilidade preditiva para seu serviço do Amazon ECS. Substitua cada *espaço reservado para entrada do usuário* por suas próprias informações.

Para obter mais informações sobre as métricas do CloudWatch que você pode especificar para uma política de escalabilidade preditiva, consulte [PredictivEscalingMetricSpecification](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_PredictiveScalingMetricSpecification.html) na *Referência da API do Amazon EC2 Auto Scaling*.

### Exemplo 1: uma política de escalabilidade preditiva com memória predefinida.
<a name="predictive-scaling-cli-example-one"></a>

Veja a seguir um exemplo de política com uma configuração de memória predefinida.

```
cat policy.json
{
    "MetricSpecifications": [
        {
            "TargetValue": 40,
            "PredefinedMetricPairSpecification": {
                "PredefinedMetricType": "ECSServiceMemoryUtilization"
            }
        }
    ],
    "SchedulingBufferTime": 3600,
    "MaxCapacityBreachBehavior": "HonorMaxCapacity",
    "Mode": "ForecastOnly"
}
```

O exemplo a seguir ilustra a criação da política via execução do comando [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scaling-policy.html) com o arquivo de configuração especificado.

```
aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--region us-east-1 \
--policy-name predictive-scaling-policy-example \
--resource-id service/MyCluster/test \
--policy-type PredictiveScaling \
--scalable-dimension ecs:service:DesiredCount \
--predictive-scaling-policy-configuration file://policy.json
```

Em caso de êxito, esse comando retornará o ARN da política.

```
{
    "PolicyARN": "arn:aws:autoscaling:us-east-1:012345678912:scalingPolicy:d1d72dfe-5fd3-464f-83cf-824f16cb88b7:resource/ecs/service/MyCluster/test:policyName/predictive-scaling-policy-example",
    "Alarms": []
}
```

### Exemplo 2: uma política de escalabilidade preditiva com CPU predefinida.
<a name="predictive-scaling-cli-example-two"></a>

Veja a seguir um exemplo de política com uma configuração de CPU predefinida.

```
cat policy.json
{
    "MetricSpecifications": [
        {
            "TargetValue": 0.00000004,
            "PredefinedMetricPairSpecification": {
                "PredefinedMetricType": "ECSServiceCPUUtilization"
            }
        }
    ],
    "SchedulingBufferTime": 3600,
    "MaxCapacityBreachBehavior": "HonorMaxCapacity",
    "Mode": "ForecastOnly"
}
```

O exemplo a seguir ilustra a criação da política via execução do comando [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scaling-policy.html) com o arquivo de configuração especificado.

```
aws aas put-scaling-policy \
--service-namespace ecs \
--region us-east-1 \
--policy-name predictive-scaling-policy-example \
--resource-id service/MyCluster/test \
--policy-type PredictiveScaling \
--scalable-dimension ecs:service:DesiredCount \
--predictive-scaling-policy-configuration file://policy.json
```

Em caso de êxito, esse comando retornará o ARN da política.

```
{
    "PolicyARN": "arn:aws:autoscaling:us-east-1:012345678912:scalingPolicy:d1d72dfe-5fd3-464f-83cf-824f16cb88b7:resource/ecs/service/MyCluster/test:policyName/predictive-scaling-policy-example",
    "Alarms": []
}
```

# Avaliar as políticas de escalabilidade preditiva para o Amazon ECS
<a name="predictive-scaling-graphs"></a>

Antes de usar uma política de escalabilidade preditiva para escalar seus serviços, revise as recomendações e outros dados da política no console do Amazon ECS. Isso é importante porque você não quer que uma política de escalabilidade preditiva escale sua capacidade real até saber que suas previsões estão corretas.

Se o serviço for novo, aguarde 24 horas para criar a primeira previsão.

Ao criar uma previsão, o AWS usa dados históricos. Se seu serviço ainda não tiver muitos dados históricos recentes, a escalabilidade preditiva poderá preencher temporariamente a previsão com agregados criados com base nos agregados históricos disponíveis no momento. As previsões são preenchidas até duas semanas anteriores à data de criação da política.

## Visualizar recomendações de escalabilidade preditiva
<a name="view-predictive-scaling-recommendations"></a>

Para realizar uma análise eficaz, o ajuste de escala automático do serviço deve ter pelo menos duas políticas de escalabilidade preditiva para comparação. (Porém, ainda é possível analisar as conclusões de uma única política.) Ao criar várias políticas, é possível avaliar uma política que usa uma métrica em relação a uma política que usa outra métrica. Também é possível avaliar o impacto de diferentes combinações de valores de destino e métricas. Depois que as políticas de escalabilidade preditiva são criadas, o Amazon ECS imediatamente começa a avaliar qual política faria um trabalho melhor ao escalar seu grupo.

**Para visualizar suas recomendações no console do Amazon ECS**

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Na página **Clusters**, escolha o cluster.

1. Na página de detalhes do cluster, na seção **Serviços**, escolha o serviço.

   A página de detalhes do serviço é exibida.

1. Escolha **Ajuste de escala automático do serviço**.

1. Escolha a política de escalabilidade preditiva e, em seguida, escolha **Ações**, **Escalabilidade preditiva** e **Visualizar recomendação**.

   Você pode visualizar detalhes sobre uma política junto com nossa recomendação. A recomendação indica se é melhor usar a política de escalabilidade preditiva ou não usá-la. 

   Se você não tiver certeza se uma política de escalabilidade preditiva é apropriada para seu grupo, analise as colunas **Impacto na disponibilidade** e **Impacto no custo** para escolher a política certa. As informações de cada coluna indicam qual é o impacto da política. 
   + **Impacto na disponibilidade**: descreve se a política evitaria um impacto negativo na disponibilidade ao provisionar tarefas suficientes para lidar com a workload em comparação com não usar a política.
   + **Impacto no custo**: descreve se a política evitaria um impacto negativo em seus custos ao não provisionar em excesso as tarefas em comparação com não usar a política. Com o provisionamento excessivo, seus serviços tornam-se subutilizados ou ociosos, o que só aumenta o impacto nos custos.

   Se você tiver várias políticas, uma etiqueta **Melhor previsão** será exibida ao lado do nome da política que oferece mais benefícios de disponibilidade a um custo menor. O impacto na disponibilidade tem um peso maior. 

1. (Opcional) Para selecionar o período de tempo desejado para os resultados da recomendação, escolha o valor de sua preferência no menu suspenso **Período de avaliação**: **2 dias**, **1 semana** ou **2 semanas**. Por padrão, o período de avaliação são as duas últimas semanas. Um período de avaliação mais longo oferece mais pontos de dados para os resultados da recomendação. Porém, adicionar mais pontos de dados pode não melhorar os resultados, se seus padrões de carga tiverem sido alterados, como após um período de demanda excepcional. Nesse caso, é possível obter uma recomendação mais focada analisando dados mais recentes.

**nota**  
As recomendações são geradas somente para políticas que estão no modo **Somente previsão**. O recurso de recomendações funciona melhor quando uma política está no modo **Somente previsão** durante o período de avaliação. Se você iniciar uma política no modo de **Prever e escalar** e alterná-la para o modo **Somente previsão** posteriormente, é provável que as conclusões dessa política tenham desvios. Isso ocorre porque a política já contribuiu em favor da capacidade real.

## Analisar grafos de monitoramento de escalabilidade preditiva
<a name="review-predictive-scaling-monitoring-graphs"></a>

No console, é possível analisar a previsão dos dias, semanas ou meses anteriores para visualizar a performance da política ao longo do tempo. Você também pode usar essas informações para avaliar a precisão das previsões ao decidir se permitirá que uma política escale o número real de tarefas.

**Para revisar grafos de monitoramento de escalabilidade preditiva no console do Amazon ECS**

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Na página **Clusters**, escolha o cluster.

1. Na página de detalhes do cluster, na seção **Serviços**, escolha o serviço.

   A página de detalhes do serviço é exibida.

1. Escolha **Ajuste de escala automático do serviço**.

1. Escolha a política de escalabilidade preditiva e, em seguida, escolha **Ações**, **Escalabilidade preditiva** e **Visualizar grafo**.

1. Na seção **Monitorar**, você pode visualizar as previsões passadas e futuras de carga e de capacidade da política em relação aos valores reais. O grafo **Carga** exibe a previsão de carga e os valores reais para a métrica de carga escolhida. O grafo **Capacidade** mostra o número de tarefas previstas pela política. Também inclui o número real de tarefas iniciadas. A linha vertical separa os valores históricos das previsões futuras. Esses grafos ficam disponíveis logo após a criação da política. 

1. (Opcional) Para alterar a quantidade de dados históricos exibidos no gráfico, escolha o valor de sua preferência no menu suspenso **Período de avaliação** na parte superior da página. O período de avaliação não transforma os dados desta página de maneira alguma. Ele altera apenas a quantidade de dados históricos exibidos.

**Compare dados no grafo **Carga****  
Cada linha horizontal representa um conjunto diferente de pontos de dados relatados em intervalos de uma hora:

1. A **Carga real observada** usa a estatística SUM da métrica de carga escolhida para exibir a carga horária total no passado.

1. A **Carga prevista pela política** exibe a previsão de carga horária. Essa previsão é baseada nas duas semanas anteriores de observações da carga real.

**Compare dados no grafo **Capacidade****  
Cada linha horizontal representa um conjunto diferente de pontos de dados relatados em intervalos de uma hora:

1. **Número real de tarefas observado** mostra a capacidade real do serviço do Amazon ECS no passado, o que depende de suas outras políticas de escalabilidade e do tamanho mínimo do grupo em vigor no período selecionado.

1. **Capacidade prevista pela política** exibe a capacidade básica que você pode esperar ter no início de cada hora quando a política estiver no modo de **Prever e escalar**.

1. **Número de tarefas necessário inferido** mostra o número ideal de tarefas em seu serviço para manter a métrica de escalabilidade no valor de destino que você escolheu.

1. **Número mínimo de tarefas** mostra o número mínimo de tarefas em seu serviço.

1. **Capacidade máxima** mostra o número máximo de tarefas em seu serviço.

Com o objetivo de calcular a capacidade necessária inferida, começamos supondo que cada tarefa é igualmente utilizada em um valor de destino especificado. Na prática, o número de tarefas não é utilizado igualmente. Porém, ao supor que a utilização é distribuída uniformemente entre tarefas, podemos fazer uma estimativa da probabilidade de quantidade de capacidade necessária. O requisito de número de tarefas é calculado de modo a ser inversamente proporcional à métrica de escalabilidade que você usou para sua política de escalabilidade preditiva. Em outras palavras, à medida que o número de tarefas aumenta, a métrica de escalabilidade diminui na mesma proporção. Por exemplo, se o número de tarefas dobra, a métrica de escalabilidade deve diminuir pela metade. 

A fórmula da capacidade necessária inferida:

 `sum of (actualServiceUnits*scalingMetricValue)/(targetUtilization)`

Por exemplo, pegamos `actualServiceUnits` (`10`) e `scalingMetricValue` (`30`) para determinada hora. Em seguida, pegamos a `targetUtilization` especificada em sua política de escalabilidade preditiva (`60`) e calculamos a capacidade necessária inferida para a mesma hora. Isso retorna um valor de `5`. Isso significa que cinco é a quantidade inferida de capacidade necessária para manter a capacidade em proporção inversa direta ao valor de destino da métrica de escala.

**nota**  
Há várias alavancas disponíveis para você ajustar e melhorar a economia de custos e a disponibilidade de sua aplicação.  
Utilize escalabilidade preditiva para a capacidade de linha de base e escalabilidade dinâmica para lidar com capacidade adicional. A escalabilidade dinâmica funciona independentemente da escalabilidade preditiva, aumentando e reduzindo a escala horizontalmente com base na utilização atual. Primeiro, o Amazon ECS calcula o número recomendado de tarefas para cada política de escalabilidade não programada. Em seguida, ele escala com base na política que fornece o maior número de tarefas.
Para permitir que a redução da escala horizontalmente ocorra quando a carga diminui, seu serviço deve sempre ter pelo menos uma política de escalabilidade dinâmica com a parte de redução da escala horizontalmente habilitada.
Você pode melhorar a performance da escalabilidade verificando se a capacidade mínima e máxima não são muito restritivas. Uma política com um número recomendado de tarefas que não esteja dentro da faixa de capacidade mínima e máxima será impedida de aumentar e reduzir a escala horizontalmente.

# Monitorar métricas de escalabilidade preditiva para Amazon ECS com o CloudWatch
<a name="predictive-scaling-monitoring"></a>

É possível usar o Amazon CloudWatch para monitorar seus dados para escalabilidade preditiva. Uma política de escalabilidade preditiva coleta dados que são usados para prever sua carga futura. Os dados coletados são armazenados automaticamente no CloudWatch em intervalos regulares e podem ser usados para visualizar a performance da política ao longo do tempo. Você também pode criar alarmes do CloudWatch para receber uma notificação quando os indicadores de desempenho mudarem além dos limites definidos por você.

## Visualizar dados históricos de previsão
<a name="visualize-historical-forecast-data"></a>

Os dados de previsão de carga para uma política de escalabilidade preditiva podem ser visualizados no CloudWatch e podem ser úteis ao visualizar previsões em relação a outras métricas do CloudWatch em um único grafo. Você também pode ver tendências ao longo do tempo visualizando um intervalo de tempo mais amplo. É possível acessar até 15 meses de métricas históricas a fim de obter uma melhor visão do desempenho da política.

**Para visualizar dados históricos de previsão usando o console do CloudWatch**

1. Abra o console do CloudWatch, em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. No painel de navegação, escolha **Metrics** (Métricas) e, em seguida, **All metrics** (Todas as métricas).

1. Selecione o namespace da métrica **Ajuste de escala automático da aplicação**.

1. Escolha **Previsões de carga de escalabilidade preditiva**.

1. No campo de pesquisa, insira o nome da política de escalabilidade preditiva ou o nome do grupo do serviço do Amazon ECS e pressione a tecla Enter para filtrar os resultados. 

1. Para criar um gráfico de uma métrica, marque a caixa de seleção ao lado da métrica. Para alterar o nome do gráfico, escolha o ícone de lápis. Para alterar o período, selecione um dos valores predefinidos ou escolha **custom (personalizado)**. Para obter mais informações, consulte [Representar uma métrica em gráficos](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph_a_metric.html) no *Guia do usuário do Amazon CloudWatch*.

1. Para alterar a estatística, escolha a guia **Métricas em gráfico**. Escolha o cabeçalho de coluna ou um valor individual e, em seguida, escolha uma estatística diferente. Embora seja possível escolher qualquer estatística para cada métrica, nem todas as estatísticas são úteis para as métricas **PredictiveScalingLoadForecast**. Por exemplo, as estatísticas **Média**, **Mínimo** e **Máximo** são úteis, mas a estatística **Soma** não.

1. Para adicionar outra métrica ao gráfico, em **Browse** (Procurar), escolha **All** (Todas), encontre a métrica específica e marque a caixa de seleção ao lado dela. Adicione até 10 métricas.

1. (Opcional) Para adicionar o gráfico a um painel do CloudWatch, escolha **Actions** (Ações), **Add to dashboard** (Adicionar ao painel).

## Criar métricas de precisão usando matemática métrica
<a name="create-accuracy-metrics"></a>

Com matemática métrica, você pode consultar várias métricas do CloudWatch e usar expressões matemáticas para criar novas séries temporais de acordo com essas métricas. Você pode visualizar as séries temporais resultantes no console do CloudWatch e adicioná-las aos painéis. Para obter mais informações sobre matemática métrica, consulte [Usar matemática métrica](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html) no *Guia do usuário do Amazon CloudWatch*.

Usando matemática métricas, é possível representar graficamente de diferentes maneiras os dados gerados pelo ajuste de escala automático para a escalabilidade preditiva. Isso ajuda a monitorar o desempenho da política ao longo do tempo e a entender se é possível melhorar sua combinação de métricas.

Por exemplo, você pode usar uma expressão de matemática métrica para monitorar o [mean absolute percentage error](https://en.wikipedia.org/wiki/Mean_absolute_percentage_error) (MAPE – Erro percentual absoluto médio). A métrica MAPE ajuda a monitorar a diferença entre os valores previstos e os valores efetivos observados durante uma determinada janela de previsão. Mudanças no valor de MAPE podem indicar se o desempenho da política está se degradando ao longo do tempo conforme a natureza da sua aplicação muda. Um aumento no MAPE sinaliza uma lacuna maior entre os valores previstos e os valores efetivos. 

**Exemplo: expressão de matemática métrica**

Para começar a usar esse tipo de gráfico, você pode criar uma expressão de matemática métrica como a mostrada no exemplo a seguir.



Em vez de uma só métrica, há uma matriz de estruturas de consulta de dados métricos para `MetricDataQueries`. Cada item em `MetricDataQueries` obtém uma métrica ou executa uma expressão matemática. O primeiro item, `e1`, é a expressão matemática. A expressão designada define o parâmetro `ReturnData` como `true`, resultando na produção de uma única série temporal. Para todas as outras métricas, o valor `ReturnData` é `false`. 

No exemplo, a expressão designada usa os valores efetivos e previstos como entrada, e retorna a nova métrica (MAPE). `m1` é a métrica do CloudWatch que contém os valores efetivos de carga (supondo que a utilização de CPU seja a métrica de carga originalmente especificada para a política denominada `my-predictive-scaling-policy`). `m2` é a métrica do CloudWatch que contém os valores previstos de carga. A sintaxe matemática para a métrica MAPE é a seguinte:

*média de (abs ((efetivo - previsto)/(efetivo)))*

### Visualizar suas métricas de precisão e definir alarmes
<a name="visualize-accuracy-metrics-set-alarms"></a>

Para visualizar os dados da métrica de precisão, selecione a guia **Metrics** (Métricas) no console do CloudWatch. Nele, é possível representar graficamente os dados. Para obter mais informações, consulte [Adição de uma expressão matemática a um gráfico do CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#adding-metrics-expression-console) no *Guia do usuário do Amazon CloudWatch*.

Na seção **Metrics** (Métricas), você também pode criar um alarme com base em uma métrica que esteja monitorando. Enquanto estiver na guia **Graphed metrics** (Métricas representadas em gráficos), selecione o ícone **Create alarm** (Criar alarme) na coluna **Actions** (Ações). O ícone **Create alarm** (Criar alarme) é representado como um pequeno sino. Para obter mais informações e opções de notificação, consulte [Criação de um alarme do CloudWatch com base em uma expressão matemática de métrica](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create-alarm-on-metric-math-expression.html) e [Notificação de usuários sobre alterações de alarme no Guia do usuário ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Notify_Users_Alarm_Changes.html) do *Amazon CloudWatch*.

Como alternativa, você pode usar [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html) e [PutMetricAlarm](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricAlarm.html) para realizar cálculos usando matemática métrica e criar alarmes com base na saída.

# Usar ações programadas para substituir os valores de previsão para o Amazon ECS
<a name="predictive-scaling-overriding-forecast-capacity"></a>

Às vezes, você pode ter informações adicionais sobre seus futuros requisitos de aplicações que o cálculo de previsão não pode levar em conta. Por exemplo, os cálculos de previsão podem subestimar as tarefas necessárias para um evento de marketing futuro. Você pode usar ações programadas para substituir temporariamente a previsão durante períodos futuros. As ações programadas podem ser executadas de forma recorrente ou em uma data e hora específicas quando houver flutuações de demanda únicas. 

Por exemplo, você pode criar uma ação programada com um número maior de tarefas que o previsto. Em runtime, o Amazon ECS atualiza o número mínimo de tarefas em seu serviço. Como o ajuste de escala preditivo otimiza o número de tarefas, uma ação programada com um número mínimo de tarefas maior do que os valores de previsão é respeitada. Isso impede que o número de tarefas seja inferior ao esperado. Para interromper a substituição da previsão, use uma segunda ação agendada para retornar o número mínimo de tarefas à configuração original.

O procedimento a seguir descreve as etapas necessárias para substituir a previsão durante períodos futuros. 

**Topics**
+ [Etapa 1: (Opcional) Analisar dados de séries temporais](#analyzing-time-series-data)
+ [Etapa 2: Criar duas ações programadas](#scheduling-capacity)

**Importante**  
Este tópico pressupõe que você esteja tentando substituir a previsão para escalar para uma capacidade maior do que a prevista. Se você precisar diminuir temporariamente o número de tarefas sem a interferência de uma política de ajuste de escala preditivo, use o modo *somente previsão*. Enquanto estiver no modo somente de previsão, a escala preditiva continuará a gerar previsões, mas não aumentará automaticamente o número de tarefas. Você então poderá monitorar a utilização dos recursos e diminuir manualmente o número de tarefas conforme necessário. 

## Etapa 1: (Opcional) Analisar dados de séries temporais
<a name="analyzing-time-series-data"></a>

Comece analisando os dados de séries temporais de previsão. Essa é uma etapa opcional, mas é útil quando você deseja entender os detalhes da previsão.

1. **Recuperar a previsão**

   Após a criação da previsão, é possível consultar um período específico na previsão. O objetivo da consulta é obter uma visão completa dos dados de séries temporais para um período específico. 

   Sua consulta pode incluir até dois dias de dados de previsão futura. Se você usa a escalabilidade preditiva há algum tempo, também pode acessar seus dados de previsão anteriores. No entanto, a duração máxima de tempo entre as horas inicial e final é de 30 dias. 

   Para obter a previsão usando o comando da AWS CLI [get-predictive-scaling-forecast](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/get-predictive-scaling-forecast.html), forneça os seguintes parâmetros no comando: 
   + Inclua o nome do cluster no parâmetro `resource-id`. 
   + Insira o nome da política no parâmetro `--policy-name`. 
   + Insira a hora de início no parâmetro `--start-time` para retornar apenas os dados de previsão para depois ou no horário especificado.
   + Insira a hora de término no parâmetro `--end-time` para retornar apenas os dados de previsão para antes do horário especificado. 

   ```
   aws application-autoscaling get-predictive-scaling-forecast \
       --service-namespace ecs \
       --resource-id service/MyCluster/test \
       --policy-name cpu40-predictive-scaling-policy \
       --scalable-dimension ecs:service:DesiredCount \
       --start-time "2021-05-19T17:00:00Z" \
       --end-time "2021-05-19T23:00:00Z"
   ```

   Se bem-sucedido, o comando retornará uma resposta semelhante à seguinte. 

   ```
   {
       "LoadForecast": [
           {
               "Timestamps": [
                   "2021-05-19T17:00:00+00:00",
                   "2021-05-19T18:00:00+00:00",
                   "2021-05-19T19:00:00+00:00",
                   "2021-05-19T20:00:00+00:00",
                   "2021-05-19T21:00:00+00:00",
                   "2021-05-19T22:00:00+00:00",
                   "2021-05-19T23:00:00+00:00"
               ],
               "Values": [
                   153.0655799339254,
                   128.8288551285919,
                   107.1179447150675,
                   197.3601844551528,
                   626.4039934516954,
                   596.9441277518481,
                   677.9675713779869
               ],
               "MetricSpecification": {
                   "TargetValue": 40.0,
                   "PredefinedMetricPairSpecification": {
                       "PredefinedMetricType": "ASGCPUUtilization"
                   }
               }
           }
       ],
       "CapacityForecast": {
           "Timestamps": [
               "2021-05-19T17:00:00+00:00",
               "2021-05-19T18:00:00+00:00",
               "2021-05-19T19:00:00+00:00",
               "2021-05-19T20:00:00+00:00",
               "2021-05-19T21:00:00+00:00",
               "2021-05-19T22:00:00+00:00",
               "2021-05-19T23:00:00+00:00"
           ],
           "Values": [
               2.0,
               2.0,
               2.0,
               2.0,
               4.0,
               4.0,
               4.0
           ]
       },
       "UpdateTime": "2021-05-19T01:52:50.118000+00:00"
   }
   ```

   A resposta inclui duas previsões: `LoadForecast` e `CapacityForecast`. `LoadForecast` mostra a previsão de carga horária. `CapacityForecast` mostra os valores de previsão para a capacidade que é necessária em uma base horária para lidar com a carga prevista enquanto mantém um `TargetValue` de 40,0 (40% de utilização média da CPU).

1. **Identificar o período-alvo**

   Identifique a hora ou horas em que a flutuação de demanda única deverá ocorrer. Lembre-se de que as datas e os horários mostrados na previsão estão em UTC.

## Etapa 2: Criar duas ações programadas
<a name="scheduling-capacity"></a>

Em seguida, crie duas ações programadas para um período específico em que sua aplicação terá uma carga maior do que a prevista. Por exemplo, se você tiver um evento de marketing que irá direcionar o tráfego para seu site por um período limitado, poderá programar uma ação única para atualizar a capacidade mínima quando ele começar. Em seguida, agende outra ação para retornar a capacidade mínima para a configuração original quando o evento terminar. 

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Na página **Clusters**, escolha o cluster.

1. Na página de detalhes do cluster, na seção **Serviços**, escolha o serviço.

   A página de detalhes do serviço é exibida.

1. Escolha **Ajuste de escala automático do serviço**.

   A página de políticas será exibida.

1. Escolha **Ações programadas** e, em seguida, escolha **Criar**.

   A página **Criar ação de programação** é exibida.

1. Em **Nome da ação**, insira um nome exclusivo.

1. Em **Time zone** (Fuso horário), escolha um fuso horário.

   Todos os fusos horários listados são do banco de dados de fuso horário da IANA. Para obter mais informações, consulte a [Lista de fusos horários no banco de dados de FH](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).

1. Em **Hora de início**, insira a **Data** e a **Hora** em que a ação começa.

1. Em **Recurrence (Recorrência)**, escolha **Once (Uma vez)**.

1. Em **Ajustes de tarefas**, para Mínimo, insira um valor inferior ou igual ao número máximo de tarefas.

1. Escolha **Criar ação programada**.

   A página de políticas será exibida.

1. Configure uma segunda ação programada para retornar o número mínimo de tarefas para a configuração original no final do evento. A escalabilidade preditiva pode escalar o número de tarefas somente quando o valor definido para **Minínimo** é menor que os valores da previsão.

**Para criar duas ações programadas para eventos únicos (AWS CLI)**  
Para usar o AWS CLI para criar as ações programadas, use o comando [put-scheduled-update-group-action](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scheduled-update-group-action.html). 

Por exemplo, vamos definir uma programação que mantenha uma capacidade mínima de três instâncias em 19 de maio às 17h por oito horas. Os comandos a seguir mostram como implementar esse cenário.

O primeiro comando [put-scheduled-update-group-action](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scheduled-update-group-action.html) instrui o Amazon EC2 Auto Scaling a atualizar a capacidade mínima do grupo do Auto Scaling especificado às 17h UTC em 19 de maio de 2021. 

```
aws autoscaling put-scheduled-update-group-action --scheduled-action-name my-event-start \
  --auto-scaling-group-name my-asg --start-time "2021-05-19T17:00:00Z" --minimum-capacity 3
```

O segundo comando instrui o Amazon EC2 Auto Scaling a definir a capacidade mínima do grupo como um à 1h da manhã UTC em 20 de maio de 2021. 

```
aws autoscaling put-scheduled-update-group-action --scheduled-action-name my-event-end \
  --auto-scaling-group-name my-asg --start-time "2021-05-20T01:00:00Z" --minimum-capacity 1
```

Após você adicionar essas ações programadas ao grupo do Auto Scaling, o Amazon EC2 Auto Scaling fará o seguinte: 
+ Às 17h UTC em 19 de maio de 2021, a primeira ação programada é executada. Se o grupo tiver menos de três instâncias, ele será expandido para três instâncias. Durante esse período e nas próximas oito horas, o Amazon EC2 Auto Scaling poderá continuar a aumentar a escala na horizontal se a capacidade prevista for maior do que a capacidade real ou se houver uma política de escalabilidade dinâmica em vigor. 
+ À 1h da manhã UTC em 20 de maio de 2021, a segunda ação programada é executada. Isso retorna a capacidade mínima para sua configuração original no final do evento.

### Escalabilidade com base em programações recorrentes
<a name="scheduling-recurring-actions"></a>

Para substituir a previsão para o mesmo período de tempo todas as semanas, crie duas ações programadas e forneça a lógica de hora e data usando uma expressão cron. 

A expressão cron consiste em cinco campos separados por espaços: [Minute] [Hour] [Day\$1of\$1Month] [Month\$1of\$1Year] [Day\$1of\$1Week]. Os campos podem conter quaisquer valores permitidos, incluindo caracteres especiais. 

Por exemplo, esta expressão cron executa a ação todas as terças-feiras às 6h30. O asterisco é usado como um curinga para corresponder a todos os valores de um campo.

```
30 6 * * 2
```

### Consulte também
<a name="scheduling-scaling-see-also"></a>

Para obter mais informações sobre como gerenciar ações programadas, consulte [Usar ações programadas para escalar os serviços do Amazon ECS](service-autoscaling-schedulescaling.md).

# Política avançada de escalabilidade preditiva usando métricas personalizadas para o Amazon ECS
<a name="predictive-scaling-custom-metrics"></a>

É possível usar métricas predefinidas ou personalizadas em uma política de escalabilidade preditiva. As métricas personalizadas são úteis quando métricas predefinidas (como CPU, memória etc.) não são suficientes para descrever suficientemente a carga da aplicação.

Ao criar uma política de escalabilidade preditiva com métricas personalizadas, você pode especificar outras métricas do CloudWatch fornecidas pela AWS. Como alternativa, você pode especificar métricas que define e publica. Você também pode usar a matemática de métricas para agregar e transformar métricas existentes em uma nova série temporal que a AWS não rastreia automaticamente. Um exemplo é combinar valores em seus dados calculando novas somas ou médias, o que é chamado de *agregação*. Os dados resultantes são chamados de um *agregado*.

A seção a seguir contém as práticas recomendados e exemplos de como sstruturar o JSON para a política.

## Pré-requisitos
<a name="predictive-scaling-custom-metrics-prerequisites"></a>

Para adicionar métricas personalizadas à política de escalação preditiva, é necessário ter as permissões `cloudwatch:GetMetricData`.

Para especificar suas próprias métricas em vez de usar as métricas que a AWS fornecer, é necessário primeiro publicá-las no CloudWatch. Para mais informações, consulte [Publishing custom metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html) (Publicar métricas personalizadas) no *Guia do usuário do Amazon CloudWatch*. 

Se publicar suas próprias métricas, certifique-se de publicar os pontos de dados com uma frequência mínima de cinco minutos. Os pontos de dados são recuperados do CloudWatch com base na duração do período necessário. Por exemplo, a especificação da métrica de carga usa métricas por hora para medir a carga em sua aplicação. O CloudWatch usa seus dados de métrica publicados para fornecer um único valor de dados para qualquer período de uma hora, agregando todos os pontos de dados com a data/hora que caem dentro de cada período de uma hora.

## Práticas recomendadas
<a name="predictive-scaling-custom-metrics-best-practices"></a>

As seguintes práticas recomendadas podem ajudar no uso mais eficaz de métricas personalizadas:
+ A métrica mais útil para a especificação da métrica de carga é uma métrica que representa a carga em um grupo do Auto Scaling como um todo.
+ A métrica mais útil para escalar a especificação da métrica de escalabilidade é um throughput médio ou métrica de utilização por tarefa.
+ A utilização visada deve corresponder ao tipo de métrica de escalabilidade. Para uma configuração de política que usa utilização da CPU, isso é um percentual desejado, por exemplo.
+ Se essas recomendações não forem seguidas, provavelmente os valores futuros previstos da série temporal estarão incorretos. Para validar se os dados estão corretos, você pode visualizar os valores previstos no console. Como alternativa, depois de criar sua política de escalabilidade preditiva, inspecione os objetos `LoadForecast` retornados por uma chamada para a API [GetPredictiveScalingForecast](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_GetPredictiveScalingForecast.html).
+ Recomendamos enfaticamente configurar a escalabilidade preditiva no modo apenas previsão para que você possa avaliar a previsão antes que a escalabilidade preditiva comece a modificar ativamente a escala.

## Limitações
<a name="predicitve-scaling-custom-metrics-limitations"></a>
+ Você pode consultar pontos de dados de até 10 métricas em uma especificação métrica.
+ Para os propósitos desse limite, uma expressão conta como uma métrica.

## Solucionar problemas com uma política de escalabilidade preditiva com métricas personalizadas
<a name="predictive-scaling-custom-metrics-troubleshooting"></a>

Se ocorrer um problema ao usar métricas personalizadas, recomendamos fazer o seguinte:
+ Se você encontrar um problema em uma implantação azul/verde enquanto usa uma expressão de pesquisa, certifique-se de criar uma expressão de pesquisa que procure uma correspondência parcial, e não uma correspondência exata. Verifique também se a consulta está encontrando apenas grupos do Auto Scaling em execução na aplicação específica. Para mais informações sobre essa sintaxe de expressão de pesquisa, consulte [CloudWatch search expression syntax](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/search-expression-syntax.html) (Sintaxe de expressão de pesquisa do CloudWatch) no *Guia do usuário do Amazon CloudWatch*.
+ O comando [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) valida uma expressão quando você cria sua política de dimensionamento. No entanto, existe a possibilidade de que esse comando não identifique a causa exata dos erros detectados. Para corrigir os problemas, solucione os erros que você recebe em uma resposta de uma solicitação para o comando [get-metric-data](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/get-metric-data.html). Você também pode solucionar problemas da expressão no console do CloudWatch.
+ É necessário especificar `false` para `ReturnData` se `MetricDataQueries` especificar a função SEARCH() (BUSCAR) por conta própria sem uma função matemática como SUM() (SOMA). Isso ocorre porque as expressões de pesquisa podem retornar várias séries temporais, e uma especificação métrica baseado em uma expressão pode retornar apenas uma série temporal.
+ Todas as métricas envolvidas em uma expressão de pesquisa devem ter a mesma resolução.

# Construir o JSON para métricas personalizadas de escalabilidade preditiva com o Amazon ECS
<a name="predictive-scaling-custom-metrics-example"></a>

A seção a seguir contém exemplos de como configurar escalação preditiva para consultar dados do CloudWatch. Há dois métodos diferentes de configurar essa opção, e o método escolhido afeta qual será o formato usado para estruturar JSON para a política de escalação preditiva. Quando você usa matemática de métricas, o formato do JSON varia ainda mais com base na matemática de métrica que está sendo aplicada.

1. Para criar uma política que obtenha dados diretamente de outras métricas do CloudWatch fornecidas pela AWS ou das métricas que você publica no CloudWatch, consulte [Exemplo de política de escalabilidade preditiva com métricas personalizadas de carga e escalabilidade usando a AWS CLI](#predictive-scaling-custom-metrics-example1).

## Exemplo de política de escalabilidade preditiva com métricas personalizadas de carga e escalabilidade usando a AWS CLI
<a name="predictive-scaling-custom-metrics-example1"></a>

Para criar uma política de escalação preditiva com métricas personalizadas de carga e dimensionamento com a AWS CLI, armazene os argumentos para a `--predictive-scaling-configuration` em um arquivo JSON denominado `config.json`.

Você começa a adicionar métricas personalizadas substituindo os valores substituíveis no exemplo a seguir por suas métricas e sua meta de utilização.

```
{
  "MetricSpecifications": [
    {
      "TargetValue": 50,
      "CustomizedScalingMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "scaling_metric",
            "MetricStat": {
              "Metric": {
                "MetricName": "MyUtilizationMetric",
                "Namespace": "MyNameSpace",
                "Dimensions": [
                  {
                    "Name": "MyOptionalMetricDimensionName",
                    "Value": "MyOptionalMetricDimensionValue"
                  }
                ]
              },
              "Stat": "Average"
            }
          }
        ]
      },
      "CustomizedLoadMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "load_metric",
            "MetricStat": {
              "Metric": {
                "MetricName": "MyLoadMetric",
                "Namespace": "MyNameSpace",
                "Dimensions": [
                  {
                    "Name": "MyOptionalMetricDimensionName",
                    "Value": "MyOptionalMetricDimensionValue"
                  }
                ]
              },
              "Stat": "Sum"
            }
          }
        ]
      }
    }
  ]
}
```

Para obter mais informações, consulte [MetricDataQuery](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_MetricDataQuery.html) na *Amazon EC2 Auto Scaling API Reference* (Referência de API do Amazon EC2 Auto Scaling).

**nota**  
Veja a seguir alguns recursos adicionais que podem ajudar você a encontrar nomes de métricas, namespaces, dimensões e estatísticas para as métricas do CloudWatch:   
Para mais informações sobre as métricas disponíveis para produtos da AWS, consulte [Produtos da AWS que publicam métricas do CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html) no *Guia do usuário do Amazon CloudWatch*.
Para obter os valores exatos de nome da métrica, namespace e dimensões (se aplicável) para uma métrica do CloudWatch com a AWS CLI, consulte [list-metrics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html). 

Para criar essa política, execute o comando [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scaling-policy.html) usando como entrada o arquivo JSON, como demonstrado no exemplo a seguir.

```
aws application-autoscaling put-scaling-policy --policy-name my-predictive-scaling-policy \
  --auto-scaling-group-name my-asg --policy-type PredictiveScaling \
  --predictive-scaling-configuration file://config.json
```

Se bem-sucedido, esse comando gerará o nome do recurso da Amazon (ARN) da política.

```
{
  "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/my-predictive-scaling-policy",
  "Alarms": []
}
```

# Usar expressões de matemática métrica
<a name="predictive-scaling-math-expression"></a>

A seção a seguir fornece informações sobre o uso matemática métrica com políticas de escalabilidade preditiva em sua política. 

## Noções básicas de matemática métrica
<a name="predictive-scaling-custom-metrics-math"></a>

Se tudo o que deseja fazer é agregar dados métricos existentes, a matemática métrica do CloudWatch poupa o esforço e o custo de publicar outra métrica no CloudWatch. Você pode usar qualquer métrica que a AWS fornece, e também pode usar métricas definidas como parte de suas aplicações.

Para obter mais informações, consulte [Usar matemática métrica](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html) no *Guia do usuário do Amazon CloudWatch*. 

Se você optar por usar uma expressão matemática métrica em sua política de escalabilidade preditiva, considere os seguintes pontos:
+ As operações matemáticas métricas usam os pontos de dados da combinação exclusiva de nome da métrica, namespace e pares de métricas de chaves-valor da dimensão. 
+ Você pode usar qualquer operador aritmético (\$1 - \$1 / ^), função estatística (como AVG ou SUM) ou outra função compatível com o CloudWatch. 
+ Você pode usar as métricas e os resultados de outras expressões matemáticas nas fórmulas da expressão matemática. 
+ Suas expressões matemáticas métricas podem ser compostas de agregações diferentes. No entanto, uma prática recomendada para o resultado final da agregação é usar `Average` para a métrica de escalabilidade e `Sum` para a métrica de carga.
+ Qualquer expressão usada em uma especificação de métrica deve eventualmente retornar uma única série temporal.

Para usar matemática métrica, faça o seguinte:
+ Escolha uma ou mais métricas do CloudWatch. Em seguida, crie a expressão. Para obter mais informações, consulte [Usar matemática métrica](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html) no *Guia do usuário do Amazon CloudWatch*. 
+ Verifique se a expressão matemática métrica é válida usando o console do CloudWatch ou a API do CloudWatch [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html).

## Exemplo de política de escalação preditiva que combina métricas por meio da matemática de métricas (AWS CLI)
<a name="custom-metrics-ex2"></a>

Às vezes, ao invés de especificar a métrica diretamente, talvez seja necessário processar seus dados de alguma forma, primeiramente. Por exemplo, você pode ter uma aplicação que extrai o trabalho de uma fila do Amazon SQS e talvez queira usar o número de itens na fila como critério para escalabilidade preditiva. O número de mensagens na fila não define unicamente o número necessário de instâncias. Portanto, é necessário mais trabalho para criar uma métrica que possa ser usada para calcular a lista de pendências por instância.

Veja a seguir um exemplo de política de escalabilidade preditiva para esse cenário. Ele especifica métricas de escalabilidade e carga baseadas na métrica `ApproximateNumberOfMessagesVisible` do Amazon SQS, que é o número de mensagens disponíveis para recuperação da fila. Ele também usa a métrica `GroupInServiceInstances` do Amazon EC2 Auto Scaling e uma expressão matemática para calcular a lista de pendências por instância para a métrica de escalabilidade.

```
aws application-autoscaling put-scaling-policy --policy-name my-sqs-custom-metrics-policy \
  --policy-type PredictiveScaling \
  --predictive-scaling-configuration file://config.json
  --service-namespace ecs \
  --resource-id service/MyCluster/test \
  "MetricSpecifications": [
    {
      "TargetValue": 100,
      "CustomizedScalingMetricSpecification": {
        "MetricDataQueries": [
          {
            "Label": "Get the queue size (the number of messages waiting to be processed)",
            "Id": "queue_size",
            "MetricStat": {
              "Metric": {
                "MetricName": "ApproximateNumberOfMessagesVisible",
                "Namespace": "AWS/SQS",
                "Dimensions": [
                  {
                    "Name": "QueueName",
                    "Value": "my-queue"
                  }
                ]
              },
              "Stat": "Sum"
            },
            "ReturnData": false
          },
          {
            "Label": "Get the group size (the number of running instances)",
            "Id": "running_capacity",
            "MetricStat": {
              "Metric": {
                "MetricName": "GroupInServiceInstances",
                "Namespace": "AWS/AutoScaling",
                "Dimensions": [
                  {
                    "Name": "AutoScalingGroupName",
                    "Value": "my-asg"
                  }
                ]
              },
              "Stat": "Sum"
            },
            "ReturnData": false
          },
          {
            "Label": "Calculate the backlog per instance",
            "Id": "scaling_metric",
            "Expression": "queue_size / running_capacity",
            "ReturnData": true
          }
        ]
      },
      "CustomizedLoadMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "load_metric",
            "MetricStat": {
              "Metric": {
                "MetricName": "ApproximateNumberOfMessagesVisible",
                "Namespace": "AWS/SQS",
                "Dimensions": [
                  {
                    "Name": "QueueName",
                    "Value": "my-queue"
                  }
                ],
              },
              "Stat": "Sum"
            },
            "ReturnData": true
          }
        ]
      }
    }
  ]
}
```

O exemplo retorna o ARN da política.

```
{
  "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/my-sqs-custom-metrics-policy",
  "Alarms": []
}
```