164 votes

Tarification de Google App Engine Flexible env, une leçon de 500 $

J'ai suivi les Nodejs sur App Engine Flexible env tutoriel @: https://cloud.google.com/nodejs/getting-started/hello-world

Après avoir correctement déployé et testé le tutoriel, j'ai changé le code pour expérimenter un peu et déployé avec succès... et puis à gauche en cours d'exécution, puisque c'était un environnement de test (non public).

Un mois plus tard, je reçois une facture de Google pour plus de 370!

Dans les détails de la transaction, je vois les suivantes:

1 Oct – 31, 2017 App Engine Flex Instance RAM: 5948.774 Gibibyte heures ([MYPROJECT]) $42.24

1 Oct – 31, 2017 App Engine Flex Exemple les Heures d'ouverture: 5948.774 Heures ([MYPROJECT]) $312.91

Comment cet environnement de test avec presque 0 demandes ont besoin d'environ 6 000 heures de ressources? Dans le pire, j'aurais assumer de 720 heures de course à temps plein pendant un mois @ $0,05 $ l'heure m'a coûté ~$40. https://cloud.google.com/appengine/pricing

Quelqu'un peut-il aider à faire la lumière sur cette? Je n'ai pas été en mesure de savoir pourquoi autant de ressources sont nécessaires?

Merci pour l'aide!

Pour plus de données, c'est le trafic sur le dernier mois (en gros 0): Traffic Data

Et les données d'instanceInstance Data

Mise à JOUR: Notez que je n'ai apporter une modification à l'emballage.json: j'ai ajouté nodemon en tant que dépendance et de l'ajouter dans le cadre de mon "nmp début de script". Bien que je doute que cela explique les 6000 heures de ressources:

  "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 (par défaut-pas de changement de tutoriel)

runtime: nodejs
env: flex

261voto

ddallala Points 311

Après plusieurs allers et retours avec Google, et des heures de lecture de blogs et de regarder les rapports, j'ai enfin (un peu) trouve une explication pour ce qui s'est passé. Je vais poster ici mes suggestions afin que d'autres personnes ne sont pas aussi victimes de ce problème.

Remarque, cela peut paraître évident pour certains, mais comme une nouvelle GAE de l'utilisateur, tout cela était tout nouveau pour moi.

En bref, lors du déploiement de la FGA et à l'aide de la commande suivante "$ gcloud application de déployer", il crée une nouvelle version, et le définit comme la valeur par défaut, mais aussi, et plus important encore, il n'est PAS supprimer la version précédente qui a été déployé.

Plus d'informations sur les versions et les instances peuvent être trouvés ici: https://cloud.google.com/appengine/docs/standard/python/an-overview-of-app-engine

Donc dans mon cas, sans le savoir, j'avais créé plusieurs versions de mon nœud simple application. Ces versions sont toujours en cours d'exécution dans le cas où on a besoin pour passer à la suite d'une erreur. Mais ces versions nécessitent des cas, et la valeur par défaut, sauf indication contraire dans l'application.yaml est de 2 cas.

Google dit:

App Engine par les échelles par défaut le nombre d'instances en cours d'exécution et vers le bas pour correspondre à la charge, offrant ainsi des performances compatibles pour votre application à tout moment, tout en minimisant les instances inactives et donc de réduire coût.

Cependant, d'après mon expérience, ce n'était pas le cas. Comme je l'ai dit plus tôt, j'ai poussé mon nœud app avec nodemon qui semble à l'origine des erreurs.

En fin de compte, à la suite du tutoriel et de ne pas arrêter le projet, j'ai eu 4 versions, chacune avec 2 instances en cours d'exécution à temps plein pendant 1,5 mois de servir 0 demande et de générer de nombreux messages d'erreur et ça m'a coûté $500.

RECOMMANDATIONS SI VOUS VOULEZ TOUJOURS UTILISER GAE FLEX ENV:

  1. D'abord et avant tout, le programme d'installation de facturation, budget et alertes de sorte que vous ne soyez pas surpris par cher la facture est automatiquement débité de votre CC: https://cloud.google.com/billing/docs/how-to/budgets

  2. Dans un essai env, vous avez probablement n'avez pas besoin de plusieurs versions, de sorte que lors du déploiement d'utiliser la commande suivante:
    $ gcloud app deploy --version v1

  3. Mise à jour de votre application.yaml à la force que 1 exemple avec un minimum de ressources:

