Posted at

GAE/Go urlfetch.ClientでGetしたらタイムアウトエラー「urlfetch: DEADLINE_EXCEEDED」の解決方法

More than 3 years have passed since last update.

Cloud StorageのNearLine(レスポンス遅い、$安い)に配置したファイルにたいして、GETをしたらタイムアウトになった。その回避策。


5秒でタイムアウトしてしまう

client := urlfetch.Client(ctx)

response, err := client.Get(path_to_url)

すると、タイムアウトエラーが出ます。

Get http://example.com/path/to/file.xxx : API error 5 (urlfetch: DEADLINE_EXCEEDED)

これは urlfetch.Client のコメントにも書かれていましたが、タイムアウトの初期値が5秒(default deadline of 5 seconds)になっているためのようです。

以下のように書くことで、この問題を解決しました。


30秒までタイムアウトしない


client := &http.Client{
Transport: &urlfetch.Transport{
Context: ctx,
Deadline: 30 * time.Second,
},
}
response, err := client.Get(path_to_url)