Personalizzazione del client HTTP - AWS SDK per Go v2

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Personalizzazione del client HTTP

AWS SDK per Go Utilizza un client HTTP predefinito con valori di configurazione predefiniti. Sebbene sia possibile modificare alcuni di questi valori di configurazione, il client e il trasporto HTTP predefiniti non sono sufficientemente configurati per i clienti che li utilizzano AWS SDK per Go in un ambiente con requisiti di velocità effettiva elevata e bassa latenza. Per ulteriori informazioni, consulta la sezione in Domande frequenti quanto i consigli di configurazione variano in base a carichi di lavoro specifici. Questa sezione descrive come configurare un client HTTP personalizzato e utilizzarlo per creare AWS SDK per Go chiamate.

Per facilitare la creazione di un client HTTP personalizzato, questa sezione descrive come NewBuildableClientconfigurare impostazioni personalizzate e utilizzare tale client con un client di AWS SDK per Go servizio.

Definiamo cosa vogliamo personalizzare.

Sovrascrivere durante il caricamento della configurazione

È possibile fornire client HTTP personalizzati durante la chiamata LoadDefaultConfigavvolgendo il client utilizzando With HTTPClient e passando il valore risultante a. LoadDefaultConfig Ad esempio, per passare customClient come nostro cliente:

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

Timeout

BuildableHTTPClientPuò essere configurato con un limite di timeout della richiesta. Questo timeout include il tempo necessario per la connessione, l'elaborazione di eventuali reindirizzamenti e la lettura del corpo completo della risposta. Ad esempio, per modificare il timeout del client:

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

Dialer

BuildableHTTPClientFornisce una meccanica di costruzione per la creazione di client con opzioni Dialer modificate. L'esempio seguente mostra come configurare le impostazioni di un client. 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 })

Impostazioni

Dialer. KeepAlive

Questa impostazione rappresenta il periodo di mantenimento per una connessione di rete attiva.

Imposta su un valore negativo per disabilitare i keep-alive.

Imposta su 0 per abilitare i keep-alive se supportati dal protocollo e dal sistema operativo.

I protocolli di rete o i sistemi operativi che non supportano i keep-alive ignorano questo campo. Per impostazione predefinita, TCP abilita keep alive.

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

Imposta KeepAlive come Time.Duration.

Dialer.Timeout

Questa impostazione rappresenta il tempo massimo di attesa di una chiamata per la creazione di una connessione.

L'impostazione predefinita è 30 secondi.

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

Imposta Timeout come time.Duration.

Trasporto

BuildableHTTPClientFornisce una meccanica di costruzione per la costruzione di client con opzioni di trasporto modificate.

Configurazione di un proxy

Se non riesci a connetterti direttamente a Internet, puoi utilizzare le variabili di ambiente supportate da Go (HTTP_PROXY/HTTPS_PROXY) o creare un client HTTP personalizzato per configurare il proxy. L'esempio seguente configura il client da utilizzare PROXY_URL come endpoint 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) })

Altre impostazioni

Di seguito sono riportate alcune altre Transport impostazioni che possono essere modificate per ottimizzare il client HTTP. Tutte le impostazioni aggiuntive non descritte qui sono disponibili nella documentazione del tipo di trasporto. Queste impostazioni possono essere applicate come illustrato nell'esempio seguente:

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

Trasporto. ExpectContinueTimeout

Se la richiesta ha un'intestazione «Expect: 100-continue», questa impostazione rappresenta il tempo massimo di attesa per le intestazioni della prima risposta di un server dopo aver scritto completamente le intestazioni della richiesta. Questo tempo non include il tempo necessario per inviare l'intestazione della richiesta. Il client HTTP invia il suo payload dopo che questo timeout è scaduto.

Impostazione predefinita: 1 secondo.

Imposta su 0 per non richiedere alcun timeout e invia il payload della richiesta senza attese. Un caso d'uso è quando si verificano problemi con proxy o servizi di terze parti che richiedono una sessione simile all'uso di Amazon S3 nella funzione mostrata più avanti.

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

Imposta ExpectContinue come Time.Duration.

Trasporto. IdleConnTimeout

Questa impostazione rappresenta la quantità massima di tempo per mantenere attiva una connessione di rete inattiva tra le richieste HTTP.

Imposta su 0 per non avere limiti.

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

Imposta IdleConnTimeout come Time.Duration.

Trasporto. MaxIdleConns

Questa impostazione rappresenta il numero massimo di connessioni inattive (keep-alive) su tutti gli host. Un caso d'uso per aumentare questo valore è quando si vedono molte connessioni in un breve periodo dagli stessi client

0 significa nessun limite.

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

Imposta MaxIdleConns come int.

Trasporto. MaxIdleConnsPerHost

Questa impostazione rappresenta il numero massimo di connessioni inattive (keep-alive) da mantenere per host. Un caso d'uso per aumentare questo valore è quando si vedono molte connessioni in un breve periodo dagli stessi client

L'impostazione predefinita è di due connessioni inattive per host.

Imposta su 0 per utilizzare DefaultMaxIdleConnsPerHost (2).

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

Imposta MaxIdleConnsPerHost come int.

Trasporto. ResponseHeaderTimeout

Questa impostazione rappresenta il tempo massimo di attesa che un client legga l'intestazione della risposta.

Se il client non è in grado di leggere l'intestazione della risposta entro questo periodo, la richiesta ha esito negativo e viene generato un errore di timeout.

Fai attenzione a impostare questo valore quando usi funzioni Lambda a esecuzione prolungata, poiché l'operazione non restituisce alcuna intestazione di risposta fino al termine o al timeout della funzione Lambda. Tuttavia, è ancora possibile utilizzare questa opzione con l'operazione API** **. InvokeAsync

L'impostazione predefinita è nessun timeout; attendi per sempre.

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

Imposta ResponseHeaderTimeout come Time.Duration.

Trasporto. TLSHandshakeTimeout

Questa impostazione rappresenta il tempo massimo di attesa per il completamento di un handshake TLS.

Il valore predefinito è 10 secondi.

Zero significa nessun timeout.

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

Imposta TLSHandshakeTimeout come Time.Duration.