Configuración de clientes de servicio en código para AWS SDK for Java 2.x - AWS SDK for Java 2.x

Configuración de clientes de servicio en código para AWS SDK for Java 2.x

Como alternativa a la configuración de los clientes de servicio externamente, 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

Por ejemplo, el siguiente fragmento establece la Región de AWS en EU_SOUTH_2 para un cliente de servicio de Amazon S3 en 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 S3ClientBuilder, 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

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:

  • Un objeto ClientOverrideConfiguration.Builder que proporciona opciones de configuración comunes a todos los clientes de servicio. Estas configuraciones son comportamientos específicos de AWS 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, como region() y credentialsProvider()

En lugar de crear objetos separados y luego pasarlos a métodos del cliente de servicio, AWS SDK for Java 2.x proporciona métodos que aceptan expresiones lambda para crear estos objetos insertados. Los métodos de configuración del compilador tienen el mismo nombre, pero tienen firmas diferentes. Por ejemplo:

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

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

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_CONFIG_FILE (variable de entorno) / aws.configFile(propiedad del sistema JVM)

  • AWS_SHARED_CREDENTIALS_FILE (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

  • AWS_EC2_METADATA_DISABLED (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

  • AWS_PROFILE (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

  • AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

  • AWS_CONTAINER_CREDENTIALS_FULL_URI

  • AWS_CONTAINER_AUTHORIZATION_TOKEN

  • AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE

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

  • SYNC_HTTP_SERVICE_IMPL (variable de entorno) / software.amazon.awssdk.http.service.impl (propiedad del sistema JVM)

  • ASYNC_HTTP_SERVICE_IMPL (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.