2017-12-09 18 views
0

タスクをタスクキューに送信すると、失敗し続け、ログにhttp 404(見つからない)エラーが表示されます。Google App Engineクラウドタスクアルファハンドラhttp 404エラー

このプロジェクトは、フレキシブルなクラウドタスクのアルファ版のホワイトリストに登録されています。

/endpointpath &/tasks/workerにHTTP POST要求をエラーなしで送信できます。

エンドポイントは正常に動作し、タスクをタスクキューに追加します。

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:

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を設定します(tho flexではこれを使用しません認証)。これにより、403の不正なエラーが返されます。それが関係ならここ

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

{ 
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" 
} 

わからないログに403応答であるが、projectname.appspot.com/_ah/healthは、このエラーが返されます。

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

答えて

0

それはターンをタスク・ハンドラーと同じサービス上で実行することはできません。タスクハンドラのURLリクエストは、ESPプロキシによって柔軟な環境で同じサービス上で実行され、エンドポイントサービスが有効になっている場合はブロックされます。

タスクハンドラを別のサービスで実行し、タスクハンドラサービスのapp.yamlファイルに「endpoints_api_service:」を設定しないでください。

このようにすると、キューが柔軟な環境のワーカーにディスパッチできなくなります。

これはアプリエンジンのドキュメントには記載されていませんが、これはちょっと奇妙です。

「/ _ah/health」の問題は、このパスがopen apiファイルに設定されていないことが原因でした。このパスが設定されていない場合、URLはプロキシによって認識されません。