

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à.

# Sostituisci la configurazione del client di servizio
<a name="override-client-config"></a>

Dopo la [creazione di un client](creating-clients.md) di servizio, il client di servizio utilizza una configurazione fissa per tutte le operazioni. Tuttavia, a volte potrebbe essere necessario sovrascrivere la configurazione per una o più operazioni specifiche.

Ogni client di servizio dispone di un'`withConfig`estensione che consente di modificare una copia della configurazione esistente. L'`withConfig`estensione restituisce un nuovo client di servizio con una configurazione modificata. Il client originale esiste in modo indipendente e utilizza la sua configurazione originale.

L'esempio seguente mostra la creazione di un'`S3Client`istanza che chiama due operazioni.

```
val s3 = S3Client.fromEnvironment {
    logMode = LogMode.LogRequest
    region = "us-west-2"
    // ...other configuration settings...
}

s3.listBuckets { ... }
s3.listObjectsV2 { ... }
```

Il frammento seguente mostra come sovrascrivere la configurazione per una singola operazione. `listObjectV2`

```
s3.withConfig {
    region = "eu-central-1"
}.use { overriddenS3 ->
    overriddenS3.listObjectsV2 { ... }
}
```

Le chiamate operative sul `s3` client utilizzano la configurazione originale specificata al momento della creazione del client. La sua configurazione include [la registrazione delle richieste](logging.md#sdk-log-mode) e `us-west-2 region` per la regione. 

L'`listObjectsV2`invocazione sul `overriddenS3` client utilizza le stesse impostazioni del `s3` client originale ad eccezione della regione, che ora è. `eu-central-1`

## Ciclo di vita di un client sovrascritto
<a name="override-client-lifecycle"></a>

Nell'esempio precedente, il `s3` client e il `overriddenS3` client sono indipendenti l'uno dall'altro. Le operazioni possono essere richiamate su entrambi i client finché rimangono aperte. Ciascuna utilizza una configurazione separata, ma possono condividere le risorse sottostanti (come un motore HTTP) a meno che anche queste non vengano sovrascritte. 

Si chiude separatamente un client con una configurazione sovrascritta e il client originale. È possibile chiudere un client con una configurazione sostituita prima o dopo aver chiuso il client originale. A meno che non sia necessario utilizzare un client con una configurazione sovrascritta per un lungo periodo, si consiglia di limitarne il ciclo di vita con il metodo. `use` Il `use` metodo assicura che il client sia chiuso in caso di eccezioni. 

## Risorse condivise tra i clienti
<a name="override-client-shared-res"></a>

Quando si crea un client di servizio utilizzando`withConfig`, è possibile che questo condivida risorse con il client originale. Al contrario, quando si crea un client utilizzando [fromEnvironment](creating-clients.md#loading-from-the-environment) o lo si [configura esplicitamente](creating-clients.md#programmatic-config), il client utilizza risorse indipendenti. Risorse come i motori HTTP e i provider di credenziali vengono condivise a meno che non vengano sovrascritte nel blocco. `withConfig` 

Poiché il ciclo di vita di ogni client è indipendente, le risorse condivise rimangono aperte e utilizzabili fino alla chiusura dell'ultimo client. Pertanto, è importante chiudere i client di servizio sostituiti quando non sono più necessari. In questo modo si evita che le risorse condivise rimangano aperte e consumino risorse di sistema come memoria, connessione e cicli della CPU.

L'esempio seguente mostra sia le risorse condivise che quelle indipendenti.

`overriddenS3`I client `s3` e condividono la stessa istanza del provider di credenziali, inclusa la configurazione di memorizzazione nella cache. Le chiamate effettuate `overriddenS3` riutilizzano le credenziali se il valore memorizzato nella cache è ancora attuale rispetto alle chiamate effettuate dal client. `s3`

 Il motore HTTP non è condiviso tra i due client. Ogni client dispone di un motore HTTP indipendente perché è stato sovrascritto nella `withConfig` chiamata.

```
val s3 = S3Client.fromEnvironment {
    region = "us-west-2"
    credentialsProvider = CachedCredentialsProvider(CredentialsProviderChain(...))
    httpClientEngine = OkHttpEngine { ... }
}

s3.listBuckets { ... }

s3.withConfig {
    httpClientEngine = CrtHttpEngine { ... }
}.use { overriddenS3 ->
    overriddenS3.listObjectsV2 { ... }
}
```