如何自动删除旧的Google App Engine版本实例?

我正在尝试更具成本效益的方式来部署我的Rails应用程序,并通过Ruby Starter项目来体验Google Cloud Platform。

几乎是完美的,并且在价格上肯定有竞争力,但我不知道如何在重新部署后自动删除旧的部署版本实例。

即:假设我有一个版本的每个实例运行:

计算引擎 - > VM实例

然后我改变我的应用程序,并重新部署:

$ gcloud preview app deploy app.yaml worker.yaml --promote 

所以现在我有两个版本的每个实例部署(因为谷歌智能切换,我会假设):

计算引擎 - >虚拟机实例增加了一倍

但现在呢? 这些情况是否会自行closures? 到目前为止,我发现摆脱它们的最好方法是从教程的“删除项目”页面 :

删除应用版本

您可以在“ 版本”页面中find您的应用程序版本列表。 要删除非默认版本,请选中checkbox,然后单击删除

AppEngine上/版本

Google App Engine上的每个人都只是手动删除其应用程序的旧部署?

要停止所有模块的所有非默认版本的所有实例(独立于这些模块所使用的语言),可以使用modules API添加一个用Python编写的小型control模块:

 from google.appengine.api.modules import modules # core logic (inside a cron or other handler) for m in modules.get_modules(): dv = modules.get_default_version(m) for v in modules.get_versions(m): if v != dv: modules.stop_version(m, v) 

这不会删除非默认版本( modules API目前不支持删除),但确实没有任何实例正在运行(因此不会产生费用)。

这个核心逻辑是为了让你把它包装在一个处理程序中,所以你可以根据需要触发它,例如在cron作业中,或者在外部触发的“常规”处理程序中触发(例如通过wget)或在你的bash脚本中curl。

我不相信有Python的google.appengine.api.modules.modules的Ruby版本,但是,我可能是错的…我只是找不到一个。 但是,一个简单的Python编码模块应该允许您控制以任何其他App Engine语言编码的模块(因为App Engine允许您混合和匹配以不同语言编码的模块)。

要closures与旧版本相关的实例,可以尝试使用删除教程资源文档中提到的拆卸脚本(最终定制):

如果您尝试了关于如何在计算引擎上运行Ruby的教程,请参阅该教程的“ 部署”和“拆卸脚本”部分

小心删除应用程序,但是,您不能重新使用应用程序ID!

由于旧版本不再是默认版本,至less没有新的实例会自动启动。 您可能仍然需要手动将其删除,除非Google自动删除超过应用程序允许的最大版本数的旧版自动分配版本。