I followed the Nodejs on App Engine Flexible env tutorial: https://cloud.google.com/appengine/docs/flexible/nodejs/create-app
Having successfully deployed and tested the tutorial, I changed the code to experiment a little and successfully deployed it... and then left it running since this was a testing environment (not public).
A month later, I receive a bill from Google for over $370!
In the transaction details I see the following:
Oct 1 – 31, 2017 App Engine Flex Instance RAM: 5948.774 Gibibyte-hours ([MYPROJECT]) $42.24
Oct 1 – 31, 2017 App Engine Flex Instance Core Hours: 5948.774 Hours ([MYPROJECT]) $312.91
How did this testing environment with almost 0 requests require about 6,000 hours of resources? In the worst, I would have assume 720 hrs running fulltime for a month @ $0.05 per hour would cost me ~$40. https://cloud.google.com/appengine/pricing
Can someone help shed light on this? I have not been able to find out why so many resources were needed?
Thanks for the help!
For more data, this is the traffic over the last month (basically 0):
UPDATE: Note that I did bring one modification to the package.json: I added nodemon as a dependency and added it as part of my "nmp start" script. Though I doubt this explains the 6000 hours of resources:
"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 (default-no change from tutorial)
runtime: nodejs
env: flex
ベストアンサー1
After multiple back and forth with Google, and hours of reading blogs and looking at reports, I've finally found an explanation for what happened. I will post it here with my suggestions so that other people do not also fall victim to this problem.
Note, this may seem obvious to some, but as a new GAE user, all of this was brand new to me.
つまり、GAEにデプロイして次のコマンドを使用すると、$ gcloudアプリのデプロイ「」では、新しいバージョンが作成され、それがデフォルトとして設定されますが、さらに重要な点として、デプロイされた以前のバージョンは削除されません。
バージョンとインスタンスの詳細については、こちらをご覧ください:https://cloud.google.com/appengine/docs/standard/python/appengine の概要
そのため、私の場合、知らないうちに、シンプルなノード アプリの複数のバージョンを作成していました。これらのバージョンは、エラー後に切り替えが必要な場合に備えて引き続き実行されています。ただし、これらのバージョンにもインスタンスが必要であり、app.yaml で指定されていない限り、デフォルトは 2 つのインスタンスです。
Googleは言う:
App Engine はデフォルトで、負荷に合わせて実行中のインスタンスの数を増減します。これにより、アイドル状態のインスタンスを最小限に抑え、コストを削減しながら、常にアプリに一貫したパフォーマンスを提供します。
しかし、私の経験からすると、そうではありませんでした。先ほど言ったように、nodemon を使用してノード アプリをプッシュしたのですが、それがエラーの原因だったようです。
結局、チュートリアルに従ってプロジェクトをシャットダウンしなかったため、4 つのバージョンが作成され、それぞれ 2 つのインスタンスが 1.5 か月間フルタイムで実行され、リクエストは 0 件で、多数のエラー メッセージが生成されたため、コストは 500 ドルになりました。
GAE FLEX ENV を引き続き使用する場合の推奨事項:
まず第一に、クレジットカードに自動的に請求される高額な請求書に驚かないように、請求予算とアラートを設定します。https://cloud.google.com/billing/docs/how-to/budgets
テスト環境では、複数のバージョンはおそらく必要ないので、デプロイ中に次のコマンドを使用します。
$ gcloud app deploy --version v1
更新するアプリ.yaml最小限のリソースで 1 つのインスタンスのみを強制するには:
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日の支出限度額を設定する
詳細については、次のブログ投稿をご覧ください。https://medium.com/google-cloud/three-simple-steps-to-save-costs-when-prototyping-with-app-engine-flexible-environment-104fc6736495
学習や実験をしようとしている人を保護するために、これらの手順のいくつかがチュートリアルに含まれていればよかったのですが、そうではありませんでした。
Google App Engine Flex env は、詳細をすべて知らないと扱いにくい場合があります。友人が、定額料金と無料/趣味向けオファーの両方がある Heroku を紹介してくれました。そこで新しいノード アプリをすぐにプッシュすることができ、うまくいきました。https://www.heroku.com/pricing
このレッスンを学ぶのにかかった費用は「たった」500 ドルですが、Google App Engine Flex Env を検討している他の方のお役に立てれば幸いです。