7
respostas

S3 Amazon set region. Dont set

Estou tentando setar a região por configuração no Spring quando crio o bucket e não esta setando. Alguma sugestão?

s3Client.setRegion(Region.getRegion(Regions.SA_EAST_1));
7 respostas

oi, Clerman

tudo bem?

nem todas as regions estão disponíveis para o s3. De qual pacote você está pegando esse enum Region? Me parece que você quer usar esse:

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/Region.html

repare que a opção SA_EAST_1 nem aparece, justamente por não ser compatível. Experimenta usar esse com US_East_2, por exemplo?

abracos

Olá Rodrigo, aqui aparare disponível sim, da uma olhada na config:

    AmazonS3 s3Client = new AmazonS3Client(credentials, new ClientConfiguration());
        s3Client.setS3ClientOptions(S3ClientOptions.builder().setPathStyleAccess(true).build());
        s3Client.createBucket("clipboard-images");
        s3Client.setRegion(Region.getRegion(Regions.SA_EAST_1));
        s3Client.setEndpoint("https://s3.amazonaws.com/");

oi, Clerman

mas qual é esse Regions que você está usando? mande a linha do import com o pacote de onde ele vem, por favor.

no link que eu te mandei, da ultima versão da documentação, o import tem um "s3" no pacote, justamente por ser um enum específico com as regiões suportadas pelo recurso do s3.

com/amazonaws/services/s3/model/Region

você consegue importar dessa classe na versão que está usando? E mesmo que não consiga, com a versão atual que você está, mudando de SA_EAST_1 para SA_EAST_2 a configuração funciona? (dá erro, é ignorada, etc)

Olá Rodrigo, estou usando uma dependência gerenciada pelo Maven no pom.xml que é essa daqui:

        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-s3</artifactId>
            <version>1.10.77</version>
        </dependency>

e os imports são esses:

import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.S3ClientOptions;

e não da a opção de uma segunda região.

repare no pacote que comentei. No lugar desses, de região, que você está usando:

import com.amazonaws.regions.Region;

import com.amazonaws.regions.Regions;

use o do pacote do s3:

import com.amazonaws.services.s3.model.Region;

nele tem as regions que ele suporta. SA_EAST_1 não é uma delas.

Tentei importar outra dependência para habilitar o pacote mas o obj s3Client.setRegion da erro em setRegion

s3Client.setRegion(com.amazonaws.services.s3.model.Region.SA_SaoPaulo);

Outra situação é que esse pacote que citou parece que não faz parte do com.amazonaws.services.s3.AmazonS3. quando tento habilitar os erros aumentam e a solução fica mais distante.

Talvez seja um bug dessa versão. Esse método que você está usando está deprecated

new AmazonS3Client(credentials, new ClientConfiguration())

Caso não consiga resolver seu problema você pode tentar usar uma versão mais recente e usar um builder para construir seu S3Client.

   <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk</artifactId>
      <version>1.11.166</version>
      <scope>compile</scope>
    </dependency>
 AmazonS3 s3 = AmazonS3ClientBuilder.standard()
                .withRegion(Regions.SA_EAST_1)
                .withCredentials(credentials)
                .build();