Pricing of Google App Engine Flexible env, a $500 lesson
我遵循了App Engine Flexible env教程@上的Nodejs:
https://cloud.google.com/nodejs/getting-started/hello-world
成功部署并测试了本教程后,我将代码进行了一些实验,然后成功部署了它……然后将其运行,因为这是一个测试环境(非公开)。
一个月后,我收到了Google寄来的一笔超过370美元的帐单!
在交易明细中,我看到以下内容:
Oct 1 – 31, 2017 App Engine Flex Instance RAM: 5948.774 Gibibyte-hours
([MYPROJECT]) $42.24Oct 1 – 31, 2017 App Engine Flex Instance Core Hours: 5948.774 Hours ([MYPROJECT]) $312.91
这个几乎有0个请求的测试环境如何需要约6,000个小时的资源?在最坏的情况下,我会假设一个小时的720小时全职运行@每小时$ 0.05,这将使我花费$ 40。
https://cloud.google.com/appengine/pricing
有人可以帮助阐明这一点吗?我无法找出为什么需要这么多资源?
谢谢您的帮助!
要获取更多数据,以下是过去一个月的流量(基本上为0):
和实例数据
更新:
请注意,我确实对package.json进行了修改:我将nodemon添加为依赖项,并将其添加为" nmp start"脚本的一部分。尽管我怀疑这解释了6000个小时的资源:
1 2 3 4 5 6 7 8 9 10 | "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(默认值-与教程无变化)
1 2 | runtime: nodejs env: flex |
经过与Google的多次来回交流,以及数小时的博客阅读和报告阅读后,我终于(某种程度上)找到了一个解释。我将在这里发表我的建议,以便其他人也不会成为这个问题的受害者。
请注意,这对于某些人来说似乎很明显,但是作为GAE的新用户,所有这些对我来说都是全新的。
简而言之,当部署到GAE并使用以下命令" $ gcloud app deploy"时,它将创建一个新版本并将其设置为默认版本,而且更重要的是,它不会删除已部署的先前版本。
有关版本和实例的更多信息,请参见:https://cloud.google.com/appengine/docs/standard/python/an-overview-of-app-engine
因此,就我而言,我不知道它是否创建了简单节点应用程序的多个版本。这些版本仍在运行,以防出现错误后需要进行切换。但是这些版本也需要实例,除非在app.yaml中声明,否则默认实例为2个实例。
Google说:
App Engine by default scales the number of instances running up and
down to match the load, thus providing consistent performance for your
app at all times while minimizing idle instances and thus reducing
cost.
但是,根据我的经验,事实并非如此。如前所述,我使用nodemon推送了我的节点应用程序,这似乎导致了错误。
最后,按照本教程操作,而不是关闭项目,我有4个版本,每个版本有2个实例,全职运行1.5个月,为0个请求提供服务,并生成大量错误消息,这花了我500美元。
如果您仍然想使用GAE FLEX ENV的建议:
首先,请设置帐单预算和提醒,以免被自动计入CC的昂贵发票所困扰:https://cloud.google.com/billing/docs/how-to/budgets
在测试环境中,您很可能不需要多个版本,因此在部署时,请使用以下命令:
更新您的app.yaml以仅使用最少的资源强制执行一个实例:
1
2
3
4
5
6
7
8
9
10
11
12
13 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
有关更多信息,请参见此博客文章:https://medium.com/google-cloud/three-simple-steps-to-save-costs-when-prototyping-with-app-engine-flexible-environment-104fc6736495
我希望这些步骤中的某些步骤已包括在本教程中,以保护尝试学习和尝试的人,但事实并非如此。
如果不了解所有这些详细信息,则Google App Engine Flex环境可能会很棘手。一位朋友向我指出了Heroku,它既有定价,又有免费/业余爱好优惠。我能够在那里快速推送一个新的节点应用程序,它的工作原理很吸引人!
https://www.heroku.com/pricing
它"仅"花费了我$ 500来学习本课程,但是我希望这对其他使用Google App Engine Flex Env??的人有所帮助。
感谢分享!
看完这篇文章后,我的账单下降了,如下图
我的问题是,我认为较旧的版本在部署新版本时就停止了(在部署时明确表示我是gcloud,它会分割流量并停止版本...)
但是在仔细查看版本页面后,我有一堆旧机器仍在运行,但流量为0%。通过在部署时指定版本,可以轻松纠正昂贵的错误。
由于级联,指数级失败(退回的电子邮件生成退回的电子邮件,等等),我们部署到GAE FE的代码绝对是疯了,并且我们无法关闭有bug的GAE实例。 4个多小时后,发送了1M +电子邮件(Mailgun不允许我们禁用该帐户。它说"请等待24小时,以使密码更改生效",并且吊销API密钥没有任何作用),redis VM停止,数据库关闭,并且所有站点的代码都减少到一个单独的"停机维护"静态503页中),电子邮件一直处于发送状态。
我确定GAE FE只是不会终止承受CPU负载的docker VM或Cloud Compute VM(redis)。也许永远不会!一旦我们实际删除了Compute VM(而不是"仅仅"停止它),电子邮件便立即停止。
但是,尽管GAE应用程序报告100%的版本和实例"已停止",但我们的数据库仍继续充满"无法发送电子邮件"的通知长达2个小时。我最终不得不更改Google Cloud SQL密码。
我们一直在检查账单,这7个流氓实例继续使用CPU,因此我们取消了该帐户上使用的卡,实际上,站点在账单过期时确实掉线了,但流氓实例也是如此。 GAE电子邮件支持无法解决这种情况。
还要注意,如果您仍然希望应用程序具有自动缩放功能,但又不想始终默认运行至少2个实例,则可以像下面这样配置app.yaml:
1 2 3 4 | runtime: nodejs env: flex automatic_scaling: min_num_instances: 1 |