【问题标题】:How to configure Google App Engine health checking endpoints for managed VMs如何为托管 VM 配置 Google App Engine 运行状况检查端点
【发布时间】:2015-03-05 08:33:39
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您可以根据 cloud.google.com/appengine/docs/python/managed-vms/… 自定义很多健康检查参数,但不能自定义 AFAIK,它使用的 URL。您不能只在该 URL 以及任何其他 URL 上提供健康检查吗?您到底想完成什么专业任务?
  • 用例是支持在不更改源代码的情况下部署应用程序。
  • 如果健康检查显示/health/mine 而不是/_ah/health,这将如何促进您的任务?您可以使用 app.yaml(或 Java 中的等效机制)来切换代码的​​哪一部分服务于健康检查,无论您使用的是两个 URL 中的哪一个。
  • 我可以将运行状况检查请求指向应用程序中已经存在的端点(响应 200 的 get),而无需更改代码。我搜索了文档,但找不到像 apache 那样配置 app.yaml 来重写请求的方法。
  • 为什么需要重写请求?您不能按原样将其指向现有的端点吗?我建议编辑您的 Q 以清楚详细地解释您的目标以及为什么不能使用明显的方法,因为此评论线程变得太长而 Q 太短:-)。

标签: google-app-engine


【解决方案1】:

所以,假设您在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

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

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

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

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

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

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

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

请注意,如果在其他(非 GAE 和非 GAE 类)部署中路由到 health.py,则这些编辑都不会阻止您的代码为 /howareyou URL 提供服务——它们也会为它提供服务就像他们过去那样。

如果尽管如此,您仍然需要 app.yaml 中的“URL 重写”功能或类似的强大功能,以处理运行状况检查,同时避免需要这种微小的解决方法,您当然可以打开一个功能向https://code.google.com/p/googleappengine/issues/list 提出请求——我无法想象它与那里的数千个未解决问题相比变得如此紧迫,但是,嘿!,我以前错了:-)。

【讨论】:

猜你喜欢
  • 2016-02-15
  • 2016-11-30
  • 2017-08-08
  • 1970-01-01
  • 2016-03-17
  • 1970-01-01
  • 2018-08-08
  • 2015-01-12
  • 2018-06-05
相关资源
最近更新 更多