Google App Engine从托管虚拟机请求/ _ah / health进行健康检查。
我尝试部署一个我不是代码维护者的项目,它将被部署为托管虚拟机以进行自动扩展和健康检查。
目前app.yaml不支持重写规则,如果支持,我可以将/ _ah / health指向/ ping端点。这很好,因为可以在不更改代码的情况下实现运行状况检查。
在app.yaml中有处理程序的配置,我的理解是处理程序用于谷歌运行时,而不是托管虚拟机。
我想更改/ _ah / health请求的位置。有没有办法做这个改变?
答案 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的功能请求 - 我无法想象它会在那里遇到成千上万的公开问题,但是,嘿!我以前错了: - )。