

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.

# Configuración de clientes de servicio en código para AWS SDK for Java 2.x
<a name="configuring-service-clients-code"></a>

Como alternativa a la [configuración de los clientes de servicio externamente](configuring-service-clients-ext.md), o como complemento a esta, puede configurarlos mediante programación en el código.

Al configurar los clientes de servicio en el código, se obtiene un control preciso de las numerosas opciones disponibles. La mayor parte de la configuración que puede establecer externamente también está disponible para establecerla en el código.

## Configuración básica en código
<a name="conf-service-client-code-basic"></a>

Por ejemplo, el siguiente fragmento establece el t Región de AWS `EU_SOUTH_2` para un cliente de servicio Amazon S3 en el código:

```
S3Client s3Client = S3Client.builder()
        .region(Region.EU_SOUTH_2)
        .build();
```

El fragmento anterior muestra el método de fábrica estático, `builder()`. El método `builder()` devuelve un objeto `builder` que permite personalizar el cliente de servicio. Los métodos fluent setter devuelven el objeto `builder`, en este caso, una instancia de [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3ClientBuilder.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3ClientBuilder.html), para que pueda encadenar fácilmente las llamadas a los métodos y para simplificar la lectura del código. Después de configurar las propiedades que desee, puede llamar al método `build()` para crear el cliente.

## Configuración avanzada en código
<a name="conf-service-client-code-several"></a>

En el siguiente fragmento de código se ven opciones de configuración adicionales:

```
ClientOverrideConfiguration clientOverrideConfiguration =
        ClientOverrideConfiguration.builder()
                .apiCallAttemptTimeout(Duration.ofSeconds(1))
                .addMetricPublisher(CloudWatchMetricPublisher.create())
                .build();

S3Client s3Client = S3Client.builder()
        .region(Region.EU_SOUTH_2)
        .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
        .overrideConfiguration(clientOverrideConfiguration)
        .httpClientBuilder(
                ApacheHttpClient.builder()
                        .maxConnections(100)
                        .connectionTimeout(Duration.ofSeconds(5))
                        .proxyConfiguration(ProxyConfiguration.builder()
                                .endpoint(URI.create("http://proxy:8080"))
                                .build())
        ).build();
```

En el fragmento anterior, puede ver varios puntos de entrada para configurar un cliente de servicio:
+ [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/config/ClientOverrideConfiguration.Builder.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/config/ClientOverrideConfiguration.Builder.html) que proporciona opciones de configuración comunes a todos los clientes de servicio. Estos ajustes son comportamientos AWS específicos e independientes de cualquier implementación HTTP.
+ **Configuración del cliente HTTP mediante una implementación independiente del compilador de clientes HTTP.** El `ApacheHttpClient.Builder` es un ejemplo. El cliente de servicio proporciona el método `httpClientBuilder()` para asociar el cliente HTTP configurado al cliente de servicio.
+ **Métodos del propio [compilador de clientes](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3ClientBuilder.html),** como `region()` y `credentialsProvider()`

### La misma configuración mediante bloques de configuración
<a name="service-client-config-lambda"></a>

