HTTP 클라이언트 사용자 지정 - AWS SDK for Go v2

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

HTTP 클라이언트 사용자 지정

는 기본 구성 값과 함께 기본 HTTP 클라이언트를 AWS SDK for Go 사용합니다. 이러한 구성 값 중 일부를 변경할 수 있지만 기본 HTTP 클라이언트 및 전송은 처리량이 높고 지연 시간이 짧은 환경에서를 AWS SDK for Go 사용하는 고객을 위해 충분히 구성되지 않습니다. 구성 권장 사항은 특정 워크로드에 따라 다르FAQ므로 자세한 내용은 섹션을 참조하세요. 이 섹션에서는 사용자 지정 HTTP 클라이언트를 구성하고 해당 클라이언트를 사용하여 AWS SDK for Go 호출을 생성하는 방법을 설명합니다.

사용자 지정 HTTP 클라이언트를 생성하는 데 도움이 되도록이 섹션에서는 NewBuildableClient가 사용자 지정 설정을 구성하고 해당 클라이언트를 AWS SDK for Go 서비스 클라이언트와 함께 사용하는 방법을 설명합니다.

사용자 지정하려는 항목을 정의해 보겠습니다.

구성 로드 중 재정의

LoadDefaultConfig를 호출할 때 WithHTTPClient를 사용하여 클라이언트를 래핑하고 결과 값을에 전달하여 사용자 지정 HTTP 클라이언트를 제공할 수 있습니다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 설정을 구성하는 방법을 보여줍니다.

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://

time.DurationKeepAlive으로 설정합니다.

Dialer.Timeout

이 설정은 다이얼이 연결이 생성되기를 기다리는 최대 시간을 나타냅니다.

기본값은 30초입니다.

참조: https://golang.org/pkg/net/#Dialer.Timeout://

time.DurationTimeout으로 설정합니다.

운송

는 수정된 전송 옵션으로 클라이언트를 구성하기 위한 빌더 메커니즘을 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 설정입니다. 여기에 설명되지 않은 추가 설정은 전송 유형 설명서에서 확인할 수 있습니다. 다음 예제와 같이 이러한 설정을 적용할 수 있습니다.

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으로 설정하고 기다리지 않고 요청 페이로드를 전송합니다. 한 가지 사용 사례는 나중에 표시된 함수에서 Amazon S3를 사용하는 것과 유사한 세션을 수행하는 프록시 또는 타사 서비스에 문제가 발생하는 경우입니다.

https://golang.org/pkg/net/http/#Transport.ExpectContinueTimeout://

time.DurationExpectContinue으로 설정합니다.

Transport.IdleConnTimeout

이 설정은 HTTP 요청 간에 유휴 네트워크 연결을 유지하는 최대 시간을 나타냅니다.

제한이 없는 경우 0으로 설정합니다.

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

time.DurationIdleConnTimeout으로 설정합니다.

Transport.MaxIdleConns

이 설정은 모든 호스트에서 유휴(연결 유지) 연결의 최대 수를 나타냅니다. 이 값을 늘리는 사용 사례 중 하나는 동일한 클라이언트에서 단기간에 많은 연결이 표시되는 경우입니다.

0은 제한이 없음을 의미합니다.

참조: https://golang.org/pkg/net/http/#Transport.MaxIdleConns://

int로 설정합니다MaxIdleConns.

Transport.MaxIdleConnsPerHost

이 설정은 호스트당 유지할 유휴(keep-alive) 연결의 최대 수를 나타냅니다. 이 값을 늘리는 사용 사례 중 하나는 동일한 클라이언트에서 단기간에 많은 연결이 표시되는 경우입니다.

기본값은 호스트당 두 개의 유휴 연결입니다.

DefaultMaxIdleConnsPerHost(2)를 사용하려면 0으로 설정합니다.

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

intMaxIdleConnsPerHost로 설정합니다.

Transport.ResponseHeaderTimeout

이 설정은 클라이언트가 응답 헤더를 읽을 때까지 기다리는 최대 시간을 나타냅니다.

클라이언트가이 기간 내에 응답의 헤더를 읽을 수 없는 경우 제한 시간 오류와 함께 요청이 실패합니다.

장기 실행 Lambda 함수를 사용할 때는 Lambda 함수가 완료되거나 시간 초과될 때까지 작업이 응답 헤더를 반환하지 않으므로이 값을 신중하게 설정하세요. 그러나 ** InvokeAsync** API 작업에서이 옵션을 계속 사용할 수 있습니다.

기본값은 제한 시간이 없습니다. 영구적으로 기다립니다.

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

time.DurationResponseHeaderTimeout으로 설정합니다.

Transport.TLSHandshakeTimeout

이 설정은 TLS 핸드셰이크가 완료될 때까지 대기하는 최대 시간을 나타냅니다.

기본값은 10초입니다.

0은 제한 시간이 없음을 의미합니다.

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

time.DurationTLSHandshakeTimeout으로 설정합니다.