如何为托管VM配置Google App Engine运行状况检查端点

时间:2015-01-07 12:33:02

标签: google-app-engine

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

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

目前app.yaml不支持重写规则,如果支持,我可以将/ _ah / health指向/ ping端点。这很好,因为可以在不更改代码的情况下实现运行状况检查。

在app.yaml中有处理程序的配置,我的理解是处理程序用于谷歌运行时,而不是托管虚拟机。

我想更改/ _ah / health请求的位置。有没有办法做这个改变?

1 个答案:

答案 0 :(得分:2)

所以,假设你有一个“健康检查服务端点”(使用webapp2来确定,其他框架当然也会有类似的工作)health.py

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

之前任何处理程序url:的通配符当然可以“吞下”这个通配符。

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

要么使代码内路由不那么严格,要么一直到:

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

或者如果您承诺在代码中使用非常严格的硬编码路由,则可以选择添加一行...:

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

同样对于其他路由系统(超出app.yaml以及App Engine本身为您完成的其他基于配置的路由)当然 - webapp2的路由系统并不奇怪,也不是异常。< / p>

请注意,如果代码在其他(非GAE和非GAE类似)部署中路由到/howareyou,则这些修改都不会阻止您的代码提供health.py网址 - 它们将提供服务它和以前一样好。

如果尽管如此,你仍然需要app.yaml中的“URL重写”功能,或类似功能强大的功能,以处理健康检查,同时避免需要这种微小的解决方法,你当然可以打开在https://code.google.com/p/googleappengine/issues/list的功能请求 - 我无法想象它会在那里遇到成千上万的公开问题,但是,嘿!我以前错了: - )。