翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
HTTP クライアントをカスタマイズする
は、デフォルトの HTTP クライアントとデフォルトの設定値 AWS SDK for Go を使用します。これらの設定値の一部は変更できますが、スループットが高くレイテンシーの低い環境で を使用している AWS SDK for Go お客様には、デフォルトの HTTP クライアントとトランスポートが十分に設定されていません。詳細については、「」を参照してください。よくある質問設定の推奨事項は特定のワークロードによって異なります。このセクションでは、カスタム HTTP クライアントを設定し、そのクライアントを使用して AWS SDK for Go 呼び出しを作成する方法について説明します。
このセクションでは、カスタム HTTP クライアントの作成を支援するために、NewBuildableClient
カスタマイズする内容を定義しましょう。
設定のロード中の上書き
カスタム HTTP クライアントは、WithHTTPClientLoadDefaultConfig
。たとえば、 をクライアント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
は、変更された 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://https://golang.org/pkg/net/#Dialer.KeepAlive
time.Duration KeepAlive
として設定します。
Dialer.Timeout
この設定は、ダイヤルが接続の作成を待機する最大時間を表します。
デフォルトは 30 秒です。
「https://https://golang.org/pkg/net/#Dialer.Timeout
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
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
time.Duration ExpectContinue
として設定します。
Transport.IdleConnTimeout
この設定は、HTTP リクエスト間でアイドル状態のネットワーク接続を維持する最大時間を表します。
無制限の場合は 0 に設定します。
「https://https://golang.org/pkg/net/http/#Transport.IdleConnTimeout
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
を int MaxIdleConnsPerHost
として設定します。
Transport.ResponseHeaderTimeout
この設定は、クライアントがレスポンスヘッダーを読み取るまでの最大待機時間を表します。
クライアントがこの期間内にレスポンスのヘッダーを読み取れない場合、リクエストはタイムアウトエラーで失敗します。
長時間実行される Lambda 関数を使用する場合は、この値を慎重に設定してください。Lambda 関数が終了またはタイムアウトするまで、オペレーションはレスポンスヘッダーを返しません。ただし、このオプションは ** InvokeAsync** API オペレーションでも使用できます。
デフォルトはタイムアウトではなく、永遠に待機します。
「https://https://golang.org/pkg/net/http/#Transport.ResponseHeaderTimeout
time.Duration ResponseHeaderTimeout
として設定します。
Transport.TLSHandshakeTimeout
この設定は、TLS ハンドシェイクが完了するまでの最大待機時間を表します。
デフォルトは 10 秒です。
ゼロはタイムアウトがないことを意味します。
「https://https://golang.org/pkg/net/http/#Transport.TLSHandshakeTimeout
time.Duration TLSHandshakeTimeout
として設定します。