¿Cómo verificar los precios spot de AWS automáticamente?


15

He estado pensando en un trabajo de Jenkins para verificar el precio de las cajas de agente que hacemos girar; De vez en cuando el precio sube y pasará una o dos horas antes de que alguien note que no hay nuevos agentes, y luego tenemos que entrar manualmente y verificar el precio spot y ajustarlo en consecuencia, o cambiar de zona, etc.

Mi primer instinto fue que la mejor ruta es tener un trabajo de Jenkins por hora que ejecute aws ec2 describe-spot-instance-requestsy verifique si hay solicitudes fallidas (y luego nos detiene en caso de falla). Pero me pregunto si hay un método más limpio que implique realmente comparar precios duros (y, por lo tanto, podría decirnos exactamente qué está mal y por cuánto), en lugar de mirar solicitudes exitosas / fallidas.

¿Alguien configuró algo similar? Como lo hiciste


1
Pregunta razonable, supongo ... pero ¿por qué no solo pujas por lo que las instancias realmente valen para ti, seleccionas múltiples tipos de instancias (incluidas instancias más grandes de lo que necesitas, que ocasionalmente son más baratas cuando aumentan los precios spot de instancias más pequeñas ... ocasionalmente, incluso ahora que escribo esto, me encuentro con un cc2.8xlarge, porque actualmente es más barato que el c3.2xlarge que necesitaba, a pesar de tener 4x los núcleos y 4x la memoria) y dejar que el sistema maneje la instancia selección de tipo y colocación de AZ según el mercado?
Michael - sqlbot

1
@ Michael-sqlbot No tengo nada que decir en esa parte del proceso; Tenemos documentación que indica que compramos un determinado tamaño de instancia para fines de auditoría y, por eso, estamos atascados. Solo trato de aprovechar al máximo una situación irreal.
Alex

1
Muy bien, @Alex. Solo pensé en tirarlo, en caso de que no lo hayas considerado.
Michael - sqlbot

@Alex Fuera de interés, ¿es cierto el tamaño de instancia para que pueda verse fácilmente en las facturas? Porque usted (¡más bien, ellos!) Podría usar etiquetas y luego verlas en el Explorador de costos.
Tim Malone

Respuestas:


15

Descubrí una herramienta de código abierto llamada autospotting que podría ayudar con esto:

Una vez habilitado en un grupo de AutoScaling a pedido existente, lanza una instancia spot EC2 que es más barata, al menos tan grande y configurada de manera idéntica a sus instancias a pedido actuales. Tan pronto como la nueva instancia esté lista, se agrega al grupo y una instancia bajo demanda se separa del grupo y finaliza.

Tenemos esto en nuestra cartera de tareas pendientes, podremos agregar más contexto una vez que terminemos eso.

Actualizar:

Otra herramienta que se demostró recientemente en una conferencia fue mapbox / spotswap

Esto funciona de manera ligeramente diferente. Supervisa un ASG normal con instancias bajo demanda o reservadas y luego, si surge la escala, las ofertas y las provisiones detectan instancias de nivel de proceso similar en un ASG separado.


2
Bienvenido al sitio, Hashfyre :)
Dawny33

1
Soy el autor de AutoSpotting, ¡gracias por mencionarlo! ¿Ya lo intentaste? Estoy atento a los comentarios de los usuarios.
Cristian Măgherușan-Stanciu

6

Yo personalmente consideraría un modelo como este:

Timed Lambdas -> Checks spot price -> Push to ElastiCache

Luego, cuando necesite instancias:

Timed lambdas -> Pulls spot price from ElastiCache, sets it as environment variable on your Machine where you spin up IaC from -> This is parsed as argument to IaC code and pushes out the spot price

También podría establecer algunas tolerancias dentro de las lambdas (es decir, 10, 25, 50% de aumento según la importancia) y un límite máximo de demanda, por ejemplo. También es un gran lugar para construir la lógica para manejar, por ejemplo, encontrar el AZ más barato, encontrar el precio spot relativamente más barato ( 2xt2.mediumvs t2.large), etc.


Solo para obtener información, podría haber editado la respuesta eliminada y marcarla para solicitar la eliminación. (No se hace daño, es solo informativo :))
Tensibai

1
Dejaré mi vergüenza por perseverar para recordarme mis días equivocados por toda la eternidad.
Henry

Rofl, realmente no hay vergüenza, no te preocupes :)
Tensibai

3
Mis cicatrices definen quién soy
Henry

Buena idea: también vale la pena mencionar que uno podría impulsar el precio a una tabla DynamoDB, en caso de que aún no tengan un clúster ElastiCache por ahí;). O tal vez incluso un archivo JSON en un cubo S3.
Tim Malone

4

Permíteme darte una forma agnóstica de tratar de hacer esto.

De vez en cuando el precio sube y pasará una o dos horas antes de que alguien note que no hay nuevos agentes, y luego tenemos que entrar manualmente y verificar el precio spot y ajustarlo en consecuencia, o cambiar de zona, etc.

Nos enfrentamos al mismo problema en la infraestructura que estamos construyendo. Entonces, teníamos if-elsebloques de estilo para establecer el precio de oferta, dependiendo del precio a pedido de la instancia.

AWS tiene una API para obtener el precio a pedido de una instancia. Utilizamos este envoltorio de Python para este propósito.

Así, una vez que llegamos el precio bajo demanda (digamos X), nos metimos en if-elsebloques de estilo, que son 0.4*X, 0.6*X, 0.8*X, X, lo que significa que estamos tratando de tener un precio de oferta en el rango de 40%, 60%, 80% de la de -precio de la demanda. Si todo falla, entonces volveremos a crear instancias bajo demanda.

Además, como esto es independiente del precio actual de AWS, nunca pagamos un precio por encima del precio bajo demanda.

Pero, si está buscando una manera de hacerlo sobre la marcha, entonces la solución de Hashfyre debería ser el camino a seguir.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.