60秒?
いえいえ、600秒になりました! ただしJava 8、PHP 5、Python 2 テメーらは60秒のままだ
「昔は30秒だった」とか言い出す人は歴戦の猛者感があって怖いです、やめてください><;;;
以前から「GAEのHTTPリクエスト、60秒超えても処理続いてない?」や「5分くらいまでならタイムアウトしなくない?」といった話はちらほら見かけたような気がします。
が、2020年2月ごろに社内の一部で「ドキュメントに10分って明記されてる!」と話題になりました。
これについて触れられている記事が世に無いように思えたので、10分間タイムアウトしないことを軽く検証して残しておきます。
検証
今回は以下の2点を検証していきます。
- 本当に10分間タイムアウトしないか
- 何分までタイムアウトせずに処理を続けられるか
今回は検証のために、公式のHelloWorldサンプルのコードを流用し、クエリパラメータからSleepする秒数を渡してスリープさせるコードを実装し、GAE/Go 1.12環境へデプロイしました。
package main import ( "fmt" "log" "net/http" "os" "strconv" "time" ) func main() { http.HandleFunc("/", indexHandler) port := os.Getenv("PORT") if port == "" { port = "8080" log.Printf("Defaulting to port %s", port) } log.Printf("Listening on port %s", port) if err := http.ListenAndServe(":"+port, nil); err != nil { log.Fatal(err) } } // indexHandler responds to requests with our greeting. func indexHandler(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r) return } // ここから s := r.URL.Query().Get("s") sec, err := strconv.Atoi(s) if err != nil { http.Error(w, "400 bad request", http.StatusBadRequest) return } time.Sleep(time.Duration(sec) * time.Second) // ここまで追加 fmt.Fprint(w, "Hello, World!") }
runtime: go112
$ gcloud app deploy
結果
- 本当に10分間タイムアウトしないか
600秒ではタイムアウトせずにレスポンスを返してきてくれました! -
何分までタイムアウトせずに処理を続けられるか
まずは試しにと思い、601秒で試したところ、早速タイムアウトしてしまいました。きっちりしています。
まとめ
- GAEの60秒制限は10分制限になっていた
- 10分を1秒でも過ぎるとエラーになる
弊社クラウドエース株式会社は Google Cloud のプレミアパートナーとして、Google Cloud Platform 利用にあたってのカスタマーサービスや技術サポート・構築・開発・トレーニングなど Google Cloud に関するサービスを幅広く提供しております。ご相談ございましたらお気軽にお問い合わせください!