Personalize o cliente HTTP - AWS SDK para Go v2

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Personalize o cliente HTTP

O AWS SDK para Go usa um cliente HTTP padrão com valores de configuração padrão. Embora você possa alterar alguns desses valores de configuração, o cliente e o transporte HTTP padrão não estão suficientemente configurados para clientes que o usam AWS SDK para Go em um ambiente com requisitos de alta taxa de transferência e baixa latência. Para obter mais informações, consulte as recomendações de configuração, Perguntas frequentes pois as recomendações de configuração variam com base em cargas de trabalho específicas. Esta seção descreve como configurar um cliente HTTP personalizado e usar esse cliente para criar AWS SDK para Go chamadas.

Para ajudá-lo a criar um cliente HTTP personalizado, esta seção descreve como NewBuildableClientdefinir configurações personalizadas e usar esse cliente com um cliente AWS SDK para Go de serviço.

Vamos definir o que queremos personalizar.

Substituindo durante o carregamento da configuração

Clientes HTTP personalizados podem ser fornecidos durante a chamada, LoadDefaultConfigagrupando o cliente usando With HTTPClient e passando o valor resultante paraLoadDefaultConfig. Por exemplo, para se customClient passar por nosso cliente:

cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithHTTPClient(customClient))

Timeout (Tempo limite)

O BuildableHTTPClient pode ser configurado com um limite de tempo limite de solicitação. Esse tempo limite inclui o tempo para se conectar, processar qualquer redirecionamento e ler o corpo completo da resposta. Por exemplo, para modificar o tempo limite do cliente:

import "github.com/aws/aws-sdk-go-v2/aws/transport/http" // ... httpClient := http.NewBuildableClient().WithTimeout(time.Second*5)

Discador

BuildableHTTPClientEle fornece uma mecânica de construção para construir clientes com opções modificadas do Dialer. O exemplo a seguir mostra como definir as Dialer configurações de um cliente.

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 })

Configurações

Discador. KeepAlive

Essa configuração representa o período de manutenção de atividade de uma conexão de rede ativa.

Defina como um valor negativo para desativar os keep-alives.

Defina como 0 para ativar o keep-alives se suportado pelo protocolo e pelo sistema operacional.

Protocolos de rede ou sistemas operacionais que não suportam keep-alives ignoram esse campo. Por padrão, o TCP ativa o keep alive.

Consulte https://golang. org/pkg/net/#Dialer. KeepAlive

Definido KeepAlive como time.Duration.

Dialer. Tempo limite

Essa configuração representa o tempo máximo que um dial espera pela criação de uma conexão.

O padrão é 30 segundos.

Consulte https://golang. org/pkg/net/#Dialer .Tempo limite

Definido Timeout como time.Duration.

Transporte

BuildableHTTPClientFornece uma mecânica de construção para a construção de clientes com opções de transporte modificadas.

Configurando um proxy

Se você não conseguir se conectar diretamente à Internet, poderá usar variáveis de ambiente compatíveis com Go (HTTP_PROXY/HTTPS_PROXY) ou criar um cliente HTTP personalizado para configurar seu proxy. O exemplo a seguir configura o cliente para ser usado PROXY_URL como endpoint do proxy:

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) })

Outras configurações

Abaixo estão algumas outras Transport configurações que podem ser modificadas para ajustar o cliente HTTP. Qualquer configuração adicional não descrita aqui pode ser encontrada na documentação do tipo de transporte. Essas configurações podem ser aplicadas conforme mostrado no exemplo a seguir:

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 })

Transporte. ExpectContinueTimeout

Se a solicitação tiver um cabeçalho “Expect: 100-continue”, essa configuração representa o tempo máximo de espera pelos cabeçalhos da primeira resposta de um servidor após a gravação completa dos cabeçalhos da solicitação. Esse tempo não inclui o tempo para enviar o cabeçalho da solicitação. O cliente HTTP envia sua carga depois que esse tempo limite se esgota.

Padrão: 1 segundo.

Defina como 0 sem tempo limite e envie a carga útil da solicitação sem esperar. Um caso de uso é quando você se depara com problemas com proxies ou serviços de terceiros que realizam uma sessão semelhante ao uso do Amazon S3 na função mostrada posteriormente.

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

Definido ExpectContinue como time.Duration.

Transporte. IdleConnTimeout

Essa configuração representa o tempo máximo para manter uma conexão de rede ociosa ativa entre as solicitações HTTP.

Defina como 0 sem limite.

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

Definido IdleConnTimeout como time.Duration.

Transporte. MaxIdleConns

Essa configuração representa o número máximo de conexões ociosas (keep-alive) em todos os hosts. Um caso de uso para aumentar esse valor é quando você vê muitas conexões dos mesmos clientes em um curto período.

0 significa sem limite.

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

MaxIdleConnsDefina como int.

Transporte. MaxIdleConnsPerHost

Essa configuração representa o número máximo de conexões ociosas (keep-alive) a serem mantidas por host. Um caso de uso para aumentar esse valor é quando você vê muitas conexões dos mesmos clientes em um curto período.

O padrão é duas conexões ociosas por host.

Defina como 0 para usar DefaultMaxIdleConnsPerHost (2).

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

MaxIdleConnsPerHostDefina como int.

Transporte. ResponseHeaderTimeout

Essa configuração representa o tempo máximo de espera até que um cliente leia o cabeçalho da resposta.

Se o cliente não conseguir ler o cabeçalho da resposta dentro desse período, a solicitação falhará com um erro de tempo limite.

Tenha cuidado ao definir esse valor ao usar funções Lambda de longa duração, pois a operação não retorna nenhum cabeçalho de resposta até que a função Lambda tenha terminado ou atingido o tempo limite. No entanto, você ainda pode usar essa opção com a operação da API InvokeAsync ****.

O padrão é sem tempo limite; espere para sempre.

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

Definido ResponseHeaderTimeout como time.Duration.

Transporte. TLSHandshakeTempo limite

Essa configuração representa o tempo máximo de espera pela conclusão de um handshake TLS.

O padrão é 10 segundos.

Zero significa que não há tempo limite.

Consulte https://golang. org/pkg/net/http/#Transport. TLSHandshakeTempo limite

Definido TLSHandshakeTimeout como time.Duration.