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 S3ClientBuilderbuild() 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.Builderque 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.
é um exemplo. O cliente de serviço fornece o métodoApacheHttpClient.BuilderhttpClientBuilder()para associar o cliente HTTP configurado ao cliente de serviço. -
Métodos no próprio compilador de clientes
, como region()ecredentialsProvider()
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.