

# Uso de patrones históricos para escalar los servicios de Amazon ECS con escalado predictivo
<a name="predictive-auto-scaling"></a>

El escalado predictivo analiza los datos de cargas anteriores de los flujos de tráfico para analizar los patrones diarios o semanales. Luego, utiliza este análisis para anticipar las necesidades futuras y aumentar proactivamente las tareas de su servicio según sea necesario.

El escalado automático predictivo es más útil en las siguientes situaciones.
+ Tráfico cíclico: uso elevado de recursos durante el horario laborable normal y un uso reducido de recursos por la noche o los fines de semana.
+ Patrones recurrentes de carga de trabajo de activación y desactivación, como el procesamiento por lotes, pruebas o análisis periódicos de datos.
+ Aplicaciones que tardan mucho tiempo en inicializarse: esto puede repercutir en el rendimiento de las aplicaciones durante eventos de escalado horizontal, lo que provoca una latencia notable.

En general, si sus aplicaciones tardan mucho tiempo en inicializarse y el tráfico aumenta en un patrón regular, debe considerar el uso del escalado predictivo. Esto ayuda a escalar más rápido, ya que aumenta de forma proactiva el número de tareas para las cargas previstas en lugar de utilizar políticas de escalado dinámicas, como de seguimiento de destino o de escalado por pasos únicamente. Al ayudar a evitar la posibilidad de aprovisionar en exceso el número de tareas, con el escalado predictivo también puede ahorrar dinero.

Por ejemplo, piense en una aplicación que tiene un uso elevado durante el horario laborable y un uso bajo durante la noche. Al comienzo de cada día laborable, el escalado predictivo puede escalar horizontalmente tareas antes de la primera afluencia de tráfico. Esto ayuda a la aplicación a mantener una alta disponibilidad y rendimiento al pasar de un periodo de menor utilización a uno de mayor utilización. No tiene que esperar a que el escalado dinámico reaccione a los cambios en el tráfico. Tampoco tiene que dedicar tiempo a revisar los patrones de carga de la aplicación e intentar programar la cantidad correcta de tareas mediante el escalado programado.

El escalado predictivo es una capacidad de nivel de servicio que escala la tarea del servicio independientemente del escalado de la capacidad de computación subyacente (por ejemplo, EC2 o Fargate). Para Fargate, AWS administra y escala de forma automática la capacidad subyacente en función de los requisitos de la tarea. Para la capacidad de EC2, puede utilizar los proveedores de capacidad de grupo de escalado automático para escalar automáticamente las instancias de EC2 subyacentes en función de los requisitos de escalado de las tareas.

