Configurar clientes de serviço no código para o AWS SDK for Java 2.x - AWS SDK for Java 2.x

Configurar clientes de serviço no código para o AWS SDK for Java 2.x

Como alternativa, ou além de configurar clientes de serviço externamente, também é possível configurá-los programaticamente no código.

Ao configurar clientes de serviço no código, você obtém um controle refinado das várias opções disponíveis. A maioria das configurações que você pode definir externamente também está disponível para definir no código.

Configuração básica no código

Por exemplo, o seguinte trecho define a Região da AWS como EU_SOUTH_2 para um cliente de serviço do Amazon S3 no código:

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

O trecho anterior mostra o método estático de fábrica, builder(). O método builder() retorna um objeto builder que permite personalizar o cliente de serviço. Os métodos setter retornam o objeto builder (nesse caso, uma instância do S3ClientBuilder), de maneira que você possa vincular as chamadas ao método para maior conveniência e para tornar o código mais legível. Após configurar as propriedades desejadas, você poderá chamar o método build() para criar o cliente.

Configuração avançada no código

O trecho a seguir mostra opções de configuração adicionais:

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();

No trecho anterior, é possível ver vários pontos de entrada para configurar um cliente de serviço:

  • Um objeto ClientOverrideConfiguration.Builder que fornece opções de configuração comuns a todos os clientes de serviço. Essas configurações são comportamentos específicos da AWS, independentes de qualquer implementação HTTP.

  • Configuração do cliente HTTP por meio de uma implementação separada do compilador de clientes HTTP. ApacheHttpClient.Builder é um exemplo. O cliente de serviço fornece o método httpClientBuilder() para associar o cliente HTTP configurado ao cliente de serviço.

  • Métodos no próprio compilador de clientes, como region() e credentialsProvider()

Em vez de criar objetos separados e depois passá-los aos métodos do cliente de serviço, o AWS SDK for Java 2.x fornece métodos que aceitam expressões lambda para criar esses objetos em linha. Os métodos de configuração no compilador têm o mesmo nome, mas têm assinaturas diferentes. Por exemplo:

A configuração do cliente do S3 mostrada anteriormente usando essa abordagem pode ser feita em um bloco 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();

Opções de configuração indisponíveis no código

Como a configuração a seguir afeta os processos fundamentais de inicialização no SDK, é possível definir as seguintes configurações somente externamente e não no código:

Configurações de localização de arquivo

Essas configurações controlam a localização dos arquivos de configuração e credenciais compartilhados e não podem ser substituídas programaticamente após o carregamento do SDK:

  • AWS_CONFIG_FILE (variável de ambiente) / aws.configFile(propriedade do sistema de JVM)

  • AWS_SHARED_CREDENTIALS_FILE (variável de ambiente) / aws.sharedCredentialsFile (propriedade do sistema de JVM)

Essas configurações devem ser definidas antes que o SDK carregue os arquivos de configuração, pois elas determinam onde o SDK deve procurar a configuração. Depois que o SDK é inicializado, a alteração desses valores não tem efeito.

Desativação do serviço de metadados da instância

  • AWS_EC2_METADATA_DISABLED (variável de ambiente) / aws.disableEc2Metadata (propriedade do sistema de JVM)

Essa configuração controla se o SDK deve tentar usar o Serviço de Metadados de Instância do EC2. Após a inicialização do SDK, não é possível alterar essa configuração programaticamente.

Exclusão de perfil

  • AWS_PROFILE (variável de ambiente) / aws.profile (propriedade do sistema de JVM)

Essa configuração informa ao SDK qual perfil carregar dos arquivos de configuração e credenciais compartilhados. Depois de carregado, a alteração desse valor não tem efeito.

Caminhos da credencial do contêiner

  • AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

  • AWS_CONTAINER_CREDENTIALS_FULL_URI

  • AWS_CONTAINER_AUTHORIZATION_TOKEN

  • AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE

Você usa essas variáveis de ambiente para informar ao SDK como buscar credenciais dos serviços de contêiner. Depois que a cadeia de provedores de credenciais for estabelecida durante a inicialização do cliente de serviço, não será possível alterar essas configurações.

Seleção de implementação HTTP padrão

  • SYNC_HTTP_SERVICE_IMPL (variável de ambiente) / software.amazon.awssdk.http.service.impl (propriedade do sistema de JVM)

  • ASYNC_HTTP_SERVICE_IMPL (variável de ambiente) / software.amazon.awssdk.http.async.service.impl (propriedade do sistema de JVM)

Essas configurações globais determinam qual implementação de cliente HTTP o SDK deve usar para todos os clientes de serviço, a menos que seja substituída no código para clientes de serviço individuais. Isso deve ser definido antes que o SDK inicialize os clientes HTTP e não é possível fazer alterações posteriormente.