HTTP クライアントをカスタマイズする - AWS SDK for Go v2

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

HTTP クライアントをカスタマイズする

は、デフォルトの HTTP クライアントとデフォルトの設定値 AWS SDK for Go を使用します。これらの設定値の一部は変更できますが、スループットが高くレイテンシーの低い環境で を使用している AWS SDK for Go お客様には、デフォルトの HTTP クライアントとトランスポートが十分に設定されていません。詳細については、「」を参照してください。よくある質問設定の推奨事項は特定のワークロードによって異なります。このセクションでは、カスタム HTTP クライアントを設定し、そのクライアントを使用して AWS SDK for Go 呼び出しを作成する方法について説明します。

このセクションでは、カスタム HTTP クライアントの作成を支援するために、NewBuildableClient でカスタム設定を設定し、そのクライアントを AWS SDK for Go サービスクライアントで使用する方法について説明します。

カスタマイズする内容を定義しましょう。

設定のロード中の上書き

カスタム HTTP クライアントは、WithHTTPClientを使用してクライアントをラップし、結果の値を に渡すことで LoadDefaultConfig を呼び出すときに提供できますLoadDefaultConfig。たとえば、 をクライアント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)

ダイヤラー

BuildableHTTPClient は、変更された Dialer オプションを使用してクライアントを構築するためのビルダーメカニズムを提供します。次の例は、クライアントDialer設定を構成する方法を示しています。

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://https://golang.org/pkg/net/#Dialer.KeepAlive://https

time.Duration KeepAliveとして設定します。

Dialer.Timeout

この設定は、ダイヤルが接続の作成を待機する最大時間を表します。

デフォルトは 30 秒です。

「https://https://golang.org/pkg/net/#Dialer.Timeout://https

time.Duration Timeoutとして設定します。

トランスポート

BuildableHTTPClient は、変更されたトランスポートオプションを使用してクライアントを構築するためのビルダーメカニズムを提供します。

プロキシの設定

インターネットに直接接続できない場合は、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 type ドキュメントに記載されています。これらの設定は、次の例に示すように適用できます。

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://https://golang.org/pkg/net/http/#Transport.ExpectContinueTimeout://https

time.Duration ExpectContinueとして設定します。

Transport.IdleConnTimeout

この設定は、HTTP リクエスト間でアイドル状態のネットワーク接続を維持する最大時間を表します。

無制限の場合は 0 に設定します。

「https://https://golang.org/pkg/net/http/#Transport.IdleConnTimeout://https

time.Duration IdleConnTimeoutとして設定します。

Transport.MaxIdleConns

この設定は、すべてのホストにおけるアイドル (キープアライブ) 接続の最大数を表します。この値を増やす 1 つのユースケースは、同じクライアントから短期間に多数の接続が表示される場合です。

0 は制限がないことを意味します。

「https://https://golang.org/pkg/net/http/#Transport.MaxIdleConns:��

int として設定MaxIdleConnsします。

Transport.MaxIdleConnsPerHost

この設定は、ホストごとに保持するアイドル (キープアライブ) 接続の最大数を表します。この値を増やす 1 つのユースケースは、同じクライアントから短期間に多数の接続が表示される場合です。

デフォルトは、ホストごとに 2 つのアイドル接続です。

DefaultMaxIdleConnsPerHost (2) を使用するには、 を 0 に設定します。

「https://https://golang.org/pkg/net/http/#Transport.MaxIdleConnsPerHost://https

int MaxIdleConnsPerHostとして設定します。

Transport.ResponseHeaderTimeout

この設定は、クライアントがレスポンスヘッダーを読み取るまでの最大待機時間を表します。

クライアントがこの期間内にレスポンスのヘッダーを読み取れない場合、リクエストはタイムアウトエラーで失敗します。

長時間実行される Lambda 関数を使用する場合は、この値を慎重に設定してください。Lambda 関数が終了またはタイムアウトするまで、オペレーションはレスポンスヘッダーを返しません。ただし、このオプションは ** InvokeAsync** API オペレーションでも使用できます。

デフォルトはタイムアウトではなく、永遠に待機します。

「https://https://golang.org/pkg/net/http/#Transport.ResponseHeaderTimeout://https

time.Duration ResponseHeaderTimeoutとして設定します。

Transport.TLSHandshakeTimeout

この設定は、TLS ハンドシェイクが完了するまでの最大待機時間を表します。

デフォルトは 10 秒です。

ゼロはタイムアウトがないことを意味します。

「https://https://golang.org/pkg/net/http/#Transport.TLSHandshakeTimeout://https

time.Duration TLSHandshakeTimeoutとして設定します。