Node.js 谷歌应用程序引擎Flexible env的定价,500美元一课
我遵循了App Engine Flexible env教程@上的节点: 在成功地部署和测试了教程之后,我对代码进行了一些更改,并成功地部署了它。。。然后让它运行,因为这是一个测试环境(不是公共的) 一个月后,我收到一张来自谷歌的账单,金额超过370美元 在交易详情中,我看到以下内容: 2017年10月1日至31日App Engine Flex实例RAM:5948.774千兆字节小时 ([MYPROJECT])42.24美元 2017年10月1日至31日App Engine Flex实例核心小时数:5948.774小时([MYPROJECT])312.91美元 这个几乎为0个请求的测试环境如何需要大约6000小时的资源?在最坏的情况下,我会假设一个月720小时的全职工作——每小时0.05美元将花费我约40美元。 有人能帮忙解释一下吗?我不知道为什么需要这么多资源 谢谢你的帮助 关于更多数据,这是上个月的流量(基本上为0): 和实例数据 更新: 请注意,我确实对package.json进行了一次修改:我添加了nodemon作为依赖项,并将其作为“nmp start”脚本的一部分添加。尽管我怀疑这能否解释6000小时的资源:Node.js 谷歌应用程序引擎Flexible env的定价,500美元一课,node.js,google-app-engine,google-cloud-platform,Node.js,Google App Engine,Google Cloud Platform,我遵循了App Engine Flexible env教程@上的节点: 在成功地部署和测试了教程之后,我对代码进行了一些更改,并成功地部署了它。。。然后让它运行,因为这是一个测试环境(不是公共的) 一个月后,我收到一张来自谷歌的账单,金额超过370美元 在交易详情中,我看到以下内容: 2017年10月1日至31日App Engine Flex实例RAM:5948.774千兆字节小时 ([MYPROJECT])42.24美元 2017年10月1日至31日App Engine Flex实例核心小时
"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(默认不更改教程)
在与谷歌进行了多次交流,阅读了数小时的博客和报告后,我终于(多少)找到了对所发生事情的解释。我会把我的建议贴在这里,这样其他人就不会成为这个问题的受害者 注意,这对一些人来说似乎很明显,但作为一个新的GAE用户,所有这些对我来说都是全新的 简言之,当部署到GAE并使用以下命令“$gcloud app deploy”时,它会创建一个新版本并将其设置为默认版本,但更重要的是,它不会删除已部署的先前版本 有关版本和实例的更多信息,请参见此处: 所以在我的例子中,我在不知情的情况下创建了我的简单节点应用程序的多个版本。这些版本仍在运行,以防出现错误后需要切换。但这些版本也需要实例,默认值是2个实例,除非app.yaml中有说明 谷歌表示: 默认情况下,App Engine会缩放正在运行和正在运行的实例数 向下调整以匹配负载,从而为用户提供一致的性能 在最大限度地减少空闲实例的同时,始终使用应用程序,从而减少 成本 然而,根据我的经验,情况并非如此。如前所述,我用nodemon推送了我的节点应用程序,它似乎导致了错误 最后,在完成了教程并且没有关闭项目之后,我有了4个版本,每个版本有2个实例全职运行1.5个月,服务0个请求并生成大量错误消息,花费了我500美元 如果您仍然想使用GAE FLEX ENV,建议:
$gcloud应用程序部署--版本v1
"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"
},
学习这一课“只”花了我500美元,但我希望这能帮助其他人了解Google App Engine Flex Env。还要注意的是,如果你仍然希望你的应用程序具有自动缩放功能,但你不希望默认的最少2个实例始终运行,你可以配置你的应用程序。yaml如下所示:
runtime: nodejs
env: flex
automatic_scaling:
min_num_instances: 1
由于级联、指数故障(反弹电子邮件生成反弹电子邮件等),我们将代码部署到GAE FE,使其完全失控,并且我们无法关闭被窃听的GAE实例。4个多小时后,发送了超过100万封电子邮件(Mailgun只是不允许我们禁用该帐户。它说“请等待24小时,密码更改才能生效”,而撤销API密钥没有任何作用),redis虚拟机停止运行,数据库关闭,所有站点代码缩减为一个“关闭维护”的静态503页),电子邮件一直在发送 我确定GAE FE只是不终止CPU负载下的docker VM或云计算VM(redis)。也许永远不会!一旦我们真的删除了ComputeVM(而不是“仅仅”停止它),电子邮件就会立即停止 但是,尽管GAE应用程序报告100%的版本和实例被“停止”,但我们的DB在接下来的2个小时内仍然充斥着“无法发送电子邮件”的通知。我最终不得不更改谷歌云SQL密码 我们一直在检查账单,7个流氓实例一直在使用CPU,因此我们取消了该帐户上使用的卡,事实上,当账单过期时,该站点确实出现了故障,但流氓实例也出现了故障。我们一直无法通过GAE电子邮件支持解决这种情况
更新(2020年9月30日):这仍然是我22年职业生涯中最糟糕的时刻!!一个由15名精锐天才开发人员组成的整个公司都不知道如何关闭GAE。我们知道,当我的一个开发人员无法访问她的GMail帐户时,客户会收到数百万封电子邮件。无法拔下电源插头,无法关闭电源。真是太棒了
runtime: nodejs
env: flex
automatic_scaling:
min_num_instances: 1
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
instance_class: F1
automatic_scaling:
max_instances: 1 (--> you can adjust this as you wish)
min_instances: 0 (--> will scale to 0 when there is no traffic so won't incur costs)
instance_class: B1
basic_scaling:
max_instances: 1
idle_timeout: 1m
instance_class: F1
automatic_scaling:
max_instances: 1