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)