En lugar de crear objetos separados y luego pasarlos a los métodos del cliente de servicio, AWS SDK for Java 2.x proporciona métodos que aceptan expresiones lambda para crear estos objetos en línea. Los métodos de configuración del compilador tienen el mismo nombre, pero tienen firmas diferentes. Por ejemplo:
+ [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/builder/SdkClientBuilder.html#overrideConfiguration(software.amazon.awssdk.core.client.config.ClientOverrideConfiguration)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/builder/SdkClientBuilder.html#overrideConfiguration(software.amazon.awssdk.core.client.config.ClientOverrideConfiguration))
+ [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/builder/SdkClientBuilder.html#overrideConfiguration(java.util.function.Consumer)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/builder/SdkClientBuilder.html#overrideConfiguration(java.util.function.Consumer))

La configuración del cliente de S3 que se mostró anteriormente con este método se puede realizar en un bloque de código:

```
S3Client s3Client = S3Client.builder()
        .region(Region.EU_SOUTH_2)
        .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
        .overrideConfiguration(b -> b
                .apiCallAttemptTimeout(Duration.ofSeconds(1))
                .addMetricPublisher(CloudWatchMetricPublisher.create()))
        .httpClientBuilder(ApacheHttpClient.builder()
                .maxConnections(100)
                .connectionTimeout(Duration.ofSeconds(5))
                .proxyConfiguration(ProxyConfiguration.builder()
                        .endpoint(URI.create("http://proxy:8080"))
                        .build()))
        .build();
```

## Opciones de configuración no disponibles en código
<a name="conf-servic-client-only-ext"></a>

Dado que la siguiente configuración afecta a procesos de inicialización fundamentales del SDK, puede establecer las siguientes opciones de configuración solo de forma externa y no en código:

### Configuración de ubicación de archivos
<a name="code-only-conf-file-loc"></a>

Esta configuración controla la ubicación de los archivos de configuración y credenciales compartidos y no se puede anular mediante programación una vez que el SDK la haya cargado:
+ **AWS\$1CONFIG\$1FILE** (variable de entorno)/**AWS.configFile** (propiedad del sistema JVM)
+ **AWS\$1SHARED\$1CREDENTIALS\$1FILE** **(variable de entorno)/aws. sharedCredentialsFile** (propiedad del sistema JVM)

Estos ajustes se deben establecer antes de que el SDK cargue los archivos de configuración, ya que determinan dónde busca el SDK la configuración. Una vez inicializado el SDK, el cambio de estos valores no tiene ningún efecto.

### Deshabilitación del servicio de metadatos de instancia
<a name="code-only-conf-imds"></a>
+ **AWS\$1EC2\$1METADATA\$1DISABLED** **(variable de entorno)/AWS.disableEC2Metadata (propiedad del sistema JVM)**

Esta configuración controla si el SDK intenta utilizar el servicio de metadatos de instancias de EC2. Una vez que el SDK se haya inicializado, no podrá cambiar esta opción mediante programación.

### Selección de perfil
<a name="code-only-conf-profile"></a>
+ **AWS\$1PROFILE**(variable de entorno)**/**aws.profile (propiedad del sistema JVM)

Esta configuración indica al SDK qué perfil debe cargar desde los archivos de configuración y credenciales compartidos. Una vez cargado, el cambio de este valor no tiene ningún efecto.

### Rutas de credenciales del contenedor
<a name="code-only-conf-container-cred-path"></a>
+ **AWS\$1CONTAINER\$1CREDENCIALES\$1URI RELATIVO**
+ **AWS\$1CONTAINER\$1CREDENCIALES\$1URI COMPLETO**
+ **AWS\$1CONTAINER\$1TOKEN DE AUTORIZACIÓN**
+ **AWS\$1CONTAINER\$1ARCHIVO DE TOKEN DE AUTORIZACIÓN**

Estas variables de entorno se utilizan para indicar al SDK cómo obtener credenciales de servicios de contenedor. Una vez que se haya establecido la cadena de proveedores de credenciales durante la inicialización del cliente de servicio, no podrá cambiar esta configuración.

### Selección de implementación HTTP predeterminada
<a name="code-only-conf-http-impl"></a>
+ **SYNC\$1HTTP\$1SERVICE\$1IMPL** (variable de entorno) / **software.amazon.awssdk.http.service.impl** (propiedad del sistema JVM)
+ **ASYNC\$1HTTP\$1SERVICE\$1IMPL** (variable de entorno) / **software.amazon.awssdk.http.service.impl** (propiedad del sistema JVM)

Esta configuración global determina qué implementación de cliente HTTP usa el SDK para todos los clientes de servicio, a menos que se anule en código para clientes de servicio individuales. Debe configurarlos antes de que el SDK inicialice sus clientes HTTP y no se pueden cambiar posteriormente.