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.

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