Personalización del cliente HTTP - AWS SDK for Go v2

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Personalización del cliente HTTP

AWS SDK for Go utiliza un cliente HTTP predeterminado con valores de configuración predeterminados. Si bien puede cambiar algunos de estos valores de configuración, el cliente y el transporte HTTP predeterminados no están suficientemente configurados para aquellos clientes que usan AWS SDK for Go en un entorno con requisitos de alto rendimiento y baja latencia. Para obtener más información, consulte la sección Preguntas frecuentes, ya que las recomendaciones de configuración varían en función de las cargas de trabajo específicas. En esta sección se describe cómo configurar un cliente HTTP personalizado y cómo usarlo para crear llamadas a AWS SDK for Go.

Para ayudarle a crear un cliente HTTP personalizado, en esta sección se describe cómo usar NewBuildableClient a fin de configurar ajustes personalizados y cómo utilizar ese cliente con un cliente de servicio de AWS SDK for Go.

Vamos a definir qué queremos personalizar.

Reemplazo durante la carga de la configuración

Se pueden proporcionar clientes HTTP personalizados al llamar a LoadDefaultConfig mediante la encapsulación del cliente con WithHTTPClient y la transferencia del valor resultante a LoadDefaultConfig. Por ejemplo, para pasar customClient como nuestro cliente:

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

Tiempo de espera

El objeto BuildableHTTPClient se puede configurar con un límite de tiempo de espera para las solicitudes. En este tiempo de espera se incluye el tiempo necesario para conectarse, procesar cualquier redireccionamiento y leer el cuerpo de respuesta completo. Por ejemplo, para modificar el tiempo de espera del cliente:

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

Dialer

El objeto BuildableHTTPClient proporciona una mecánica de creación para crear clientes con opciones Dialer modificadas. En el ejemplo siguiente se muestra cómo establecer la configuración Dialer de un 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 })

Configuración

Dialer.KeepAlive

Esta configuración representa el período de conservación de una conexión de red activa.

Establézcala en un valor negativo para deshabilitar estos períodos.

Establézcala en 0 para habilitar los períodos de conservación si el protocolo y el sistema operativo los admiten.

Los protocolos de red o sistemas operativos que no admiten los períodos de conservación omiten este campo. De forma predeterminada, TCP habilita el período de conservación.

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

Establezca KeepAlive como time.Duration.

Dialer.Timeout

Esta configuración representa el tiempo máximo de espera de marcado para la creación de una conexión.

El valor predeterminado es de 30 segundos.

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

Establezca Timeout como time.Duration.

Transporte

El objeto BuildableHTTPClient proporciona una mecánica de creación destinada a crear clientes con opciones Transport modificadas.

Configuración de un proxy

Si no puede conectarse directamente a Internet, puede utilizar variables de entorno compatibles con Go (HTTP_PROXY/HTTPS_PROXY) o crear un cliente HTTP personalizado para configurar el proxy. En el ejemplo siguiente se configura el cliente para usar PROXY_URL como punto de conexión del 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) })

Otras configuraciones

A continuación, se muestran otras configuraciones de Transport que se pueden modificar para ajustar el cliente HTTP. En la documentación del tipo Transport encontrará configuraciones adicionales que no se describen aquí. Estas configuraciones se pueden aplicar como se muestra en el ejemplo siguiente:

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

Si la solicitud tiene el encabezado “Expect: 100-continue”, esta configuración representa el tiempo máximo de espera para los primeros encabezados de respuesta de un servidor después de escribir por completo los encabezados de solicitud. En este tiempo no se incluye el tiempo necesario para enviar el encabezado de solicitud. El cliente HTTP envía su carga útil después de agotarse este tiempo de espera.

El valor predeterminado es de un segundo.

Establézcala en 0 para no definir ningún tiempo de espera y enviar la carga útil de la solicitud sin esperar. Un caso de uso se produce cuando tiene problemas con proxies o servicios de terceros que toman una sesión similar al uso de Amazon S3 en la función que se muestra más adelante.

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

Establezca ExpectContinue como time.Duration.

Transport.IdleConnTimeout

Esta configuración representa el tiempo máximo para mantener activa una conexión de red inactiva entre solicitudes HTTP.

Establézcala en 0 para que no haya límite.

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

Establezca IdleConnTimeout como time.Duration.

Transport.MaxIdleConns

Esta configuración representa el número máximo de conexiones inactivas (con mantenimiento activo) en todos los hosts. Un caso de uso para aumentar este valor es cuando se dan muchas conexiones de los mismos clientes en un período breve.

0 significa que no hay límite.

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

Establezca MaxIdleConns como int.

Transport.MaxIdleConnsPerHost

Esta configuración representa el número máximo de conexiones inactivas (con mantenimiento activo) que se conservan por host. Un caso de uso para aumentar este valor es cuando se dan muchas conexiones de los mismos clientes en un período breve.

El valor predeterminado es de dos conexiones inactivas por host.

Establézcala en 0 para usar DefaultMaxIdleConnsPerHost (2).

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

Establezca MaxIdleConnsPerHost como int.

Transport.ResponseHeaderTimeout

Esta configuración representa el tiempo máximo de espera para que un cliente lea el encabezado de respuesta.

Si el cliente no puede leer el encabezado de la respuesta dentro de este período, se producirá un error de tiempo de espera de la solicitud.

Tenga cuidado al establecer este valor cuando utilice funciones de Lambda de ejecución prolongada, ya que la operación no devolverá ningún encabezado de respuesta hasta que la función de Lambda haya finalizado o se haya agotado su tiempo de espera. Sin embargo, puede seguir usando esta opción con la operación de la API ** InvokeAsync**.

El valor predeterminado es no establecer un tiempo de espera, es decir, una espera indefinida.

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

Establezca ResponseHeaderTimeout como time.Duration.

Transport.TLSHandshakeTimeout

Esta configuración representa el tiempo máximo de espera para que se complete un establecimiento de comunicación TLS.

El valor predeterminado es de diez segundos.

Cero significa que no hay tiempo de espera.

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

Establezca TLSHandshakeTimeout como time.Duration.