翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
HTTP クライアントをカスタマイズする
AWS SDK for Go は、デフォルトの設定値を持つ標準の HTTP クライアントを使用します。一部の設定値は変更できますが、高スループットかつ低レイテンシーを要件とする環境で AWS SDK for Go を使用する顧客にとって、標準の HTTP クライアントとトランスポート設定では十分でありません。設定の推奨事項はワークロードによって異なるため、詳細については「よくある質問」を参照してください。このセクションでは、カスタム HTTP クライアントを設定し、そのクライアントを使用して AWS SDK for Go 呼び出しを作成する方法について説明します。
カスタム HTTP クライアントの作成に役立つように、このセクションでは NewBuildableClient
カスタマイズする内容を定義しましょう。
設定ロード時のオーバーライド
カスタム HTTP クライアントは、LoadDefaultConfigLoadDefaultConfig に渡すことで提供できます。例えば、customClient をクライアントとして渡すには次のようにします。
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithHTTPClient(customClient))
タイムアウト
BuildableHTTPClient には、リクエストのタイムアウト制限を設定できます。このタイムアウトには、接続時間、リダイレクトの処理時間、レスポンス本文全体の読み取り時間が含まれます。例えば、クライアントのタイムアウトを変更するには次のようにします。
import "github.com/aws/aws-sdk-go-v2/aws/transport/http" // ... httpClient := http.NewBuildableClient().WithTimeout(time.Second*5)
Dialer
BuildableHTTPClient では、DialerDialer 設定を行う方法を示しています。
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http" import "net" // ... httpClient := awshttp.NewBuildableClient().WithDialerOptions(func(d *net.Dialer) { d.KeepAlive = -1 d.Timeout = time.Millisecond*500 })
設定
Dialer.KeepAlive
この設定は、アクティブなネットワーク接続のキープアライブ期間を表します。
キープアライブを無効にするには、負の値に設定します。
プロトコルとオペレーティングシステムがサポートしている場合、キープアライブを有効にするには、0 に設定します。
キープアライブをサポートしていないネットワークプロトコルやオペレーティングシステムでは、このフィールドは無視されます。TCP では、デフォルトでキープアライブが有効になっています。
https://golang.org/pkg/net/#Dialer.KeepAlive
KeepAlive は time.Duration 型で設定してください。
Dialer.Timeout
この設定は、ダイヤルが接続を確立するまでの最大待機時間を表します。
デフォルトは 30 秒です。
https://golang.org/pkg/net/#Dialer.Timeout
Timeout は time.Duration 型で設定してください。
トランスポート
BuildableHTTPClient では、Transport
プロキシの設定
インターネットに直接接続できない場合は、Go がサポートする環境変数 (HTTP_PROXY/HTTPS_PROXY) を使用するか、カスタム HTTP クライアントを作成してプロキシを設定できます。次の例では、クライアントがプロキシエンドポイントとして PROXY_URL を使用するように設定しています。
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http" import "net/http" // ... httpClient := awshttp.NewBuildableClient().WithTransportOptions(func(tr *http.Transport) { proxyURL, err := url.Parse("PROXY_URL") if err != nil { log.Fatal(err) } tr.Proxy = http.ProxyURL(proxyURL) })
その他の設定
次に示しているのは、HTTP クライアントのチューニングに使用できるその他の Transport 設定です。ここで説明されていない追加の設定については、Transport
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http" import "net/http" // ... httpClient := awshttp.NewBuildableClient().WithTransportOptions(func(tr *http.Transport) { tr.ExpectContinueTimeout = 0 tr.MaxIdleConns = 10 })
Transport.ExpectContinueTimeout
リクエストに [Expect: 100-continue] ヘッダーが含まれている場合、この設定はリクエストヘッダーの送信完了後にサーバーから最初のレスポンスヘッダーを受信するまでの最大待機時間を表します。この時間にはリクエストヘッダーの送信時間は含まれません。このタイムアウトが経過すると、HTTP クライアントはペイロードの送信を開始します。
デフォルトは 1 秒です。
0 に設定するとタイムアウトは無効になり、待機せずにペイロードが送信されます。この設定のユースケースの 1 つは、Amazon S3 を使用する関数のように (後述)、プロキシやサードパーティのサービスでセッション処理に関する問題が発生する場合です。
https://golang.org/pkg/net/http/#Transport.ExpectContinueTimeout
ExpectContinue は time.Duration 型で設定してください。
Transport.IdleConnTimeout
この設定は、HTTP リクエスト間でアイドル状態のネットワーク接続を維持する最大時間を表します。
制限なしにするには 0 に設定します。
https://golang.org/pkg/net/http/#Transport.IdleConnTimeout
IdleConnTimeout は time.Duration 型で設定してください。
Transport.MaxIdleConns
この設定は、すべてのホストにわたって保持されるアイドル (キープアライブ) 接続の最大数を表します。この値を増やすユースケースの 1 つは、同じクライアントから短期間に多数の接続が行われる場合です。
0 に設定すると無制限になります。
https://golang.org/pkg/net/http/#Transport.MaxIdleConns
MaxIdleConns は int 型で設定してください。
Transport.MaxIdleConnsPerHost
この設定は、ホストごとに保持するアイドル (キープアライブ) 接続の最大数を表します。この値を増やすユースケースの 1 つは、同じクライアントから短期間に多数の接続が行われる場合です。
デフォルトでは、ホストごとに 2 つのアイドル接続が保持されます。
0 に設定すると、DefaultMaxIdleConnsPerHost (2) が使用されます。
https://golang.org/pkg/net/http/#Transport.MaxIdleConnsPerHost
MaxIdleConnsPerHost は int 型で設定してください。
Transport.ResponseHeaderTimeout
この設定は、クライアントがレスポンスヘッダーを読み取るまでに待機する最大時間を表します。
クライアントがこの時間内にレスポンスヘッダーを読み取れない場合、リクエストはタイムアウトエラーで失敗します。
長時間実行される Lambda 関数を使用する場合、この値の設定には注意が必要です。Lambda 関数が終了するかタイムアウトするまで、レスポンスヘッダーが返されないためです。ただし、**InvokeAsync** API オペレーションではこのオプションを使用できます。
デフォルトではタイムアウトはなく、無期限に待機します。
https://golang.org/pkg/net/http/#Transport.ResponseHeaderTimeout
ResponseHeaderTimeout は time.Duration 型で設定してください。
Transport.TLSHandshakeTimeout
この設定は、TLS ハンドシェイクが完了するまでの最大待機時間を表します。
デフォルトは 10 秒です。
0 に設定すると、タイムアウトは無効になります。
https://golang.org/pkg/net/http/#Transport.TLSHandshakeTimeout
TLSHandshakeTimeout は time.Duration 型で設定してください。