Trabalho com S3 e armazenamentos em nuvem em Java: AWS SDK e MinIO

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalho com S3 e armazenamentos em nuvem em Java usando AWS SDK e MinIO



Os armazenamentos de objetos em nuvem compatíveis com o protocolo Amazon S3 (Simple Storage Service) tornaram-se o padrão de facto para armazenar dados não estruturados: imagens, vídeos, logs, backups e artefatos de build. Em Java, a principal ferramenta para interagir com esses armazenamentos é o AWS SDK for Java (módulo S3). No entanto, para desenvolvimento local, testes ou trabalho com soluções self-hosted, o MinIO é frequentemente utilizado — um armazenamento de alto desempenho compatível com S3 com seu próprio cliente Java. Neste artigo, abordaremos ambas as abordagens.



1. Preparação e adição de dependências



Para começar, adicione as dependências ao seu pom.xml (Maven):



<dependency>    <groupId>software.amazon.awssdk</groupId>    <artifactId>s3</artifactId>    <version>2.30.0</version></dependency>

<!-- Para MinIO (alternativa ao AWS SDK) --><dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.5.17</version></dependency>


2. Criação do cliente S3



Vamos considerar duas formas de criar um cliente: para Amazon S3 (AWS) e para MinIO (armazenamento local/personalizado).



2.1. Cliente para Amazon S3 (AWS SDK)



Use o builder estático, especificando a região e o método de autenticação (por exemplo, através de variáveis de ambiente ou perfil IAM).



import software.amazon.awssdk.regions.Region;import software.amazon.awssdk.services.s3.S3Client;

public class AwsS3Example { public static S3Client createAwsS3Client() { return S3Client.builder() .region(Region.EU_CENTRAL_1) // Frankfurt .build(); // Usa a cadeia de provedores padrão }}


2.2. Cliente para MinIO



O MinIO exige a especificação explícita do endpoint, access key e secret key.



import io.minio.MinioClient;

public class MinioExample { public static MinioClient createMinioClient() { return MinioClient.builder() .endpoint("http://localhost:9000") .credentials("minioadmin", "minioadmin") .build(); }}


3. Operações principais com buckets e objetos



Independentemente do cliente escolhido, a lógica de trabalho com S3 é universal. Vamos considerar os cenários principais.



3.1. Verificação de existência e criação de bucket



// AWS SDKpublic boolean bucketExists(S3Client s3, String bucketName) {    return s3.headBucket(HeadBucketRequest.builder()            .bucket(bucketName)            .build())            .sdkHttpResponse().isSuccessful();}

// MinIO SDKpublic boolean bucketExists(MinioClient minio, String bucketName) { return minio.bucketExists(BucketExistsArgs.builder() .bucket(bucketName) .build());}

// Criação de bucket (AWS)s3.createBucket(CreateBucketRequest.builder() .bucket("my-unique-bucket-123") .createBucketConfiguration( CreateBucketConfiguration.builder() .locationConstraint("eu-central-1") .build()) .build());

// Criação de bucket (MinIO)minio.makeBucket(MakeBucketArgs.builder() .bucket("my-local-bucket") .build());


3.2. Upload de arquivo



Upload de arquivo a partir de um caminho local ou de um fluxo de dados.



// AWS SDK - a partir de arquivos3.putObject(PutObjectRequest.builder()        .bucket("my-bucket")        .key("uploads/report.pdf")        .build(),        Paths.get("/local/path/report.pdf"));

// MinIO SDK - a partir de InputStreamtry (InputStream is = new FileInputStream("/local/path/photo.jpg")) { minio.putObject(PutObjectArgs.builder()

Recommendations