**Topics**
+ [Información general del escalado predictivo](#predictive-auto-scaling-overview)
+ [Creación de una política de escalado predictivo](predictive-scaling-create-policy.md)
+ [Evaluación de las políticas de escalado predictivo](predictive-scaling-graphs.md)
+ [Anulación del pronóstico](predictive-scaling-overriding-forecast-capacity.md)
+ [Uso de métricas personalizadas](predictive-scaling-custom-metrics.md)

## Cómo funciona el escalado predictivo en Amazon ECS
<a name="predictive-auto-scaling-overview"></a>

Aquí puede obtener información sobre las consideraciones relacionadas con el uso del escalado predictivo, cómo funciona y cuáles son los límites.

### Consideraciones sobre el uso del escalado predictivo
<a name="predictive-auto-scaling-considerations"></a>
+ Desea asegurarse de que el escalado predictivo sea adecuado para la carga de trabajo. Para comprobarlo, configure las políticas de escalado en el modo de **solo previsión** y consulte las recomendaciones de la consola. Debe evaluar la previsión y las recomendaciones antes de empezar a utilizar el escalado predictivo.
+ Antes de que el escalado predictivo pueda iniciar el pronóstico, este necesita al menos 24 horas de datos históricos. Cuantos más datos históricos estén disponibles, más eficaz será la previsión. Lo ideal es dos semanas. También tendrá que esperar 24 horas para que el escalado predictivo pueda generar nuevas previsiones cuando elimine un servicio de Amazon ECS y cree uno nuevo. Una forma de acelerar este proceso es usar métricas personalizadas para agregar métricas de servicios de Amazon ECS nuevos y antiguos.
+ Elija una métrica de carga que represente con precisión la carga total de la aplicación y que sea el aspecto de la aplicación que más le interese escalar.
+ El escalado dinámico con el escalado predictivo ayuda a seguir de cerca la demanda de la aplicación, de modo que puede reducir horizontalmente durante los periodos de menor demanda y escalar horizontalmente durante aumentos inesperados de tráfico. Cuando hay activas varias políticas de escalado, cada política determina el número de tareas deseado de forma independiente, y el número de tareas deseado se establece en el máximo de las políticas.
+ Puede utilizar el escalado predictivo junto con sus políticas de escalado dinámico, como el seguimiento de destino o el escalado gradual, para que las aplicaciones se escalen en función de patrones históricos y en tiempo real. Por sí solo, el escalado predictivo no reduce horizontalmente las tareas. 
+ Si utiliza un rol personalizado al llamar a la API `register-scalable-target`, es posible que aparezca un error que indique que la política de escalado predictivo solo funciona con el SLR habilitado. En este caso, debe volver a llamar a `register-scalable-target`, pero sin role-arn. Utilice el SLR al registrar el destino escalable y llame a la API `put-scaling-policy`.

### Funcionamiento del escalado predictivo
<a name="predictive-auto-scaling-details"></a>

Utiliza el escalado predictivo al crear una política de escalado predictivo que especifique la métrica de CloudWatch que se va a supervisar y analizar. El escalado predictivo debe tener datos de, por lo menos, las últimas 24 horas, para comenzar a pronosticar los valores futuros.

Tras crear la política, el escalado predictivo comienza a analizar los datos de las métricas de los últimos 14 días para identificar patrones. Este análisis se utiliza para generar previsiones por hora de requisitos de las próximas 48 horas. Los datos más recientes de CloudWatch se utilizan para actualizar la previsión cada 6 horas. A medida que llegan nuevos datos, el escalado predictivo puede mejorar continuamente la precisión de las previsiones futuras.

La primera vez que se habilita el escalado predictivo, se ejecuta en modo de *solo previsión*. Genera pronósticos en este modo, pero no escala el servicio de Amazon ECS en función de esos pronósticos. Esto significa que puede evaluar la precisión e idoneidad del pronóstico. Ve los datos del pronóstico mediante la operación de la API `GetPredictiveScalingForecast` o la Consola de administración de AWS.

Cuando decida empezar a utilizar el escalado predictivo, cambie la política de escalado al modo de *pronóstico y escalado*. En este modo, ocurre lo siguiente.

De forma predeterminada, su servicio de Amazon ECS se escala al principio de cada hora en función del pronóstico de esa hora. Puede optar por empezar antes mediante el uso de la propiedad `SchedulingBufferTime` de la operación de la API `PutScalingPolicy`. Esto permite que las nuevas tareas se inicien antes de la demanda pronosticada y les da tiempo para arrancar y prepararse para gestionar el tráfico.

### Límite máximo de tareas
<a name="predictive-scaling-maximum-tasks-limit"></a>

Cuando registra los servicios de Amazon ECS para el escalado, define un número máximo de tareas que se pueden lanzar por servicio. De manera predeterminada, cuando se establecen políticas de escalado, estas no pueden aumentar el número de tareas por encima del límite máximo.

Como alternativa, puede permitir que el número máximo de tareas del servicio se incremente automáticamente si la previsión se acerca al número máximo de tareas del servicio de Amazon ECS o lo supera.

**aviso**  
Tenga cuidado al permitir que el número máximo de tareas aumente automáticamente. Esto puede provocar que se lancen más tareas de las previstas si no se supervisa ni gestiona el aumento del número máximo de tareas. El aumento del número máximo de tareas se convierte en el nuevo número máximo normal de tareas del servicio de Amazon ECS hasta que lo actualice manualmente. El número máximo de tareas no disminuye automáticamente hasta el máximo original.

### Regiones admitidas
<a name="predictive-auto-scaling-supported-regions"></a>
+ Este de EE. UU. (Norte de Virginia)
+ Este de EE. UU. (Ohio)
+ Oeste de EE. UU. (Norte de California)
+ Oeste de EE. UU. (Oregón)
+ África (Ciudad del Cabo)
+ Asia-Pacífico (Hong Kong)
+ Asia-Pacífico (Yakarta)
+ Asia-Pacífico (Mumbai)
+ Asia-Pacífico (Osaka)
+ Asia-Pacífico (Seúl)
+ Asia-Pacífico (Singapur)
+ Asia-Pacífico (Sídney)
+ Asia-Pacífico (Tokio)
+ Canadá (centro)
+ China (Pekín)
+ China (Ningxia)
+ Europa (Fráncfort)
+ Europa (Irlanda)
+ Europa (Londres)
+ Europa (Milán)
+ Europa (París)
+ Europa (Estocolmo)
+ Medio Oriente (Baréin)
+ América del Sur (São Paulo)
+ AWS GovCloud (Este de EE. UU.)
+ AWS GovCloud (Oeste de EE. UU.)

# Creación de una política de escalado predictivo para el escalado automático de servicios de Amazon ECS
<a name="predictive-scaling-create-policy"></a>

Cree una política de escalado predictiva de modo que Amazon ECS aumente o disminuya la cantidad de tareas que el servicio ejecuta en función de datos históricos. 

**nota**  
Un servicio nuevo debe proporcionar datos de, por lo menos, las últimas 24 horas para poder generar un pronóstico.

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

1. Además de los permisos estándar de IAM para crear y actualizar servicios, necesita permisos adicionales. Para obtener más información, consulte [Permisos de IAM necesarios para el escalado automático del servicio de Amazon ECS](auto-scaling-IAM.md).

1. Determine las métricas que quiere utilizar para la política. Están disponibles las siguientes métricas:
   +  **ECSServiceAverageCPUUtilization**: uso medio de la CPU que debe utilizar el servicio. 
   + **ECSServiceAverageMemoryUtilization**: uso medio de la memoria que debe utilizar el servicio. 
   + **ALBRequestCountPerTarget**: número medio de solicitudes por minuto que debe recibir de manera ideal.

   También puede utilizar una métrica personalizada. Debe definir los siguientes valores:
   + Carga: una métrica de carga que representa con precisión la carga total de la aplicación y que es el aspecto de la aplicación que más le interesa escalar.
   + Métrica de escalado: el mejor indicador del grado de utilización ideal para su aplicación.

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En la página **Clusters** (Clústeres), elija el clúster.

1. En la página de detalles del clúster, en la sección **Servicios**, elija el servicio.

   Se abrirá la página de detalles del servicio.

1. Elija **Escalado automático de servicio** y, a continuación, elija **Establecer la cantidad de tareas**.

1. En **Recuento de tareas de servicio de Amazon ECS**, elija **Usar escalado automático**.

   Se abrirá la sección **Recuento de tareas**.

   1. En **Cantidad mínima de tareas**, ingrese el límite mínimo del número de tareas que se va a utilizar para el escalado automático del servicio. El recuento deseado no será inferior a este recuento.

   1. En **Máximo**, ingrese el límite máximo del número de tareas que se va a utilizar para el escalado automático del servicio. El recuento deseado no será superior a este recuento.

   1. Seleccione **Save**.

      Se abrirá la página de políticas.

1. Elija **Crear política de escalado**.

   Se abrirá la página **Crear política**.

1. Para **Tipo de política de escalado**, elija **Escalado predictivo**.

1. En **Policy name** (Nombre de la política), ingrese el nombre de la política.

1. En **Par de métricas**, elija las métricas de la lista de opciones.

   Si eligió **Application Load Balancer request count per target (Recuento de solicitudes de Application Load Balancer por destino)**, luego elija un grupo de destino en **Target group (Grupo de destino)**. **Recuento de solicitudes del equilibrador de carga de aplicación por destino** solo se admite si ha adjuntado un grupo de destino del equilibrador de carga de aplicación para el servicio. 

   Si eligió **Par de métricas personalizadas**, elija métricas individuales en las listas de **Métrica de carga** y **Métrica de escalado**. 

1. En **Utilización objetivo**, introduzca el valor objetivo del porcentaje de tareas que debe mantener Amazon ECS. El escalado automático del servicio escala horizontalmente la capacidad hasta que la utilización media se encuentre en la utilización objetivo, o hasta que alcance el número máximo de tareas que haya especificado.

1. Elija **Crear política de escalado**.

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

Use la AWS CLI como se indica a continuación para configurar políticas de escalado predictivo para el servicio de Amazon ECS. Reemplace cada *marcador de posición de entrada del usuario* con información propia.

Para obtener más información acerca de las métricas de CloudWatch que puede especificar, consulte [PredictivEscalingMetricSpecification](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_PredictiveScalingMetricSpecification.html) en la *Referencia de la API de Amazon EC2 Auto Scaling*.

### Ejemplo 1: política de escalado predictivo con memoria predefinida.
<a name="predictive-scaling-cli-example-one"></a>

A continuación, se muestra un ejemplo de política con una configuración de memoria predefinida.

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

En el ejemplo siguiente se muestra cómo crear la política mediante la ejecución del comando [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scaling-policy.html) con el archivo de configuración 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
```

Si se ejecuta correctamente, este comando devolverá el ARN de la 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": []
}
```

### Ejemplo 2: política de escalado predictivo con CPU predefinida.
<a name="predictive-scaling-cli-example-two"></a>

A continuación, se muestra un ejemplo de política con una configuración de CPU predefinida.

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

En el ejemplo siguiente se muestra cómo crear la política mediante la ejecución del comando [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scaling-policy.html) con el archivo de configuración 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
```

Si se ejecuta correctamente, este comando devolverá el ARN de la 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": []
}
```

# Evaluación de las políticas de escalado predictivo para Amazon ECS
<a name="predictive-scaling-graphs"></a>

Antes de utilizar una política de escalado predictivo para escalar automáticamente los servicios, consulte las recomendaciones y otros datos de la política en la consola de Amazon ECS. Esto es importante porque no es recomendable que una política de escalado predictivo amplíe su capacidad real hasta que sepa que sus predicciones son precisas.

Si el servicio es nuevo, espere 24 horas para crear el primer pronóstico.

Cuando AWS crea un pronóstico, utiliza datos históricos. Si el servicio aún no cuenta con muchos datos históricos recientes, el escalado predictivo podría rellenar temporalmente el pronóstico con agregados creados a partir de los agregados históricos disponibles actualmente. Las previsiones se rellenan hasta dos semanas antes de la fecha de creación de la política.

## Visualización de las recomendaciones de escalado predictivo
<a name="view-predictive-scaling-recommendations"></a>

Para poder llevar a cabo un análisis eficaz, el escalado automático del servicio debe tener al menos dos políticas de escalado predictivo para comparar. (Sin embargo, aún puede revisar los resultados de una sola política). Al crear varias políticas, puede evaluar una política que usa una métrica en comparación con una política que usa una diferente. También puede evaluar el impacto de diferentes combinaciones de valores y métricas de destino. Una vez creadas las políticas de escalado predictivo, Amazon ECS comienza inmediatamente a evaluar qué política haría un mejor trabajo a la hora de escalar el grupo.

**Visualización de las recomendaciones en la consola de Amazon ECS**

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En la página **Clusters** (Clústeres), elija el clúster.

1. En la página de detalles del clúster, en la sección **Servicios**, elija el servicio.

   Se abrirá la página de detalles del servicio.

1. Elija **Escalado automático de servicio**.

1. Elija la política de escalado predictivo y, a continuación, elija **Acciones**, **Escalado predictivo** y **Ver recomendación**.

   Puede ver los detalles de una política junto con nuestra recomendación. La recomendación indica si la política de escalado predictivo funciona mejor que si no se utiliza. 

   Si no está seguro de si una política de escalado predictivo es adecuada para su grupo, revise las columnas **Impacto en la disponibilidad** e **Impacto en los costos** para elegir la política correcta. La información de cada columna indica cuál es el impacto de la política. 
   + **Impacto en la disponibilidad**: describe si la política evitaría un impacto negativo en la disponibilidad al aprovisionar suficientes tareas para gestionar la carga de trabajo, en comparación con no utilizar la política.
   + **Impacto en los costos**: describe si la política evitaría un impacto negativo en los costos al no aprovisionar en exceso las tareas, en comparación con no utilizar la política. Al aprovisionar demasiado, los servicios quedan infrautilizadas o inactivas, lo que no hace más que aumentar el impacto en los costos.

   Si tiene varias políticas, aparecerá una etiqueta que pondrá **Mejor predicción** junto al nombre de la política que ofrece la mayor cantidad de beneficios de disponibilidad a un costo menor. Se da más importancia al impacto en la disponibilidad. 

1. (Opcional) Para seleccionar el periodo deseado para los resultados de la recomendación, elija el valor que prefiera en el menú desplegable **Periodo de evaluación**: **2 días**, **1 semana** o **2 semanas**. De forma predeterminada, el periodo de evaluación son las dos últimas semanas. Un periodo de evaluación más largo proporciona más puntos de datos para los resultados de la recomendación. Sin embargo, es posible que agregar más puntos de datos no mejore los resultados si los patrones de carga han cambiado, por ejemplo, después de un periodo de demanda excepcional. En este caso, puede obtener una recomendación más específica si consulta datos más recientes.

**nota**  
Las recomendaciones se generan solo para las políticas que están en el modo **Solo previsión**. La característica de recomendaciones funciona mejor cuando una política está en el modo **Solo previsión** durante el periodo de evaluación. Si inicia una política en modo **Previsión y escalado** y luego la cambia al modo **Solo previsión**, es probable que los resultados de esa política estén sesgados. Esto se debe a que la política ya ha contribuido a la capacidad real.

## Revisión de los gráficos de supervisión del escalado predictivo
<a name="review-predictive-scaling-monitoring-graphs"></a>

En la consola, puede revisar el pronóstico de los días, semanas o meses anteriores para visualizar el rendimiento de la política a lo largo del tiempo. También puede utilizar esta información para evaluar la precisión de las predicciones a la hora de decidir si va a permitir que una política escale el número de tareas real.

**Revisión de los gráficos de supervisión del escalado predictivo en la consola de Amazon ECS**

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En la página **Clusters** (Clústeres), elija el clúster.

1. En la página de detalles del clúster, en la sección **Servicios**, elija el servicio.

   Se abrirá la página de detalles del servicio.

1. Elija **Escalado automático de servicio**.

1. Elija la política de escalado predictivo y, a continuación, elija **Acciones**, **Escalamiento predictivo** y **Ver gráfico**.

1. En la sección **Supervisión**, puede ver las previsiones pasadas y futuras de su política de carga y capacidad y compararlas con los valores reales. En el gráfico **Carga** se muestra el pronóstico de carga y los valores reales para la métrica de carga que elija. En el gráfico **Capacidad** se muestra el número de tareas pronosticado por la política. También se incluye el número real de tareas lanzadas. La línea vertical separa los valores históricos de las previsiones futuras. Estos gráficos estarán disponibles poco después de que se cree la política. 

1. (Opcional) Para cambiar la cantidad de datos históricos que se muestra en el gráfico, elija su valor preferido en el menú desplegable **Periodo de evaluación** en la parte superior de la página. El periodo de evaluación no transforma los datos de esta página de ninguna manera. Solo cambia la cantidad de datos históricos que se muestran.

**Comparación de datos en el gráfico **Carga****  
Cada línea horizontal representa un conjunto diferente de puntos de datos de los que se ha informado en intervalos de una hora:

1. **Carga real observada** utiliza la estadística SUM de la métrica de carga elegida para mostrar la carga total por hora en el pasado.

1. **Carga pronosticada por la política** muestra la predicción de carga por hora. Esta predicción se basa en las dos semanas anteriores de observaciones de carga reales.

**Comparación de los datos en el gráfico **Capacidad****  
Cada línea horizontal representa un conjunto diferente de puntos de datos de los que se ha informado en intervalos de una hora:

1. En **Número de tareas real observado** se muestra la capacidad real del servicio de Amazon ECS en el pasado, lo que depende de las demás políticas de escalado y del tamaño mínimo del grupo en vigor durante el periodo seleccionado.

1. **Capacidad pronosticada por la política** muestra la capacidad de referencia que puede esperar tener al principio de cada hora cuando la política esté en modo **Previsión y escalado**.

1. En **Número de tareas necesario inferido** se muestra el número ideal de tareas de su servicio para mantener la métrica de escalado en el valor de destino que haya elegido.

1. En **Cantidad mínima de tareas** se muestra el número mínimo de tareas del servicio.

1. En **Capacidad máxima** se muestra el número máximo de tareas del servicio.

Para calcular la capacidad necesaria inferida, primero suponemos que cada tarea se utiliza por igual en un valor de destino específico. En la práctica, el número de tareas no se utiliza por igual. Sin embargo, si suponemos que la utilización se distribuye de manera uniforme entre las tareas, podemos hacer una estimación probabilística de la cantidad de capacidad que se necesita. A continuación, se calcula el requisito del número de tareas para que sea inversamente proporcional a la métrica de escalado que se utilizó para la política de escalado predictivo. En otras palabras, a medida que aumenta el número de tareas, la métrica de escalado disminuye al mismo ritmo. Por ejemplo, si el número de tareas se duplica, la métrica de escalado debe reducirse a la mitad. 

La fórmula para la capacidad necesaria inferida:

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

Por ejemplo, tomamos los valores de `actualServiceUnits` (`10`) y `scalingMetricValue` (`30`) de una hora determinada. A continuación, tomamos el valor de `targetUtilization` que especificó en su política de escalado predictivo (`60`) y calculamos la capacidad necesaria inferida de la misma hora. Esto devuelve un valor de `5`. Esto significa que cinco es la cantidad de capacidad inferida necesaria para mantener la capacidad en proporción inversa directa al valor de destino de la métrica de escalado.

**nota**  
Hay varias palancas disponibles para ajustar y mejorar el ahorro de costos y la disponibilidad de la aplicación.  
Se utiliza el escalado predictivo para la capacidad de referencia y el escalado dinámico para gestionar la capacidad adicional. El escalado dinámico funciona independientemente del escalado predictivo, escalando vertical u horizontalmente en función de la utilización actual. En primer lugar, Amazon ECS calcula el número recomendado de tareas para cada política de escalado no programado. A continuación, se escala en función de la política que proporciona la mayor cantidad de tareas.
Para permitir que se reduzca horizontalmente cuando la carga disminuya, el servicio siempre debe tener al menos una política de escalado dinámico con la parte de reducción horizontal habilitada.
Puede mejorar el rendimiento del escalado si se asegura de que su capacidad mínima y máxima no sean demasiado restrictivas. Se impedirá que una política con un número recomendado de tareas que no se encuentre dentro del rango de capacidad mínima y máxima se reduzca o escale horizontalmente.

# Supervisión de métricas de escalado predictivo para Amazon ECS con CloudWatch
<a name="predictive-scaling-monitoring"></a>

Puede utilizar Amazon CloudWatch para supervisar los datos para el escalado predictivo. Una política de escalado predictivo recopila datos que se utilizan para pronosticar la carga futura. Los datos recopilados se almacenan automáticamente en CloudWatch a intervalos regulares y se pueden utilizar para visualizar el rendimiento de la política a lo largo del tiempo. También puede crear alarmas de CloudWatch para que le notifiquen cuando los indicadores de rendimiento cambien más allá de los límites que defina.

## Visualización de los datos de las previsiones
<a name="visualize-historical-forecast-data"></a>

Los datos de pronósticos de carga para una política de escalado predictivo se pueden ver en CloudWatch y pueden ser útiles al visualizar pronósticos con respecto a otras métricas de CloudWatch en un solo gráfico. También puede consultar un intervalo de tiempo mayor para ver las tendencias a lo largo del tiempo. Puede acceder a métricas históricas de hasta 15 meses para obtener una mejor perspectiva del rendimiento de su política.

**Para consultar los datos de las previsiones históricas mediante la consola de CloudWatch**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Metrics** (Métricas) y, a continuación, **All metrics** (Todas las métricas).

1. Seleccione el espacio de nombres de la métrica de **Escalado automático de aplicaciones**.

1. Elija **Pronósticos de carga de escalado predictivo**.

1. En el campo de búsqueda, ingrese el nombre de la política de escalado predictivo o el nombre del grupo del servicio de Amazon ECS y, a continuación, pulse Intro para filtrar los resultados. 

1. Para representar gráficamente una métrica, active la casilla de verificación situada junto a ella. Para cambiar el nombre del gráfico, seleccione el icono de lápiz. Para cambiar el intervalo de tiempo, seleccione uno de los valores predefinidos o elija **custom (personalizado)**. Para obtener más información, consulte [Graphing a metric](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph_a_metric.html) (Representación gráfica de métricas) en *Amazon CloudWatch User Guide* (Guía del usuario de Amazon CloudWatch).

1. Para cambiar la estadística, elija la pestaña **Graphed metrics**. Elija el encabezado de columna o un valor individual y, a continuación, elija una estadística diferente. Aunque puede elegir cualquier estadística en cada métrica, tenga en cuenta que no todas las estadísticas son útiles para las métricas **PredictiveScalingLoadForecast**. Por ejemplo, las estadísticas **Media**, **Mínimo** y **Máximo** son útiles para el uso de la CPU, pero no así la estadística **Suma**.

1. Para agregar otra métrica al gráfico, en **Browse** (Examinar), elija **All** (Todo), busque la métrica específica y luego seleccione la casilla de verificación que aparece a su lado. Puede añadir hasta 10 métricas.

1. (Opcional) Para agregar este gráfico a un panel CloudWatch, elija **Acciones** y después **Agregar al panel**.

## Creación de métricas de precisión mediante la matemática métrica
<a name="create-accuracy-metrics"></a>

Las matemáticas en las métricas le permiten consultar varias métricas de CloudWatch y usar expresiones matemáticas para crear nuevas series temporales basadas en estas métricas. Puede visualizar las series temporales resultantes en la consola de CloudWatch y agregarlas a los paneles. Para obtener más información, consulte [Using metric math](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html) (Uso de cálculo de métricas) en *Amazon CloudWatch User Guide* (Guía del usuario de Amazon CloudWatch).

Con la matemática métrica, puede representar gráficamente los datos que genera el escalado automático del servicio para el escalado predictivo de distinas formas. Esto es de utilidad para supervisar el rendimiento de las políticas a lo largo del tiempo y a comprender si se puede mejorar la combinación de métricas.

Por ejemplo, puede usar una expresión matemática métrica para supervisar el [mean absolute percentage error](https://en.wikipedia.org/wiki/Mean_absolute_percentage_error) (error porcentual absoluto medio o MAPE). La métrica MAPE ayuda a supervisar la diferencia entre los valores pronosticados y los valores reales observados durante un periodo de previsión determinado. Los cambios en el valor de MAPE pueden indicar si el rendimiento de la política se degrada con el tiempo a medida que cambia la naturaleza de la aplicación. Un aumento en MAPE indica una brecha más amplia entre los valores pronosticados y los valores reales. 

**Ejemplo: expresiones matemáticas de métricas**

Para empezar a utilizar este tipo de gráfica, puede crear una expresión matemática métrica como la que se muestra en el siguiente ejemplo.



En lugar de una sola métrica, hay una matriz de estructuras de consulta de datos métricos para `MetricDataQueries`. Cada elemento de `MetricDataQueries` obtiene una métrica o realiza una expresión matemática. El primer elemento, `e1`, es la expresión matemática. La expresión designada establece el parámetro `ReturnData` a `true`, que en última instancia produce una sola serie temporal. Para todas las demás métricas, el valor `ReturnData` es `false`. 

En el ejemplo, la expresión designada utiliza los valores reales y previstos como entrada y devuelve la nueva métrica (MAPE). `m1` es la métrica de CloudWatch que contiene los valores de carga reales (si suponemos que el uso de CPU es la métrica de carga que se especificó originalmente para la política denominada `my-predictive-scaling-policy`). `m2` es la métrica de CloudWatch que contiene los valores de carga previstos. La sintaxis matemática de la métrica MAPE es la siguiente:

*Average of (abs ((Actual - Forecast)/(Actual))) (Promedio de (abs ((Real - Previsión)/(Real)))*

### Visualización de métricas de precisión y configuración de alarmas
<a name="visualize-accuracy-metrics-set-alarms"></a>

Para visualizar los datos de la métrica de precisión, seleccione la pestaña **Metrics** (Métricas) en la consola de CloudWatch. Puede hacer una representación gráfica de los datos desde allí. Para obtener más información, consulte [Adding a math expression to a CloudWatch graph](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#adding-metrics-expression-console) (Adición de una expresión matemática a un gráfico de CloudWatch) en *Amazon CloudWatch User Guide* (Guía del usuario de Amazon CloudWatch).

Puede configurar una alarma para una métrica que supervise desde la sección **Metrics**. Mientras está en la pestaña **Métricas diagramadas**, puede seleccionar el icono **Crear alarma** en la columna **Acciones**. El icono **Create alarm** se representa como una pequeña campana. Para obtener más información y opciones de notificaciones, consulte [Creación de una alarma de CloudWatch basada en una expresión matemática de métrica](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create-alarm-on-metric-math-expression.html) y [Notificaciones de cambios de alarma para usuarios](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Notify_Users_Alarm_Changes.html) en la *Guía del usuario de Amazon CloudWatch*.

También puede utilizar [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html) y [PutMetricAlarm](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricAlarm.html) para realizar los cálculos mediante matemáticas métricas y crear alarmas basadas en los resultados.

# Uso de acciones programadas para anular los valores de previsión de Amazon ECS
<a name="predictive-scaling-overriding-forecast-capacity"></a>

A veces, es posible que tenga información adicional sobre los requisitos futuros de la aplicación que el cálculo del pronóstico no pueda tener en cuenta. Por ejemplo, los cálculos de previsiones podrían subestimar las tareas necesarias para un próximo evento de marketing. Puede utilizar acciones programadas para anular temporalmente el pronóstico durante periodos futuros. Las acciones programadas se pueden ejecutar de forma periódica, o en una fecha y hora específicas cuando hay fluctuaciones de demanda únicas. 

Por ejemplo, puede crear una acción programada con una cantidad de tareas superior a la pronosticada. En el tiempo de ejecución, Amazon ECS actualiza el número mínimo de tareas del servicio. Dado que el escalado predictivo optimiza en función de la cantidad de tareas, se cumple una acción programada con una cantidad mínima de tareas superior a los valores pronosticados. De este modo se evita que la cantidad de tareas sea inferior a la prevista. Para dejar de anular la previsión, utilice una segunda acción programada para devolver la cantidad mínima de tareas a su configuración original.

En el siguiente procedimiento se describen los pasos para anular el pronóstico durante periodos futuros. 

**Topics**
+ [Paso 1: (opcional) Analizar los datos de serie temporal](#analyzing-time-series-data)
+ [Paso 2: Crear dos acciones programadas](#scheduling-capacity)

**importante**  
En este tema, se supone que está intentando anular la previsión para escalar a una capacidad superior a la prevista. Si necesita reducir temporalmente la cantidad de tareas sin que interfiera una política de escalado predictivo, utilice en su lugar el modo de *solo previsión*. Mientras esté en el modo de solo previsión, el escalado predictivo seguirá generando previsiones, pero no aumentará automáticamente la cantidad de tareas. De esta manera, puede supervisar la utilización de los recursos y reducir manualmente el número de tareas según sea necesario. 

## Paso 1: (opcional) Analizar los datos de serie temporal
<a name="analyzing-time-series-data"></a>

Para comenzar, analice los datos de serie temporal del pronóstico. Este es un paso opcional, pero resulta útil si desea comprender los detalles del pronóstico.

1. **Recuperar el pronóstico**

   Una vez creado el pronóstico, puede consultar un periodo específico en el pronóstico. El objetivo de la consulta es obtener una vista completa de los datos de serie temporal para un periodo específico. 

   La consulta puede incluir hasta dos días de datos de pronósticos futuros. Si hace tiempo utiliza el escalado predictivo, también puede acceder a los datos de pronóstico anteriores. Sin embargo, la duración máxima entre la hora de inicio y la hora de finalización es de 30 días. 

   Para obtener el pronóstico mediante el comando [get-predictive-scaling-forecast](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/get-predictive-scaling-forecast.html) de la AWS CLI, proporcione los siguientes parámetros en el comando: 
   + Indique el nombre del clúster en el parámetro `resource-id`. 
   + Ingrese el nombre de la política en el parámetro `--policy-name`. 
   + Indique la hora de inicio en el parámetro `--start-time` para devolver solo los datos pronosticados para la hora especificada o con posterioridad.
   + Indique la hora de finalización en el parámetro `--end-time` para devolver solo los datos pronosticados para antes de la hora especificada. 

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

   Si se ejecuta correctamente, el comando devuelve datos similares al ejemplo siguiente. 

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

   La respuesta incluye dos pronósticos: `LoadForecast` y `CapacityForecast`. `LoadForecast` muestra el pronóstico de carga por hora. `CapacityForecast` muestra los valores pronosticados para la capacidad que se necesita cada hora para gestionar la carga pronosticada mientras se mantiene un `TargetValue` de 40,0 (una utilización media de la CPU del 40 %).

1. **Identifique el periodo de destino**

   Identifique la o las horas en las que debe tener lugar la fluctuación de la demanda única. Recuerde que las fechas y horas que aparecen en el pronóstico están en UTC.

## Paso 2: Crear dos acciones programadas
<a name="scheduling-capacity"></a>

A continuación, cree dos acciones programadas para un periodo específico en el que la aplicación tendrá una carga superior a la pronosticada. Por ejemplo, si tiene un evento de marketing que incrementará el tráfico hacia su sitio durante un periodo de tiempo limitado, puede programar una acción única para actualizar la capacidad mínima cuando comience. A continuación, programe otra acción para devolver la capacidad mínima a la configuración original cuando el evento finalice. 

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En la página **Clusters** (Clústeres), elija el clúster.

1. En la página de detalles del clúster, en la sección **Servicios**, elija el servicio.

   Se abrirá la página de detalles del servicio.

1. Elija **Escalado automático de servicio**.

   Se abrirá la página de políticas.

1. Elija **Acciones programadas** y, a continuación, elija **Crear**.

   Se abrirá la página **Crear acción de programación**.

1. En **Nombre de acción**, escriba un nombre único.

1. Para **Zona horaria**, elija una zona horaria.

   Todas las zonas horarias enumeradas provienen de la base de datos de zona horaria de IANA. Para obtener más información, consulte [List of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).

1. En **Hora de inicio**, introduzca la **fecha** y la **hora** en que comienza la acción.

1. En **Recurrencia**, elija **Una vez**.

1. En **Ajustes de tareas**, en Mínimo, introduzca un valor inferior o igual a la cantidad máxima de tareas.

1. Elija **Crear acción programada**.

   Se abrirá la página de políticas.

1. Configure una segunda acción programada para devolver la cantidad mínima de tareas a la configuración original al final del evento. El escalado predictivo puede escalar la cantidad de tareas únicamente cuando el valor establecido para **Mínimo** es menor que los valores de la previsión.

**Para crear dos acciones programadas para eventos únicos (AWS CLI)**  
Para utilizar la AWS CLI para crear las acciones programadas, utilice el comando [put-scheduled-update-group-action](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scheduled-update-group-action.html). 

Por ejemplo, definamos una programación que mantenga una capacidad mínima de tres instancias el 19 de mayo a las 17:00 durante ocho horas. En los siguientes comandos se muestra cómo implementar este escenario.

El primer comando [put-scheduled-update-group-action](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scheduled-update-group-action.html) indica a Amazon EC2 Auto Scaling que actualice la capacidad mínima del grupo de escalado automático especificado a las 17:00 (UTC) del 19 de mayo 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
```

El segundo comando indica a Amazon EC2 Auto Scaling que establezca la capacidad mínima del grupo en uno a la 1:00 (UTC) del 20 de mayo 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
```

Después de agregar estas acciones programadas al grupo de escalado automático, Amazon EC2 Auto Scaling realiza lo siguiente: 
+ A las 17:00 (UTC) del 19 de mayo de 2021, se ejecuta la primera acción programada. Si el grupo tiene actualmente menos de tres instancias, el grupo se escala horizontalmente hasta tres instancias. Durante este tiempo y durante las siguientes ocho horas, Amazon EC2 Auto Scaling puede seguir escalando horizontalmente si la capacidad prevista es superior a la capacidad real o si existe una política de escalado dinámico en vigor. 
+ A la 1:00 (UTC) del 20 de mayo de 2021, se ejecuta la segunda acción programada. Esto devuelve la capacidad mínima a la configuración original al final del evento.

### Escalado basado en programaciones recurrentes
<a name="scheduling-recurring-actions"></a>

Para anular el pronóstico para el mismo periodo cada semana, cree dos acciones programadas y proporcione la lógica de fecha y hora utilizando una expresión cron. 

El formato de una expresión cron consta de cinco campos separados por espacios: [minuto] [hora] [día\$1del\$1mes] [mes\$1del\$1año] [día\$1de\$1la\$1semana]. Los campos pueden contener cualquier valor permitido, incluidos caracteres especiales. 

Por ejemplo, la siguiente expresión cron ejecuta una acción todos los martes a las 6:30. El asterisco se utiliza como comodín para coincidir con todos los valores de un campo.

```
30 6 * * 2
```

### Véase también
<a name="scheduling-scaling-see-also"></a>

Para obtener más información sobre cómo administrar las acciones programadas, consulte [Uso de acciones programadas para escalar los servicios de Amazon ECS](service-autoscaling-schedulescaling.md).

# Políticas avanzadas de escalado predictivo mediante métricas personalizadas para Amazon ECS
<a name="predictive-scaling-custom-metrics"></a>

Puede utilizar métricas predefinidas o personalizadas en una política de escalado predictivo. Las métricas personalizadas son prácticas cuando las métricas predefinidas (como CPU, memoria, etc.) no son suficientes para describir adecuadamente la carga de la aplicación.

Al crear una política de escalado predictivo con métricas personalizadas, puede especificar otras métricas de CloudWatch que proporciona AWS. Si lo desea, también puede especificar las métricas que defina y publique usted. También puede usar las matemáticas métricas para agregar y transformar las métricas existentes en una nueva serie temporal que AWS no realice un seguimiento automático. Por ejemplo, cuando combina valores en los datos al calcular nuevas sumas o promedios, se denomina *agregación*. Los datos obtenidos se denominan *aggregate* (agrupación).

En la siguiente sección se encuentran las mejores prácticas y ejemplos de cómo construir la estructura JSON para la política.

## Requisitos previos
<a name="predictive-scaling-custom-metrics-prerequisites"></a>

Para agregar métricas personalizadas en la política de escalado predictivo, debe tener permisos de `cloudwatch:GetMetricData`.

Para especificar sus propias métricas en lugar de las métricas que proporciona AWS, debe, en primer lugar, publicar las métricas en CloudWatch. Para obtener más información, consulte [Publicación de métricas personalizadas](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html) en la *Guía del usuario de Amazon CloudWatch*. 

Si publica sus propias métricas, asegúrese de publicar los puntos de datos con una frecuencia mínima de cinco minutos. Los puntos de datos se recuperan de CloudWatch en función de la duración del periodo que necesita. Por ejemplo, la especificación de la métrica de carga utiliza métricas por horas que permiten medir la carga de su aplicación. CloudWatch utiliza sus datos métricos publicados para proporcionar un único valor de datos en cualquier periodo de una hora mediante la agrupación de todos los puntos de datos con marcas temporales que entran en cada periodo de una hora.

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

Las siguientes prácticas recomendadas pueden ayudarlo a utilizar las métricas personalizadas de manera más eficaz:
+ La métrica más útil para la especificación de las métricas de carga es una métrica que representa la carga en un grupo de escalado automático en su conjunto.
+ La métrica más útil para el escalado por parte la especificación de la métrica de escalado es una métrica de rendimiento o uso promedio por tarea.
+ El uso objetivo debe coincidir con el tipo de métrica de escalado. Para configurar una política que emplee la utilización de la CPU, se trata de un porcentaje objetivo, por ejemplo.
+ Si no se siguen estas recomendaciones, es probable que los valores futuros pronosticados de la serie temporal sean incorrectos. Para validar que los datos son correctos, puede ver los valores pronosticados en la consola. Como alternativa, una vez creada la política de escalado predictivo, examine los objetos `LoadForecast` que se devuelven mediante una llamada a la API [GetPredictiveScalingForecast](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_GetPredictiveScalingForecast.html).
+ Se recomienda configurar el escalado predictivo en modo Solo pronóstico para poder evaluar el pronóstico antes de que el escalado predictivo comience a escalar de forma activa.

## Limitaciones
<a name="predicitve-scaling-custom-metrics-limitations"></a>
+ Puede consultar puntos de datos de hasta 10 métricas en una especificación de métrica.
+ A efectos de este límite, una expresión cuenta como una métrica.

## Solución de problemas de una política de escalado predictivo con métricas personalizadas
<a name="predictive-scaling-custom-metrics-troubleshooting"></a>

Si se produce un problema durante el uso de las métricas personalizadas, se recomienda seguir los siguientes pasos:
+ Si encuentra un problema en una implementación azul/verde al usar una expresión de búsqueda, asegúrese de haber creado una expresión de búsqueda que busque una coincidencia parcial y no una coincidencia exacta. También debe comprobar que en la consulta solo se busquen los grupos de escalado automático que se ejecutan en la aplicación específica. Para obtener más información sobre la sintaxis de expresiones de búsqueda, consulte [Sintaxis de la expresión de búsqueda de CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/search-expression-syntax.html) en la *Guía del usuario de Amazon CloudWatch*.
+ El comando [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) valida una expresión cuando crea la política de escalado. Sin embargo, existe la posibilidad de que este comando no identifique la causa exacta de los errores detectados. Para corregir esto, solucione los errores que recibe en la respuesta de una solicitud al comando [get-metric-data](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/get-metric-data.html). También puede solucionar problemas de la expresión desde la consola de CloudWatch.
+ Debe especificar `false` para `ReturnData` si `MetricDataQueries` especifica la función SEARCH() por sí sola sin una función matemática como SUM(). Esto se debe a que las expresiones de búsqueda podrían devolver varias series temporales, mientras que una especificación métrica basada en una expresión solo puede devolver una serie temporal.
+ Todas las métricas que aparecen en una expresión de búsqueda deben tener la misma resolución.

# Creación del archivo JSON para las métricas personalizadas de escalado predictivo con Amazon ECS
<a name="predictive-scaling-custom-metrics-example"></a>

En la siguiente sección hay ejemplos de cómo configurar el escalado predictivo para consultar datos de CloudWatch. Existen dos métodos diferentes para configurar esta opción, y el método que elija afectará al formato que utilice para construir el JSON para su política de escalado predictivo. Cuando usa matemáticas métricas, el formato del JSON varía aún más en función de las matemáticas métricas que se estén desempeñando.

1. Para crear una política que obtenga datos directamente de otras métricas de CloudWatch proporcionadas por AWS o de las métricas que publique en CloudWatch, consulte [Ejemplo de política de escalado predictivo con métricas personalizadas de escalado y de carga mediante la AWS CLI](#predictive-scaling-custom-metrics-example1).

## Ejemplo de política de escalado predictivo con métricas personalizadas de escalado y de carga mediante la AWS CLI
<a name="predictive-scaling-custom-metrics-example1"></a>

Para crear una política de escalado predictivo con métricas de carga y escalado personalizadas con AWS CLI, almacene los argumentos de `--predictive-scaling-configuration` en un archivo JSON denominado `config.json`.

Para empezar a agregar métricas personalizadas, sustituya los valores reemplazables del siguiente ejemplo por los de sus métricas y su utilización objetivo.

```
{
  "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 obtener más información, consulte [MetricDataQuery](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_MetricDataQuery.html) en la *Referencia de la API de Amazon EC2 Auto Scaling*.

**nota**  
Los siguientes son algunos de los recursos adicionales que pueden ayudarle a encontrar nombres de métricas, espacios de nombres, dimensiones y estadísticas para las métricas de CloudWatch:   
Para obtener más información sobre las métricas disponibles en los servicios de AWS, consulte [Servicios de AWS que publican métricas de CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html) en la *Guía del usuario de Amazon CloudWatch*.
Para obtener el nombre exacto de la métrica, el espacio de nombres y las dimensiones (si corresponde) de una métrica de CloudWatch con la AWS CLI, consulte [list-metrics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html). 

Para crear esta política, ejecute el comando [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scaling-policy.html) con el archivo de JSON como entrada, tal y como se muestra en el ejemplo siguiente.

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

Si se ejecuta correctamente, este comando devuelve el nombre de recurso de Amazon (ARN) de la política.

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

# Uso de expresiones de cálculos de métricas
<a name="predictive-scaling-math-expression"></a>

En la siguiente sección se proporciona información acerca del uso de las matemáticas de métricas con políticas de escalado predictivo en su política. 

## Descripción del cálculo de métricas
<a name="predictive-scaling-custom-metrics-math"></a>

Si todo lo que desea hacer es agrupar datos de métricas existentes, los cálculos de métricas de CloudWatch permiten ahorrar tiempo y costos en la publicación de otras métricas en CloudWatch. Puede utilizar cualquier métrica que proporcione AWS y, además, puede usar las métricas que defina como parte de sus aplicaciones.

Para obtener más información, consulte [Uso de cálculo de métricas](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html) en la *Guía del usuario de Amazon CloudWatch*. 

Si decide utilizar una expresión de cálculo de métricas en su política de escalado predictivo, tenga en cuenta los siguientes aspectos:
+ Las operaciones de cálculo de métricas utilizan los puntos de datos de la combinación única de nombre de métrica, espacio de nombres y pares de claves/valores de la dimensión de las métricas. 
+ Puede utilizar cualquier operador aritmético (\$1 - \$1 / ^), función estadística (como PROM o SUM) u otra función que sea compatible con CloudWatch. 
+ Puede utilizar tanto las métricas como los resultados de otras expresiones matemáticas en las fórmulas de la expresión matemática. 
+ Sus expresiones de cálculo de métricas se pueden formar con diferentes agrupaciones. Sin embargo, es una práctica recomendada para el resultado final de la agrupación que se utilice `Average` para la métrica de escalado y `Sum` para la métrica de carga.
+ Todas las expresiones utilizadas en la especificación de una métrica deben devolver en última instancia una única serie temporal.

Para utilizar cálculos de métricas, haga lo siguiente:
+ Elija una o más métricas de CloudWatch. A continuación, cree la expresión. Para obtener más información, consulte [Uso de cálculo de métricas](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html) en la *Guía del usuario de Amazon CloudWatch*. 
+ Compruebe que la expresión del cálculo de métricas sea válida mediante el uso de la consola de CloudWatch o la API [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html) de CloudWatch.

## Ejemplo de política de escalado predictivo que combina las métricas mediante el uso del cálculo de métricas (AWS CLI)
<a name="custom-metrics-ex2"></a>

En ocasiones, en lugar de especificar la métrica directamente, es posible que tenga que procesar primero sus datos de alguna manera. Por ejemplo, puede tener una aplicación que extraiga trabajo de una cola de Amazon SQS y puede querer utilizar el número de elementos en la cola como criterio para realizar un escalado predictivo. El número de mensajes en la cola no define exclusivamente el número de instancias que necesita. Por lo tanto, es necesario trabajar más para crear una métrica que pueda utilizarse para calcular las tareas pendientes por instancia.

A continuación se presenta un ejemplo de política de escalado predictivo para este caso. Especifica las métricas de escalado y carga que dependen de la métrica `ApproximateNumberOfMessagesVisible` de Amazon SQS, es decir, el número de mensajes disponibles para recuperar de la cola. Asimismo, utiliza la métrica `GroupInServiceInstances` de Amazon EC2 Auto Scaling y una expresión matemática que permite calcular las tareas pendientes por instancia para la métrica de escalado.

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

En el ejemplo se devuelve el ARN de la 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": []
}
```