【问题标题】:Google appengine cloud tasks alpha handler http 404 errorGoogle appengine 云任务 alpha 处理程序 http 404 错误
【发布时间】:2017-12-09 13:56:13
【问题描述】:

当我将任务发送到任务队列时,它一直失败并在日志中显示 http 404(未找到)错误。

该项目已被列入灵活云任务 alpha 的白名单。

我可以在本地向 /endpointpath 和 /tasks/worker 发送 HTTP 发布请求而不会出现任何错误。

端点工作正常并将任务添加到任务队列中。

 13:37:41.300 POST 200 0 B 422 ms curl/7.54.0 /endpointspath?key=keyremoved 0.0.0.0 - "POST endpointspath?key=keyremoved" 200 undefined "-" "curl/7.54.0"

应用程序作为默认服务运行。

app.go 主函数:

func main() {
    r := mux.NewRouter()

    r.HandleFunc("/", handler)

    r.HandleFunc("/_ah/health", healthCheckHandler)

    // Task handlers

    r.Path("/tasks/worker").Methods("POST", "GET", "PUT").HandlerFunc(workerTaskHandler)

    // Endpoints

    r.Path("/endpointpath").Methods("POST").HandlerFunc(searchHandler)

    http.Handle("/", r)

    port := 8080
    if portStr := os.Getenv("PORT"); portStr != "" {
        port, _ = strconv.Atoi(portStr)
    }
    log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", port), nil))
}

缩写app.yaml:

runtime: go
env: flex

handlers:
- url: /tasks/.*
  script: _go_app
- url: /.*
  script: _go_app

当队列向工作人员分派请求时记录 HTTP 404 响应:

10.0.0.1 - "POST /tasks/worker" 404 200 "-" "AppEngine-Google; (+http://code.google.com/appengine)"
Expand all | Collapse all {
 httpRequest: {
  latency:  "0s"    
  referer:  "-"    
  remoteIp:  "10.0.0.1"    
  requestMethod:  "POST"    
  requestUrl:  "/tasks/worker"    
  responseSize:  "200"    
  status:  404    
  userAgent:  "AppEngine-Google; (+http://code.google.com/appengine)"    
 }
 insertId:  "......."   
 jsonPayload: {
  appLatencySeconds:  "-"    
  latencySeconds:  "0.000"    
  time:  null    
  trace:  "......."    
 }
 labels: {
  appengine.googleapis.com/instance_name:  "......"    
  appengine.googleapis.com/trace_id:  "......."    
  compute.googleapis.com/resource_id:  "......."    
  compute.googleapis.com/resource_name:  "......"    
  compute.googleapis.com/zone:  "us-central1-b"    
 }
 logName:  "projects/projectname/logs/appengine.googleapis.com%2Fnginx.request"   
 receiveTimestamp:  "2017-12-09T10:56:14.794726383Z"   
 resource: {
  labels: {
   module_id:  "default"     
   project_id:  "projectname"     
   version_id:  "....."     
  }
  type:  "gae_app"    
 }
 timestamp:  "2017-12-09T10:56:10.301Z"   
}

我可以让 GAE 找到任务/工作人员 URL 的最接近方法是在 app.yaml 中设置 login:admin(即使 flex 不使用它进行身份验证)。这将返回 403 未经授权的错误。

handlers:
- url: /tasks/.*
  script: _go_app
  login: admin

这是日志中的 403 响应

{
 httpRequest: {
  latency:  "0s"    
  referer:  "-"    
  remoteIp:  "10.0.0.1"    
  requestMethod:  "POST"    
  requestUrl:  "/tasks/worker"    
  responseSize:  "162"    
  status:  403    
  userAgent:  "AppEngine-Google; (+http://code.google.com/appengine)"    
 }
 insertId:  "....."   
 jsonPayload: {
  appLatencySeconds:  "-"    
  latencySeconds:  "0.000"    
  time:  null    
  trace:  "....."    
 }
 labels: {
  appengine.googleapis.com/instance_name:  "...."    
  appengine.googleapis.com/trace_id:  "...."    
  compute.googleapis.com/resource_id:  "...."    
  compute.googleapis.com/resource_name:  "....."    
  compute.googleapis.com/zone:  "us-central1-b"    
 }
 logName:  "projects/projectname/logs/appengine.googleapis.com%2Fnginx.request"   
 receiveTimestamp:  "2017-12-09T13:35:59.986118082Z"   
 resource: {
  labels: {
   module_id:  "default"     
   project_id:  "projectname"     
   version_id:  "....."     
  }
  type:  "gae_app"    
 }
 timestamp:  "2017-12-09T13:35:54.764Z"   
}

不确定是否相关,但 projectname.appspot.com/_ah/health 返回此错误:

{
 "code": 5,
 "message": "Method does not exist.",
 "details": [
  {
   "@type": "type.googleapis.com/google.rpc.DebugInfo",
   "stackEntries": [],
   "detail": "service_control"
  }
 ]
}

【问题讨论】:

    标签: google-app-engine go


    【解决方案1】:

    事实证明,端点不能在与任务处理程序相同的服务上运行。如果任务处理程序 url 请求在柔性环境中的同一服务上运行,并且该服务启用了端点服务,则它们会被 ESP 代理阻止。

    在单独的服务上运行任务处理程序,并且不要在任务处理程序服务 app.yaml 文件中设置“endpoints_api_service:”。

    这样做会阻止队列能够分派给柔性环境中的工作人员。

    这在应用引擎文档中没有提到,这有点奇怪。

    “/_ah/health”问题是由于未在打开的 api 文件中设置此路径引起的。如果未设置此路径,则代理无法识别 url。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      • 2010-09-11
      • 2015-01-12
      • 2011-03-21
      相关资源
      最近更新 更多