Blog | Morris & Opazo

Casos de éxito, investigaciones, casos prácticos y más de Morris & Opazo.

¿Cómo se pueden ahorrar costos al trabajar con Amazon Redshift?

Comparte
¿Cómo se pueden ahorrar costos al trabajar con Amazon Redshift?

Dentro de los muchos factores que podrían afectar la facturación de Amazon Redshift en una cuenta de AWS, vale la pena mencionar:

A. Regiones:

Dependiendo de la región, un mismo tipo de nodo puede variar significativamente de precio (precio por hora, Dólares Americanos):

Amazon Redshift: ¿Cómo se pueden ahorrar costos al trabajar con esta plataforma?

Una región inapropiada podría repercutir en un sobrecosto innecesario del cluster de Redshift.

 

B. Tipos de Nodos
Al crear un cluster para Redshift, es importante decidir correctamente el tipo de nodo a emplear (precios para Octubre 4 de 2.018):

Amazon Redshift: ¿Cómo se pueden ahorrar costos al trabajar con esta plataforma?

 

Redshift divide los nodos en 2 tipos principales (https://aws.amazon.com/es/redshift/pricing):

  1. Informática Densa (dcX.XXXX): entre un 30% y 60% más económicos que los nodos de Almacenamiento Denso, optimizados para consultas más rápidas, y generalmente recomendados para conjuntos de datos que no superan los 500GB.
  2. Almacenamiento Denso (dsX.XXXX): más costosos que los nodos de Informática Densa, pero optimizados para almacenar grandes cantidades de datos, suelen recomendarse para conjuntos de datos superiores a los 500GB.

Amazon Redshift: ¿Cómo se pueden ahorrar costos al trabajar con esta plataforma?

 

C. Snapshots
Supongamos que se tiene permanentemente encendido un cluster de tipo dc2.large en la región de Norte de Virginia (costo por hora = $0.25). Un mes de 30 días tiene en total 720 horas, lo que daría un costo de US $180. Pero, ¿y si se pudiera tener encendido ese mismo cluster SÓLO durante las horas laborales (8 horas al día, 5 días a la semana, 4 semanas al mes)?:

Amazon Redshift: ¿Cómo se pueden ahorrar costos al trabajar con esta plataforma?

¡Esto representaría un ahorro del 78%!

 

Sin embargo Redshift no permite detener y reiniciar un cluster. El proceso alternativo debería ser, al terminar el día laboral:

  1. Tomar snapshot del cluster
  2. Eliminar cluster
  3. y antes de iniciar el día laboral, crear un cluster con el snapshot guardado.

 

Con el siguiente comando se puede eliminar el cluster, generando antes un snapshot:

aws redshift delete-cluster –cluster-identifier motest –final-cluster-snapshot-identifier motest-daily-snapshot

 

Mientras el snapshot se esté generando:

Amazon Redshift: ¿Cómo se pueden ahorrar costos al trabajar con esta plataforma?

Amazon Redshift: ¿Cómo se pueden ahorrar costos al trabajar con esta plataforma?

 

El cluster continuará activo, pero una vez el snapshot esté completo:

 

Amazon Redshift: ¿Cómo se pueden ahorrar costos al trabajar con esta plataforma?

 

Comenzará la eliminación del cluster:

 

Amazon Redshift: ¿Cómo se pueden ahorrar costos al trabajar con esta plataforma?

 

Para restaurar el cluster se puede utilizar el comando:

aws redshift restore-from-cluster-snapshot –cluster-identifier motest –snapshot-identifier motest-daily-snapshot

 

Lo que se puede monitorear desde la consola AWS:

 

Amazon Redshift: ¿Cómo se pueden ahorrar costos al trabajar con esta plataforma?

Amazon Redshift: ¿Cómo se pueden ahorrar costos al trabajar con esta plataforma?

 

Hasta que termina la restauración del cluster:

 

Amazon Redshift: ¿Cómo se pueden ahorrar costos al trabajar con esta plataforma?

 

Estos comandos pueden registrarse como tareas administrativas para ejecutarse, dependiendo del sistema operativo, para Windows (a través del “Programador de Tareas”) o para Linux (utilizando crontab).

En el caso de Windows, se puede crear un archivo de PowerShell con un contenido similar a:

aws configure set AWS_ACCESS_KEY_ID xxxx
aws configure set AWS_SECRET_ACCESS_KEY yyyy
aws configure set default.region zzzz
aws redshift delete-cluster –cluster-identifier aaaa –final-cluster-snapshot-identifier bbbb

En donde:

  • xxxx = access key ID
  • yyyy = secret access key
  • zzzz = región del cluster
  • aaaa = nombre del cluster
  • bbbb = nombre del snapshot

 

Tanto access key ID como secret access key corresponden a un usuario con permisos suficientes para ejecutar los comandos de AWS CLI:

 

Amazon Redshift: ¿Cómo se pueden ahorrar costos al trabajar con esta plataforma?

 

El resto del proceso es similar a la creación de una tarea normal bajo Windows. Es importante sin embargo no olvidar que el archivo .ps1 debe ser considerado como argumento de la tarea:

 

Amazon Redshift: ¿Cómo se pueden ahorrar costos al trabajar con esta plataforma?

 

Y el programa debe ser powershell.exe

La tarea para crear restaurar el cluster puede crearse siguiendo el proceso anterior, pero esta vez el contenido del archivo debe ser:

aws configure set AWS_ACCESS_KEY_ID xxxx
aws configure set AWS_SECRET_ACCESS_KEY yyyy
aws configure set default.region zzzz
aws redshift restore-from-cluster-snapshot –cluster-identifier aaaa –snapshot-identifier bbbb

Do
{
$ClusterJSON = aws redshift describe-clusters –cluster-identifier aaaa | ConvertFrom-Json
Start-Sleep -s 30
} While ($ClusterJSON.Clusters.ClusterStatus –ne ‘available’)
aws redshift modify-cluster –cluster-identifier aaaa –vpc-security-group-ids ssss

 

En donde:

  • xxxx = access key ID
  • yyyy = secret access key
  • zzzz = región del cluster
  • aaaa = nombre del cluster
  • bbbb = nombre del snapshot
  • ssss = Security Group (el ID, no el nombre: sg…..)

Amazon Redshift: ¿Cómo se pueden ahorrar costos al trabajar con esta plataforma?

 

Es importante recordar que al restaurar un cluster desde un snapshot, toda la configuración inicial se mantiene EXCEPTO el SecurityGroup. De allí que el último comando debe ser actualizar el cluster para que se asocie con el SecurityGroup adecuado, pero este cambio sólo se puede realizar cuando el cluster ya se encuentra disponible.

 

Contenido generado por el equipo de Morris & Opazo