Configurar a Região da AWS para o AWS SDK for Java 2.x
Os clientes do SDK se conectam a um AWS service (Serviço da AWS) em uma Região da AWS específica que você determina ao criar o cliente. Essa configuração permite que a aplicação interaja com recursos da AWS nessa área geográfica. Quando você cria um cliente de serviço sem definir explicitamente uma região, o SDK usa a região padrão da configuração externa.
Configurar explicitamente uma Região da AWS
Para definir explicitamente uma região, recomendamos usar as constantes definidas na classe Região
Para criar um cliente com uma região enumerada da classe, use o método region do criador do cliente.
Ec2Client ec2 = Ec2Client.builder() .region(Region.US_WEST_2) .build();
Se a região que você deseja usar não for uma das enumerações na classe Region, será possível criar uma região usando o método of estático. Esse recurso permite acessar as novas regiões sem atualizar o SDK.
Region newRegion = Region.of("us-east-42"); Ec2Client ec2 = Ec2Client.builder() .region(newRegion) .build();
nota
Depois de criar um cliente com o criador, ele será imutável, e a Região da AWS não poderá ser alterada. Se precisar trabalhar com várias Regiões da AWS para o mesmo serviço, deverá criar vários clientes, um por região.
Deixar o SDK determinar automaticamente a Região da AWS padrão pelo ambiente
Ao executar o código no Amazon EC2 ou no AWS Lambda, convém configurar os clientes para usar a mesma Região da AWS na qual o código está em execução. Isso desvincula o código do ambiente no qual está em execução e facilita a implantação da aplicação em várias Regiões da AWS tendo em vista menos latência ou redundância.
Para usar a cadeia de provedores de Região da AWS padrão a fim de determinar a região do ambiente, use o método create do compilador de cliente.
Ec2Client ec2 = Ec2Client.create();
Também é possível configurar o cliente de outras formas, mas não definir a região. O SDK seleciona a Região da AWS usando a cadeia de provedores da região padrão:
Ec2Client ec2Client = Ec2Client.builder() .credentialsProvider(ProfileCredentialsProvider.builder() .profileName("my-profile") .build()) .build();
Se você não definir explicitamente uma Região da AWS usando o método region, o SDK consultará a cadeia de provedores de região padrão para determinar a região a ser usada.
Noções básicas sobre a cadeia de provedores de Região da AWS padrão
O SDK segue as seguintes etapas para procurar uma Região da AWS:
-
Qualquer região explícita definida usando o método
regionno compilador propriamente dito tem precedência sobre todo o resto. -
O SDK procura a propriedade do sistema JVM
aws.regione usa seu valor se encontrado. -
A variável de ambiente
AWS_REGIONestá marcada. Se estiver definida, essa região será usada para configurar o cliente.nota
O contêiner do Lambda define essa variável de ambiente.
-
O SDK verifica o perfil ativo nos arquivos de configuração e credenciais compartilhados da AWS. Se a propriedade da
regionestiver presente, ela será usada pelo SDK.O perfil
defaulté o ativo, a menos que seja substituído pela variável de ambienteAWS_PROFILEou pela propriedade do sistema JVMaws.profile. Se o SDK encontrar a propriedaderegionnos dois arquivos do mesmo perfil (incluindo o perfildefault), ele usará o valor no arquivo de credenciais compartilhados. -
O SDK tenta usar o serviço de metadados de instância (IMDS) do Amazon EC2 para determinar a região da instância do Amazon EC2 em execução no momento.
-
Para maior segurança, você deve impedir que o SDK tente usar a versão 1 do IMDS. Você usa a mesma configuração para desativar a versão 1 descrita na seção Adquirir com segurança as credenciais de perfil do IAM.
-
-
Se, a essa altura, o SDK ainda não tiver encontrado uma região, a criação do cliente falhará com uma exceção.
Durante o desenvolvimento de aplicações da AWS, uma abordagem comum é usar o arquivo de configuração compartilhado a fim de definir a região para o desenvolvimento local e contar com a cadeia padrão de provedores da região padrão para determinar a região durante a execução na infraestrutura da AWS. Isso simplifica muito a criação do cliente e mantém a portabilidade do aplicativo.
Verificar se um serviço está disponível em uma região
Para saber se um AWS service (Serviço da AWS) específico está disponível em uma região, use o método estático serviceMetadata em um cliente do serviço:
DynamoDbClient.serviceMetadata().regions().forEach(System.out::println);
O trecho anterior imprime uma longa lista de códigos de Região da AWS que têm o serviço DynamoDB:
af-south-1 ap-east-1 ap-northeast-1 ap-northeast-2 ap-northeast-3 ap-south-1 ap-south-2 ap-southeast-1 ...
É possível usar um código para pesquisar a enumeração da classe da região
Por exemplo, se você quiser trabalhar com o DynamoDB na região com o código ap-northeast-2, crie o cliente do DynamoDB com pelo menos a seguinte configuração:
DynamoDbClient ddb = DynamoDbClient.builder() .region(Region.AP_NORTHEAST_2) .build();
Escolher um endpoint específico
Em determinadas situações, como testar os recursos de pré-visualização de um serviço antes que os recursos se tornem disponíveis ao público em geral, talvez seja necessário especificar um endpoint em uma região. Nessas situações, os clientes de serviço podem ser configurados chamando o método endpointOverride.
Por exemplo, para configurar um cliente do Amazon EC2 para usar a região da Europa (Irlanda) com um endpoint específico, use o código a seguir.
Ec2Client ec2 = Ec2Client.builder() .region(Region.EU_WEST_1) .endpointOverride(URI.create("https://ec2.eu-west-1.amazonaws.com")) .build();
Consulte Regiões e endpoints para obter a lista atual de regiões e os endpoints correspondentes de todos os serviços da AWS.