

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.

# Anule la configuración del cliente del servicio
<a name="override-client-config"></a>

Una vez [creado un cliente de servicio](creating-clients.md), el cliente de servicio utiliza una configuración fija para todas las operaciones. Sin embargo, a veces es posible que necesite anular la configuración para una o más operaciones específicas.

Cada cliente de servicio tiene una `withConfig` extensión para que pueda modificar una copia de la configuración existente. La `withConfig` extensión devuelve un nuevo cliente de servicio con una configuración modificada. El cliente original existe de forma independiente y utiliza su configuración original.

El siguiente ejemplo muestra la creación de una `S3Client` instancia que llama a dos operaciones.

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

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

En el siguiente fragmento se muestra cómo anular la configuración de una sola operación. `listObjectV2`

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

Las llamadas a la operación del `s3` cliente utilizan la configuración original que se especificó cuando se creó el cliente. Su configuración incluye el [registro de solicitudes](logging.md#sdk-log-mode) y `us-west-2 region` para la región. 

La `listObjectsV2` invocación en el `overriddenS3` cliente utiliza la misma configuración que en el `s3` cliente original, excepto en la región, que es ahora`eu-central-1`.

## Ciclo de vida de un cliente anulado
<a name="override-client-lifecycle"></a>

En el ejemplo anterior, el `s3` cliente y el `overriddenS3` cliente son independientes entre sí. Las operaciones se pueden invocar en cualquiera de los clientes mientras permanezcan abiertos. Cada uno usa una configuración diferente, pero puede compartir los recursos subyacentes (como un motor HTTP) a menos que también se anulen. 

Cierra un cliente con una configuración anulada y el cliente original por separado. Puede cerrar un cliente con una configuración anulada antes o después de cerrar su cliente original. A menos que necesite utilizar un cliente con una configuración anulada durante mucho tiempo, le recomendamos que incluya este método en su ciclo de vida. `use` El `use` método garantiza que el cliente esté cerrado en caso de que se produzcan excepciones. 

## Recursos compartidos entre clientes
<a name="override-client-shared-res"></a>

Al crear un cliente de servicio mediante el uso`withConfig`, es posible que comparta recursos con el cliente original. Por el contrario, cuando se crea un cliente mediante [FromEnvironment](creating-clients.md#loading-from-the-environment) o se [configura de forma explícita](creating-clients.md#programmatic-config), el cliente utiliza recursos independientes. Los recursos, como los motores HTTP y los proveedores de credenciales, se comparten a menos que se anulen en el bloque. `withConfig` 

Como el ciclo de vida de cada cliente es independiente, los recursos compartidos permanecen abiertos y utilizables hasta que se cierre el último cliente. Por lo tanto, es importante que cierre los clientes de servicio anulados cuando ya no los necesite. Esto evita que los recursos compartidos permanezcan abiertos y consuman recursos del sistema, como la memoria, la conexión y los ciclos de CPU.

El siguiente ejemplo muestra los recursos compartidos e independientes.

Los `overriddenS3` clientes `s3` y comparten la misma instancia del proveedor de credenciales, incluida su configuración de almacenamiento en caché. Las llamadas realizadas mediante credenciales `overriddenS3` reutilizan si el valor almacenado en caché sigue siendo el mismo que el de las llamadas realizadas por el `s3` cliente.

 El motor HTTP no se comparte entre los dos clientes. Cada cliente tiene un motor HTTP independiente porque se anuló en la `withConfig` llamada.

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

s3.listBuckets { ... }

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