2017-12-09 13 views
0

작업을 작업 대기열로 보내면 작업이 계속 실패하고 로그에 http 404 (찾을 수 없음) 오류가 표시됩니다.Google App Engine 클라우드 작업 알파 핸들러 http 404 오류

프로젝트가 유연한 구름 작업 알파에 대해 허용 목록에 포함되었습니다.

/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 :

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)) 
} 

단축 애플리케이션 제목 :

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

가장 가까운 I 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"문제는이 경로가 열려있는 api 파일에서 설정되지 않아 발생했습니다. 이 경로가 설정되어 있지 않으면 url이 프록시에 의해 인식되지 않습니다.