it-swarm.com.de

Preisgestaltung für Google App Engine Flexible env, eine Lektion im Wert von 500 US-Dollar

Ich habe das Nodejs on App Engine Flexible-Lernprogramm @: https://cloud.google.com/nodejs/getting-started/hello-world befolgt

Nachdem ich das Tutorial erfolgreich implementiert und getestet hatte, änderte ich den Code, um ein wenig zu experimentieren, und implementierte es erfolgreich ... und ließ es dann laufen, da dies eine Testumgebung war (nicht öffentlich).

Einen Monat später erhalte ich von Google eine Rechnung über 370 US-Dollar!

In den Transaktionsdetails sehe ich Folgendes:

1. - 31. Oktober 2017 Arbeitsspeicher der App Engine Flex-Instanz: 5948,774 Gibibyte-Stunden ([MYPROJECT]) $ 42,24

1. - 31. Oktober 2017 Kernstunden der App Engine Flex-Instanz: 5948,774 Stunden ([MYPROJECT]) $ 312,91

Wie hat diese Testumgebung mit fast 0 Anforderungen etwa 6.000 Stunden an Ressourcen beansprucht? Im schlimmsten Fall hätte ich davon ausgegangen, dass 720 Stunden Vollzeitbetrieb für einen Monat bei 0,05 USD pro Stunde ~ 40 USD kosten würden. https://cloud.google.com/appengine/pricing

Kann jemand helfen, Licht ins Dunkel zu bringen? Ich konnte nicht herausfinden, warum so viele Ressourcen benötigt wurden.

Danke für die Hilfe!

Für weitere Daten ist dies der Datenverkehr des letzten Monats (im Grunde genommen 0): Traffic Data

Und Instanzdaten Instance Data

UPDATE: Beachten Sie, dass ich eine Änderung am package.json vorgenommen habe: Ich habe nodemon als Abhängigkeit hinzugefügt und es als Teil meines Skripts "nmp start" hinzugefügt. Obwohl ich bezweifle, dass dies die 6000 Stunden an Ressourcen erklärt:

  "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 (Standardeinstellung - keine Änderung vom Tutorial)

runtime: nodejs
env: flex
53
ddallala

Nach mehrmaligem Hin und Her mit Google, stundenlangem Lesen von Blogs und Betrachten von Berichten habe ich endlich (etwas) eine Erklärung dafür gefunden, was passiert ist. Ich werde es hier mit meinen Vorschlägen posten, damit nicht auch andere Menschen diesem Problem zum Opfer fallen.

Beachten Sie, dass dies für manche offensichtlich erscheint, aber als neuer GAE-Benutzer war all dies für mich brandneu.

Kurz gesagt, bei der Bereitstellung in GAE und Verwendung des folgenden Befehls " $ gcloud app deploy " wird eine neue Version erstellt und als Standard festgelegt Außerdem und was noch wichtiger ist, wird die vorherige Version, die bereitgestellt wurde, NICHT entfernt.

Weitere Informationen zu Versionen und Instanzen finden Sie hier: https://cloud.google.com/appengine/docs/standard/python/an-overview-of-app-engine

In meinem Fall hatte ich also, ohne es zu wissen, mehrere Versionen meiner einfachen Node-App erstellt. Diese Versionen laufen noch, falls man nach einem Fehler wechseln muss. Für diese Versionen sind jedoch auch Instanzen erforderlich. Sofern in der Datei app.yaml nichts anderes angegeben ist, sind standardmäßig 2 Instanzen erforderlich.

Google sagt:

App Engine skaliert standardmäßig die Anzahl der Instanzen, die entsprechend der Auslastung ausgeführt werden, und bietet so jederzeit eine konsistente Leistung für Ihre App. Gleichzeitig werden inaktive Instanzen minimiert und die Kosten gesenkt.

Nach meiner Erfahrung war dies jedoch nicht der Fall. Wie ich bereits sagte, habe ich meine Node-App mit nodemon gepusht, was anscheinend Fehler verursacht hat.

Am Ende, nach dem Tutorial und ohne das Projekt herunterzufahren, hatte ich 4 Versionen mit jeweils 2 Instanzen, die 1,5 Monate lang in Vollzeit ausgeführt wurden und 0 Anfragen bedienten und viele Fehlermeldungen erzeugten. Das kostete mich 500 US-Dollar.

