如何为托管 VM 配置 Google App Engine 健康检查端点

How to configure Google App Engine health checking endpoints for managed VMs

Google App Engine 从托管虚拟机请求 /_ah/health 以进行健康检查。

我正在尝试部署一个我不是代码维护者的项目,它将作为托管虚拟机部署以进行自动缩放和健康检查。

目前 app.yaml 不支持重写规则,如果支持,我可以将 /_ah/health 指向 /ping 端点。这太棒了,因为可以在不更改代码的情况下实施健康检查。

在 app.yaml 中有处理程序的配置,我的理解是处理程序用于 google 运行时,而不是用于托管 VM。

我想更改 /_ah/health 请求的位置。有没有办法进行此更改?

因此,假设您在 health.py:

中有一个 "health-check serving endpoint"(使用 webapp2 确定性,其他框架当然也可以类似地工作)
class HealthPage(webapp2.RequestHandler):
  def get(self):
    self.response.write('<html><body><p>I\'m fine!</p></body></html>')

不幸的是,您还对路由信息进行了硬编码,例如在同一个文件中(而不是从易于修改和推送的配置文件中更正确地读取它):

application = webapp2.WSGIApplication([
  ('/howareyou', HealthPage),
])

现在,要从同一个 HealthPage 处理程序提供运行状况检查,您需要将 app.yaml 编辑为:

handlers:
- url: /_ah/health
  script: health.application

before 任何 url: 具有通配符的处理程序当然可能 "swallow" 这个

现在,由于您在应用程序对象中有严格的硬编码路由决策,因此您必须对其进行编辑。这实际上不是 "editing code" -- 它是在编辑配置信息,不幸的是,您决定将其作为严格的硬编码字符串嵌入代码中,而不是从配置代码中获取。

要么降低代码内路由的严格程度,可能一直降低到:

application = webapp2.WSGIApplication([
  ('.*', HealthPage),
])

或者如果您致力于在代码中使用非常严格的硬编码路由,您可能会选择添加一行...:[=​​26=]

application = webapp2.WSGIApplication([
  ('/howareyou', HealthPage),
  ('/_ah/health', HealthPage),
])

对于其他路由系统(除了 app.yaml 和 App Engine 本身为您完成的其他基于配置的路由)当然也是如此——webapp2 的路由系统并不奇怪,也不异常.

请注意,none 这些编辑会阻止您的代码为 /howareyou URL 提供服务,如果它被路由到 health.py 在其他(非 GAE 和非 GAE) -like) 部署——他们将像以前一样提供服务。

如果尽管如此,您仍然需要 app.yaml 中的 "URL rewriting" 功能或类似的强大功能来处理健康检查,同时避免需要这种微小的解决方法,您可以当然,在 https://code.google.com/p/googleappengine/issues/list 打开一个功能请求——我无法想象它会变得如此紧迫,而那里有成千上万个未解决的问题,但是,嘿!,我以前错了:-).