runtime: nodejs
env: flex

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10
  1. Ensemble limite des dépenses quotidiennes

enter image description here

Consultez cet article de blog pour plus d'info: https://medium.com/google-cloud/three-simple-steps-to-save-costs-when-prototyping-with-app-engine-flexible-environment-104fc6736495

Je souhaite que certaines de ces mesures avaient été inclus dans le tutoriel afin de protéger ceux qui sont en train d'apprendre et d'expérimenter, mais il ne l'était pas.

Google App Engine Flex env peut être difficile si l'on ne connaît pas tous ces détails. Un ami m'a signalé Heroku, qui est définie à la fois des prix et/Hobby offre. J'ai été rapidement en mesure de pousser un nouveau nœud app-là, et il a travaillé comme un charme! https://www.heroku.com/pricing

Il "seulement" me coûter de 500 $à apprendre cette leçon, mais j'espère que cela aide les autres à la recherche avec Google App Engine Flex Env.

25voto

Theodore R. Smith Points 4410

Nous avons eu le code déployé en FGA FE aller absolument noix en raison de la cascade, l'exponentielle l'échec (emails rejetés générés rebondi-e-mail e-mails, etc.) et nous ne pouvions PAS éteindre le GAE instances qui ont été mis sur écoute. Après 4 heures, et 1M+ e-mails envoyés (Mailgun ne serait PAS juste de nous laisser désactiver le compte. Il a dit "s'il vous Plaît attendre jusqu'à 24 heures pour le changement de mot de passe pour entrer en vigueur", et de révoquer les clés API n'a rien fait), le redis VM a été arrêté, la DB vers le bas, et tout le site code réduction à un seul "Down For Maintenance" statique 503 page), les e-mails conservés envoyé.

J'ai déterminé que la GAE FE tout simplement ne pas se terminer soit docker machines ou de Cloud computing VMs (redis) qui sont sous la charge du PROCESSEUR. Peut-être jamais! Une fois que nous avons supprimé le Calcul de la VM (au lieu de "simplement" de l'arrêter), les e-mails instantanément arrêté.

Mais, notre DB a continué à se remplir avec "ne pouvaient pas envoyer de courriel" avis jusqu'à 2 heures de plus, en dépit de la GAE application de déclaration de 100% des versions et des instances à "arrêter". J'ai fini par avoir à modifier le Google Cloud SQL mot de passe.

Nous avons gardé la vérification de la facture, et le 7 voyou des instances gardé à l'aide de jusqu'CPU et donc nous avons annulé la carte utilisée sur ce compte, et le site n'a, en fait, lorsque le projet de loi a été passé en raison, mais le coquin instances. Nous n'avons jamais été en mesure de résoudre la situation avec GAE de support par email.

7voto

Carl Engene Points 56

Merci pour le partage! Après la lecture de cet article de mon projet de loi est allé vers le bas comme le graphique ci-dessous

Steep cliff

Mon problème est que je suppose que les anciennes versions où arrêtée quand j'ai déployé une nouvelle version (qui dit clairement: je gcloud lorsque vous déployez, le fractionnement de la circulation et l'arrêt de la version...) Mais après avoir examiné de près sur la page de la version, j'ai eu un tas de vieilles machines encore en cours d'exécution, mais de servir de 0 % du trafic. Cher misstake facilement corrigé en spécifiant la version lors du déploiement.

gcloud app deploy --version v1

It serves someone, right?

5voto

Kat Points 84

Notez également que si vous souhaitez toujours que votre application dispose d'une mise à l'échelle automatique, mais que vous ne voulez pas que le minimum par défaut de 2 instances s'exécute en permanence, vous pouvez configurer votre application.yaml comme suit:

 runtime: nodejs
env: flex
automatic_scaling:
  min_num_instances: 1
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X