EMPFEHLUNGEN, WENN SIE GAE FLEX ENV NOCH VERWENDEN MÖCHTEN:

  1. Richten Sie in erster Linie ein Abrechnungsbudget und Benachrichtigungen ein, damit Sie nicht von einer teuren Rechnung überrascht werden, die automatisch Ihrem CC belastet wird: https://cloud.google.com/billing/docs/how-to/budgets

  2. In einer Testumgebung benötigen Sie höchstwahrscheinlich nicht mehrere Versionen. Verwenden Sie daher während der Bereitstellung den folgenden Befehl:
    $ gcloud app deploy --version v1

  3. Aktualisieren Sie Ihre app.yaml , um nur eine Instanz mit minimalen Ressourcen zu erzwingen:

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. Legen Sie das tägliche Ausgabenlimit fest

enter image description here

Weitere Informationen finden Sie in diesem Blogeintrag: https://medium.com/google-cloud/three-simple-steps-to-save-costs-when-prototyping-with-app-engine-flexible-environment- 104fc6736495

Ich wünschte, einige dieser Schritte wären in das Lernprogramm aufgenommen worden, um diejenigen zu schützen, die lernen und experimentieren möchten, aber das war nicht der Fall.

Google App Engine Flex env kann schwierig sein, wenn man nicht alle diese Details kennt. Ein Freund verwies mich auf Heroku, das sowohl feste Preise als auch Free/Hobby-Angebote hat. Ich konnte dort schnell eine neue Node-App pushen und es funktionierte wie ein Zauber! https://www.heroku.com/pricing

Das Erlernen dieser Lektion hat mich "nur" 500 US-Dollar gekostet, aber ich hoffe, dies hilft anderen, die Google App Engine Flex Env ​​kennenzulernen.

97
ddallala

Wir hatten Code, der für GAE FE bereitgestellt wurde, aufgrund eines kaskadierenden, exponentiellen Ausfalls (zurückgesendete E-Mails, die zurückgesendete E-Mails generierten usw.) völlig verrückt und konnten die fehlerhaften GAE-Instanzen NICHT deaktivieren. Nach mehr als 4 Stunden und mehr als 1 Million gesendeten E-Mails (Mailgun hat das Konto einfach NICHT deaktiviert. Die Meldung lautete "Bitte warten Sie bis zu 24 Stunden, bis die Kennwortänderung wirksam wird", und das Widerrufen von API-Schlüsseln führte zu nichts.)VM wurde gestoppt, die Datenbank heruntergefahren und der gesamte Site-Code auf eine einzige statische "Down For Maintenance" -Seite reduziert. Die E-Mails wurden weiterhin gesendet.

Ich habe festgestellt, dass GAE FE weder Docker-VMs noch Cloud-Compute-VMs (Redis) beendet, die unter CPU-Last stehen. Vielleicht nie! Sobald wir den Compute VM tatsächlich gelöscht haben (anstatt ihn "nur" anzuhalten), wurden die E-Mails sofort angehalten.

Unsere Datenbank wurde jedoch noch bis zu 2 Stunden lang mit "E-Mail konnte nicht gesendet werden" -Nachrichten gefüllt, obwohl die GAE-App meldete, dass 100% der Versionen und Instanzen "gestoppt" waren. Schließlich musste ich das Google Cloud SQL-Passwort ändern.

Wir haben die Rechnung überprüft, und die 7 Rogue-Instanzen haben weiterhin die CPU verbraucht. Daher haben wir die für dieses Konto verwendete Karte storniert. Die Website ist in der Tat gesunken, als die Rechnung überfällig war, aber auch die Rogue-Instanzen. Wir konnten die Situation mit GAE-E-Mail-Support nie lösen.

7

Danke für das Teilen! Nachdem ich diesen Artikel gelesen hatte, ging meine Rechnung wie in der folgenden Grafik nach unten

Steep cliff

Mein Problem war, dass ich davon ausgegangen bin, dass die älteren Versionen angehalten wurden, als ich eine neue Version bereitstellte Ein Haufen alter Maschinen, die noch laufen, aber 0% des Datenverkehrs bedienen. Teure Fehleinschätzungen können durch Angabe der Version bei der Bereitstellung leicht korrigiert werden.

gcloud app deploy --version v1

It serves someone, right?

5
Carl Engene

Beachten Sie auch, dass Sie Ihre app.yaml folgendermaßen konfigurieren können, wenn Ihre App weiterhin über eine automatische Skalierung verfügen soll, Sie jedoch nicht möchten, dass standardmäßig mindestens zwei Instanzen gleichzeitig ausgeführt werden:

runtime: nodejs
env: flex
automatic_scaling:
  min_num_instances: 1
2
Kat