Arbeit mit S3 und Cloud-Speichern in Java: AWS SDK und MinIO

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeit mit S3 und Cloud-Speichern in Java mit AWS SDK und MinIO

\n\n

Cloud-Objektspeicher, die mit dem Amazon S3 (Simple Storage Service)-Protokoll kompatibel sind, haben sich zum De-facto-Standard für die Speicherung unstrukturierter Daten entwickelt: Bilder, Videos, Logs, Backups und Build-Artefakte. In Java ist das wichtigste Werkzeug für die Interaktion mit solchen Speichern das AWS SDK for Java (Modul S3). Für die lokale Entwicklung, das Testen oder die Arbeit mit Self-Hosted-Lösungen wird jedoch häufig MinIO verwendet – ein leistungsstarker S3-kompatibler Speicher mit eigenem Java-Client. In diesem Artikel betrachten wir beide Ansätze.

\n\n

1. Vorbereitung und Einbindung von Abhängigkeiten

\n\n

Fügen Sie zunächst die Abhängigkeiten zu Ihrer pom.xml (Maven) hinzu:

\n\n
<dependency>\n    <groupId>software.amazon.awssdk</groupId>\n    <artifactId>s3</artifactId>\n    <version>2.30.0</version>\n</dependency>\n\n<!-- Für MinIO (Alternative zum AWS SDK) -->\n<dependency>\n    <groupId>io.minio</groupId>\n    <artifactId>minio</artifactId>\n    <version>8.5.17</version>\n</dependency>
\n\n

2. Erstellen eines S3-Clients

\n\n

Betrachten wir zwei Möglichkeiten, einen Client zu erstellen: für Amazon S3 (AWS) und für MinIO (lokaler/benutzerdefinierter Speicher).

\n\n

2.1. Client für Amazon S3 (AWS SDK)

\n\n

Verwenden Sie den statischen Builder und geben Sie die Region und die Authentifizierungsmethode an (z. B. über Umgebungsvariablen oder ein IAM-Profil).

\n\n
import software.amazon.awssdk.regions.Region;\nimport software.amazon.awssdk.services.s3.S3Client;\n\npublic class AwsS3Example {\n    public static S3Client createAwsS3Client() {\n        return S3Client.builder()\n                .region(Region.EU_CENTRAL_1) // Frankfurt\n                .build(); // Verwendet die Standard-Anbieterkette\n    }\n}
\n\n

2.2. Client für MinIO

\n\n

MinIO erfordert die explizite Angabe von Endpoint, Access Key und Secret Key.

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

3. Grundlegende Operationen mit Buckets und Objekten

\n\n

Unabhängig vom gewählten Client ist die Logik der Arbeit mit S3 universell. Betrachten wir die wichtigsten Szenarien.

\n\n

3.1. Überprüfen der Existenz und Erstellen eines Buckets

\n\n
// AWS SDK\npublic boolean bucketExists(S3Client s3, String bucketName) {\n    return s3.headBucket(HeadBucketRequest.builder()\n            .bucket(bucketName)\n            .build())\n            .sdkHttpResponse().isSuccessful();\n}\n\n// MinIO SDK\npublic boolean bucketExists(MinioClient minio, String bucketName) {\n    return minio.bucketExists(BucketExistsArgs.builder()\n            .bucket(bucketName)\n            .build());\n}\n\n// Bucket erstellen (AWS)\ns3.createBucket(CreateBucketRequest.builder()\n        .bucket("my-unique-bucket-123")\n        .createBucketConfiguration(\n            CreateBucketConfiguration.builder()\n                .locationConstraint("eu-central-1")\n                .build())\n        .build());\n\n// Bucket erstellen (MinIO)\nminio.makeBucket(MakeBucketArgs.builder()\n        .bucket("my-local-bucket")\n        .build());
\n\n

3.2. Hochladen einer Datei (Upload)

\n\n

Hochladen einer Datei von einem lokalen Pfad oder aus einem Datenstrom.

\n\n
// AWS SDK - aus Datei\ns3.putObject(PutObjectRequest.builder()\n        .bucket("my-bucket")\n        .key("uploads/report.pdf")\n        .build(),\n        Paths.get("/local/path/report.pdf"));\n\n// MinIO SDK - aus InputStream\ntry (InputStream is = new FileInputStream("/local/path/photo.jpg")) {\n    minio.putObject(PutObjectArgs.builder()\n                    

Empfehlungen