pricing prices node google functions examples engine deploy app node.js google-app-engine google-cloud-platform

node.js - prices - Precios de Google App Engine Flexible env, una lección de $ 500



node js google cloud (3)

Después de múltiples viajes de ida y vuelta con Google, y horas de leer blogs y mirar informes, finalmente (algo) encontré una explicación para lo que sucedió. Lo publicaré aquí con mis sugerencias para que otras personas no sean también víctimas de este problema.

Tenga en cuenta que esto puede parecer obvio para algunos, pero como nuevo usuario de GAE, todo esto fue completamente nuevo para mí.

En resumen, cuando se implementa en GAE y se usa el siguiente comando " $ gcloud app deploy ", crea una nueva versión y la establece 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

Así que en mi caso, sin saberlo, había creado varias versiones de mi aplicación de nodo simple. Estas versiones todavía 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 de 2 instancias.

Google dice:

De forma predeterminada, App Engine escala el número de instancias que se ejecutan hacia arriba y hacia abajo para que coincidan con la carga, lo que brinda un rendimiento constante para su aplicación en todo momento mientras minimiza las instancias inactivas y, por lo tanto, reduce el costo.

Sin embargo, desde mi experiencia, este no fue el caso. Como dije anteriormente, empujé 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 SI DESEA UTILIZAR GAE FLEX ENV:

  1. En primer lugar, configure un presupuesto y alertas de facturación 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

  2. En un entorno de prueba, lo más probable es que no necesite varias versiones, así que al implementar use el siguiente comando:
    $ gcloud app deploy --version v1

  3. Actualice su app.yaml para forzar solo 1 instancia:

runtime: nodejs env: flex manual_scaling: instances: 1

Consulte esta publicación del 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 intentan aprender y experimentar, pero no fue así.

El env de Google App Engine Flex puede ser complicado si uno no conoce todos estos detalles. Un amigo me señaló a Heroku, que tiene precios fijos y ofertas de Free / Hobby. Pude empujar rápidamente una nueva aplicación de nodo allí, ¡y funcionó a la perfección! https://www.heroku.com/pricing

"Sólo" me costó $ 500 para aprender esta lección, pero espero que esto ayude a otros que buscan en Flex App Engine de Google.

Seguí el tutorial de Nodejs on App Engine Flexible @: https://cloud.google.com/nodejs/getting-started/hello-world

Después de haber 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 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:

Del 1 al 31 de octubre de 2017. Aplicación RAM RAM de instancia flexible: 5948.774 Gibibyte-hours ([MYPROJECT]) $ 42.24

1 - 31 de octubre de 2017 App Engine Flex Instance Core Horas: 5948.774 Horas ([MYPROJECT]) $ 312.91

¿Cómo este entorno de prueba con casi 0 solicitudes requiere aproximadamente 6,000 horas de recursos? En el peor de los casos, habría asumido que 720 horas a tiempo completo durante un mes a $ 0.05 por hora me costaría ~ $ 40. https://cloud.google.com/appengine/pricing

¿Puede alguien ayudar a arrojar luz sobre esto? No he podido averiguar por qué se necesitaban tantos recursos.

¡Gracias por la ayuda!

Para más datos, este es el tráfico durante el último mes (básicamente 0):

Y datos de instancia

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 (por defecto, sin cambios desde el tutorial)

runtime: nodejs env: flex


Hicimos que el código implementado en GAE FE se volviera absolutamente loco debido a una falla exponencial en cascada (los correos electrónicos devueltos generaron correos electrónicos de correo electrónico rebotados, etc.) y NO pudimos desactivar las instancias de GAE que fueron detectadas. Después de más de 4 horas y 1M + de correos electrónicos enviados (Mailgun simplemente no nos permitiría deshabilitar la cuenta. Dijo "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 del redis se detuvo, el DB bajó y todo el código del sitio se redujo a una sola página (estática 503 "Abajo para mantenimiento"), los correos electrónicos continuaron siendo enviados.

Determiné que GAE FE simplemente no finaliza las VM de docker ni las VM de Cloud Compute (redis) que están bajo carga de CPU. ¡Tal vez nunca! Una vez que eliminamos la máquina virtual Compute (en lugar de "meramente" detenerla), los correos electrónicos se detuvieron al instante.

Sin embargo, nuestra base de datos continuó llenándose con avisos de "no se pudo enviar el correo electrónico" por hasta 2 horas más, a pesar de que la aplicación GAE informó que el 100% de las versiones y las instancias se "detuvieron". Terminé teniendo que cambiar la contraseña de Google Cloud SQL.

Continuamos revisando la factura, y las 7 instancias no autorizadas continuaron usando la CPU, por lo que cancelamos la tarjeta utilizada en esa cuenta y, de hecho, el sitio se redujo cuando la factura estaba vencida, pero también lo hicieron las instancias fraudulentas. Nunca pudimos resolver la situación con el soporte por correo electrónico de GAE.


También tenga en cuenta que si aún desea que su aplicación tenga una escala automática, pero no quiere que se ejecuten en todo momento el mínimo predeterminado de 2 instancias, puede configurar su app.yaml así:

runtime: nodejs env: flex automatic_scaling: min_num_instances: 1