如何为托管 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 打开一个功能请求——我无法想象它会变得如此紧迫,而那里有成千上万个未解决的问题,但是,嘿!,我以前错了:-).
Google App Engine 从托管虚拟机请求 /_ah/health 以进行健康检查。
我正在尝试部署一个我不是代码维护者的项目,它将作为托管虚拟机部署以进行自动缩放和健康检查。
目前 app.yaml 不支持重写规则,如果支持,我可以将 /_ah/health 指向 /ping 端点。这太棒了,因为可以在不更改代码的情况下实施健康检查。
在 app.yaml 中有处理程序的配置,我的理解是处理程序用于 google 运行时,而不是用于托管 VM。
我想更改 /_ah/health 请求的位置。有没有办法进行此更改?
因此,假设您在 health.py
:
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 打开一个功能请求——我无法想象它会变得如此紧迫,而那里有成千上万个未解决的问题,但是,嘿!,我以前错了:-).