Seguí el tutorial de Nodejs en App Engine Flexible env @: https://cloud.google.com/nodejs/getting-started/hello-world
Habiendo implementado y probado con éxito el tutorial, cambié el código para experimentar un poco y lo implementé con éxito ... y luego lo dejé en ejecución ya que este era un entorno de prueba (no público).
Un mes después, recibí una factura de Google por más de $ 370.
En los detalles de la transacción veo lo siguiente:
1 al 31 de octubre de 2017 RAM de instancia flexible de App Engine: 5948,774 gibibyte-horas ([MYPROJECT]) $ 42,24
Del 1 al 31 de octubre de 2017 Horas principales de instancias flexibles de App Engine: 5948.774 horas ([MYPROJECT]) $ 312.91
¿Cómo este entorno de prueba con casi 0 solicitudes requirió alrededor de 6.000 horas de recursos? En el peor de los casos, habría asumido que 720 horas funcionando a tiempo completo durante un mes a $ 0.05 por hora me costaría ~ $ 40. https://cloud.google.com/appengine/pricing
¿Alguien puede ayudar a aclarar esto? No he podido averiguar por qué se necesitaban tantos recursos.
¡Gracias por la ayuda!
Para obtener más datos, este es el tráfico durante el último mes (básicamente 0):
ACTUALIZACIÓN: Tenga en cuenta que traje una modificación al package.json: agregué nodemon como una dependencia y lo agregué como parte de mi script "nmp start". Aunque dudo que esto explique las 6000 horas de recursos:
"scripts": {
"deploy": "gcloud app deploy",
"start": "nodemon app.js",
"dev": "nodemon app js",
"lint": "samples lint",
"pretest": "npm run lint",
"system-test": "samples test app",
"test": "npm run system-test",
"e2e-test": "samples test deploy"
},
App.yaml (predeterminado, sin cambios desde el tutorial)
runtime: nodejs
env: flex
Respuestas:
Después de varios idas y venidas con Google, y horas de leer blogs y mirar informes, finalmente (algo) encontré una explicación de lo que sucedió. Lo publicaré aquí con mis sugerencias para que otras personas no sean víctimas de este problema.
Tenga en cuenta que esto puede parecer obvio para algunos, pero como nuevo usuario de GAE, todo esto era completamente nuevo para mí.
En resumen, cuando se implementa en GAE y se usa el siguiente comando " $ gcloud app deploy ", se crea una nueva versión y la configura como predeterminada, pero también, y lo que es más importante, NO elimina la versión anterior que se implementó.
Puede encontrar más información sobre versiones e instancias aquí: https://cloud.google.com/appengine/docs/standard/python/an-overview-of-app-engine
Entonces, en mi caso, sin saberlo, había creado múltiples versiones de mi aplicación de nodo simple. Estas versiones aún se están ejecutando en caso de que sea necesario cambiar después de un error. Pero estas versiones también requieren instancias, y el valor predeterminado, a menos que se indique en app.yaml, es 2 instancias.
Google dice:
Sin embargo, según mi experiencia, este no fue el caso. Como dije anteriormente, presioné mi aplicación de nodo con nodemon, que parece que estaba causando errores.
Al final, siguiendo el tutorial y sin cerrar el proyecto, tuve 4 versiones, cada una con 2 instancias ejecutándose a tiempo completo durante 1,5 meses, atendiendo 0 solicitudes y generando muchos mensajes de error y me costó $ 500.
RECOMENDACIONES SI TODAVÍA QUIERES USAR GAE FLEX ENV:
En primer lugar, configure un presupuesto de facturación y alertas para que no se sorprenda con una factura costosa que se carga automáticamente a su CC: https://cloud.google.com/billing/docs/how-to/budgets
En un entorno de prueba, lo más probable es que no necesite varias versiones, por lo que durante la implementación, use el siguiente comando:
$ gcloud app deploy --version v1
Actualice su app.yaml para forzar solo 1 instancia con recursos mínimos:
Consulte esta publicación de blog para obtener más información: https://medium.com/google-cloud/three-simple-steps-to-save-costs-when-prototyping-with-app-engine-flexible-environment-104fc6736495
Desearía que algunos de estos pasos se hubieran incluido en el tutorial para proteger a aquellos que están tratando de aprender y experimentar, pero no fue así.
Google App Engine Flex env puede ser complicado si no se conocen todos estos detalles. Un amigo me señaló Heroku, que tiene precios fijos y ofertas gratuitas / de pasatiempos. Pude colocar rápidamente una nueva aplicación de nodo allí, ¡y funcionó a la perfección! https://www.heroku.com/pricing
Aprender esta lección "sólo" me costó $ 500, pero espero que esto ayude a otros que buscan en Google App Engine Flex Env.
fuente
Si desea reducir sus costos de GAE, NO lo use
manual_scaling
como se sugiere en este artículo o en la respuesta aceptada.Lo hermoso de Google App Engine es que puede escalar hacia arriba y hacia abajo a cientos de máquinas en milisegundos según la demanda. Y solo paga por las instancias que se están ejecutando.
Para poder optimizar sus costos, debe comprender las diferentes opciones de escalado y tipos de instancias:
1. Aplicación del motor flexible frente a estándar:
Los detalles sobre las diferencias se pueden encontrar aquí , pero una diferencia importante relevante para esta pregunta es:
2. Opciones de escala:
3. Tipos de instancias: hay 2 tipos de instancias , y básicamente difieren en el tiempo que lleva iniciar una nueva instancia. Las instancias de clase F (utilizadas en el escalado automático) se pueden crear cuando sea necesario dentro de ~ 0.1 segundos y las instancias de clase B (utilizadas en escalado manual / básico) dentro de ~ 0.7 segundos:
Ahora que entendió los conceptos básicos, regresemos a la respuesta aceptada:
Lo que esto indica a GAE es ejecutar una clase de instancia personalizada ( más costosa ), todo el tiempo. Obviamente, esta no es la opción más barata porque el tipo de instancia B1 / F1 podría usarse en su lugar (tiene especificaciones más bajas) y también está ejecutando una instancia constantemente.
Lo más económico sería apagar la instancia cuando no hay tráfico. Si no le importa el tiempo de giro de ~ 0.1 segundos, puede optar por esto en su lugar:
Esto caerá dentro de las cuotas gratuitas que proporciona Google y no debería costarle nada si no tiene tráfico real.
PD: También es muy recomendable establecer un límite de gasto diario en caso de que olvide que algo se esté ejecutando o tenga algunas configuraciones costosas en alguna parte.
fuente
min_instances
en 0. Según la documentación :The minimum number of instances given to your service. When a service is deployed, it is given this many instances and scales according to traffic. Must be 1 or greater, default is 2 to reduce latency.
min_instances
es para entorno estándar, el documento que vinculó se refiere a diferentes parámetrosmin_num_instances
que son para entorno flexible. Actualizaré mi respuesta para reflejar esto claramente.Hicimos que el código implementado en GAE FE se volviera absolutamente loco debido a una falla exponencial en cascada (correos electrónicos rebotados generaron correos electrónicos rebotados, etc.) y NO pudimos desactivar las instancias GAE que tenían errores. Después de más de 4 horas, y más de 1 millón de correos electrónicos enviados (Mailgun simplemente NO nos permitió deshabilitar la cuenta. Decía "Espere hasta 24 horas para que el cambio de contraseña entre en vigencia", y la revocación de las claves de API no hizo nada), la VM de redis se detuvo, la base de datos cayó y todo el código del sitio se redujo a una sola página 503 estática "Abajo para mantenimiento"), los correos electrónicos se siguieron enviando.
Determiné que GAE FE simplemente no finaliza ni las VM de Docker ni las VM de Cloud Compute (redis) que están bajo carga de CPU. ¡Tal vez nunca! Una vez que realmente eliminamos la Compute VM (en lugar de "simplemente" detenerla), los correos electrónicos se detuvieron instantáneamente.
Pero nuestra base de datos continuó llenándose con avisos de "no se pudo enviar correo electrónico" durante hasta 2 horas más, a pesar de que la aplicación GAE informó que el 100% de las versiones e instancias estaban "Detenidas". Terminé teniendo que cambiar la contraseña de Google Cloud SQL.
Seguimos revisando la factura, y las 7 instancias deshonestas siguieron consumiendo CPU, por lo que cancelamos la tarjeta utilizada en esa cuenta, y el sitio, de hecho, se cayó cuando la factura estaba vencida, pero también lo hicieron las instancias deshonestas. Nunca pudimos resolver la situación con el soporte por correo electrónico de GAE.
fuente
También tenga en cuenta que si aún desea que su aplicación tenga un escalado automático pero no desea que el mínimo predeterminado de 2 instancias se ejecute en todo momento, puede configurar su app.yaml de la siguiente manera:
fuente
max_num_instances
?min_num_instances
tiene razón aquí si desea ahorrar dinero mientras está inactivo a costa de la redundancia. @Theodore También hay max_num_instances para limitar las instancias, pero no puedes establecer un límite de gasto diario en App Engine flexible (pero puedes hacerlo en estándar). Sin embargo, puede configurar presupuestos y alertas.Como nadie lo mencionó, aquí están los comandos de gcloud relacionados con las versiones
fuente
para entornos de desarrollo donde no me importa un poco de latencia, estoy usando la siguiente configuración:
Y si usa su instancia más que la asignación de instancia de backend gratuita, intente esto:
En el panel de AppEngine, observe las instancias, tome nota de la hora de inicio y observe para asegurarse de que después de que el período idle_timeout haya pasado, el recuento de instancias baje a cero y vea el mensaje "Esta versión no tiene instancias implementadas".
fuente