Comece a trabalhar com Java no Amazon S3
É 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) , PHP, Python, Ruby 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.