Comece a trabalhar com Java no Amazon S3

Comece a trabalhar com Java no Amazon S3
leonardo.wolter
leonardo.wolter

Compartilhe

É relativamente simples colocar sua aplicação no cloud da Amazon. Um dos serviços oferecidos e bastante utilizados é o  Amazon Simple Storage Service (S3), para armazenamento de dados em cloud.

A vantagem do serviço S3 é justamente não precisarmos ter tanta preocupação com a gestão do hardware e infraestrutura, podendo também diminuir custos. O S3 oferece um espaço virtualmente ilimitado (seus arquivos podem ter de 1byte a 5terabytes cada), sendo estes arquivos gravados redundantemente em diversos dispositivos e reparados caso sejam corrompidos. Um bucket pode ser armazenado em diferentes regiões (como em São Paulo, por exemplo), possibilitando uma menor latência. É frequentemente utilizado para armazenar imagens de sites onde há muito conteúdo gerado pelos usuários.

Banner promocional da Alura, com um design futurista em tons de azul, apresentando dois blocos de texto, no qual o bloco esquerdo tem os dizeres:

O S3 pode ser manipulado pelo console manualmente. Mas o interessante é codificar para realizar as operações de storage. Para isso, há APIs nas mais diversas linguagens AWS SDK(disponível em Java, Mobile(iOS eAndroid) , PHPPythonRuby e Windows & .NET.).

Além da API, a Amazon disponibiliza um plugin para Eclipse(com o AWS SDK incluso),  que será necessário para acompanhar este post.

Considerando que você já tenha uma conta na Amazon com o S3. Dentro dele, temos uma divisão (bucket) chamada caelum-imagens:

Tendo em mãos o plugin da amazon, vamos iniciar um novo projeto no Eclipse. Ao criar o novo projeto, selecione AWS Java Project:

Digite o nome do seu Projeto, clique em Configure AWS accounts e digite a sua Access Key ID e a sua Secret Access Key (que podem ser encontradas no menu Security Credentials, na sua conta da Amazon):

No final desse processo, será criado automaticamente um arquivo de nome AwsCredentials.properties, contendo os dados da nossa conta que digitamos anteriormente.

Para se conectar ao sistema, a API é simples: primeiro vamos ler o conteúdo do AwsCredentials.properties, jogando essa informação dentro de uma classe específica do AWS, chamada PropertiesCredentials. Com essas informações, instanciamos uma classe que é capaz de se comunicar com o S3, a AmazonS3Client. Observe o código que realiza essas operações:

Crie uma classe ConectorDoS3 para teste, e coloque o seguinte código dentro do seu main:

 InputStream credentials = ConectorDoS3.class.getResourceAsStream("AwsCredentials.properties"); PropertiesCredentials awsCredentials = new PropertiesCredentials(credentials); AmazonS3 s3 = new AmazonS3Client(awsCredentials); 

Pronto! Com a referência s3 em mãos podemos efetuar diversas operações através da API como, por exemplo, enviar uma imagem para o nosso bucket caelum-imagens através do metodo putObject():

 s3.putObject(new PutObjectRequest("caelum-imagens", "logo.jpg", new File("diretorio-local/imagem.jpg"))); 

De forma análoga podemos ler os dados gravados. Podemos usar o GetObjetRequest através do método getObject:

 S3Object object = s3.getObject(new GetObjectRequest("caelum-imagens", "logo.jpg")); InputStream stream = object.getObjectContent(); 

Repare que o [GetObjectRequest](http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/GetObjectRequest.html), assim como o Put, pode ser configurado de diferentes formas para buscar apenas um pedaço do arquivo, etc. Em vez de buscar o arquivo com essa imagem, você pode também gerar uma URL, para que essa possa ser utilizada, por exemplo, numa tag img de um HTML. Isso é feito através do método generatePresignedUrl.

Esses são apenas os primeiros passos com o S3. Há muitos outros detalhes e melhores práticas que você deve ficar atento para obter o melhor do serviço, considerando falhas e diminuindo latência e número de requests. Conheça mais da Amazon AWS no nosso curso online, em especial o EC2.

Veja outros artigos sobre Programação