Vor kurzem habe ich Minio, einen S3-kompatiblen Speicher, zum automatisierten Testen von Anwendungen verwendet, die auf Amazon S3 basieren. Erstellen Sie jetzt Beispielcode für den Zugriff auf Minio von Java (Spring Boot) mit dem AWS SDK für Java.
Es ist einer der S3-Klone und mit S3 kompatibel, sodass Sie mit AWS SDK usw. auf dieselbe Weise wie mit Amazon S3 darauf zugreifen können. Praktisch, da Sie problemlos S3-kompatiblen Speicher verwenden können.
$ docker version
docker version
Client:
Version: 1.12.5
API version: 1.24
Go version: go1.6.4
Git commit: 7392c3b
Built: Fri Dec 16 06:14:34 2016
OS/Arch: linux/amd64
Server:
Version: 1.12.5
API version: 1.24
Go version: go1.6.4
Git commit: 7392c3b
Built: Fri Dec 16 06:14:34 2016
OS/Arch: linux/amd64
# java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (IcedTea 3.3.0) (Alpine 8.121.13-r0)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
# mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00)
Maven home: /usr/share/java/maven-3
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8-openjdk/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.4.59-boot2docker", arch: "amd64", family: "unix"
In diesem Abschnitt wird beschrieben, wie Sie Minio als Docker-Container betreiben und über die Spring Boot-Anwendung darauf zugreifen. Der erstellte Beispielcode finden Sie unter u6k / sample-minio.
Lassen Sie es uns unter Bezugnahme auf "Docker Container" von Minio Docs betreiben.
$ docker run \
-d \
--name s3 \
-p 9000:9000 \
minio/minio:edge server /export
Wenn es normal startet, wird das Protokoll wie unten gezeigt ausgegeben.
$ docker logs s3
Created minio configuration file successfully at /root/.minio
Endpoint: http://172.17.0.2:9000 http://127.0.0.1:9000
AccessKey: xxxxxxxxxxxxxxxxxxxx
SecretKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Region: us-east-1
SQS ARNs: <none>
Browser Access:
http://172.17.0.2:9000 http://127.0.0.1:9000
Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide
$ mc config host add myminio http://172.17.0.2:9000 C05JGTT0UWNXW25Y4IHN zg1JZrFIAWM0dZmXkPF93ZOXXf6Vj3F/QgycmLZE
Object API (Amazon S3 compatible):
Go: https://docs.minio.io/docs/golang-client-quickstart-guide
Java: https://docs.minio.io/docs/java-client-quickstart-guide
Python: https://docs.minio.io/docs/python-client-quickstart-guide
JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide
Drive Capacity: 17 GiB Free, 18 GiB Total
Minio startet an Port 9000, stellen Sie also mit einem Webbrowser oder einer API eine Verbindung zu Port 9000 her. Wenn Sie versuchen, auf "http: // localhost: 9000 /" zuzugreifen, wird die Minio-Weboberfläche angezeigt. Versuchen Sie also, sich anzumelden. Zu diesem Zeitpunkt erstellen Sie bitte einige Eimer. Lassen Sie uns die Liste der Buckets mit dem Beispielcode anzeigen.
Der Zugriffsschlüssel und der geheime Schlüssel werden im Protokoll ausgegeben. Verwenden Sie diese Option, wenn Sie mit einem Webbrowser oder einer API darauf zugreifen. Wenn Sie den Zugriffsschlüssel und den geheimen Schlüssel im automatischen Test usw. festlegen möchten, können Sie sie beliebig festlegen, indem Sie die Umgebungsvariablen "MINIO_ACCESS_KEY" und "MINIO_SECRET_KEY" angeben.
@Value("${s3.url}")
private String s3url;
@Value("${s3.access-id}")
private String s3accessId;
@Value("${s3.secret-key}")
private String s3secretKey;
@Value("${s3.timeout}")
private int s3timeout;
Die S3-Endpunkt-URL, der Zugriffsschlüssel, der geheime Schlüssel und der Zeitlimitwert (Millisekunden) werden als Einstellungsinformationen erfasst. Da es sich um eine SpringBoot-Anwendung handelt, kann sie in "application.properties" oder Umgebungsvariablen angegeben werden.
AWSCredentials credentials = new BasicAWSCredentials(this.s3accessId, this.s3secretKey);
Erstellen Sie Anmeldeinformationen mit den Zugriffs- und geheimen Schlüsseln. Es scheint eine andere Möglichkeit zu geben, Anmeldeinformationen aus einem Zertifikat zu erstellen.
ClientConfiguration configuration = new ClientConfiguration();
configuration.setSocketTimeout(this.s3timeout);
configuration.setSignerOverride("AWSS3V4SignerType");
Geben Sie den Zeitlimitwert und die Signaturmethode an. Dieser Bereich ist magisch.
AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.withEndpointConfiguration(new EndpointConfiguration(this.s3url, "us-east-1"))
.withClientConfiguration(configuration)
.withPathStyleAccessEnabled(true)
.build();
Initialisieren Sie den S3-Client, indem Sie Anmeldeinformationen, S3-Endpunkt, Clientkonfigurationsinformationen und Pfadstil festlegen.
Der S3-Endpunkt gibt zusätzlich zur URL eine Region an. Ich codiere hier "us-east-1" hart, weil Minio standardmäßig "us-east-1" ist.
In Bezug auf den Pfadstil ist dies erforderlich, da der Bucket-Name in AWS S3 ein DNS-Name ist, während Minio ein Pfad ist.
for (Bucket bucket : s3.listBuckets()) {
L.info("bucket={}", bucket.getName());
}
Die Liste der Buckets wird erfasst und der Bucket-Name wird im Protokoll ausgegeben.
Erstellen Sie zunächst das Docker-Image.
$ docker build -t sample-minio .
Starten Sie den Minio-Container im Voraus, erstellen Sie einige Eimer und starten Sie den Sample-Minio-Container.
$ docker run \
--rm \
--link s3:s3 \
-e S3_URL=http://s3:9000/ \
-e S3_ACCESS-ID=xxxxxxxxxxxxxxxxxxxx \
-e S3_SECRET-KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
-e S3_TIMEOUT=10000 \
-v $HOME/.m2:/root/.m2 \
-v $(pwd):/var/my-app \
sample-minio
Wenn das Protokoll normal abgeschlossen ist, wird es wie unten gezeigt ausgegeben.
2017-04-30 09:14:54.463 INFO 1 --- [ main] me.u6k.sample_minio.Main : s3.url=http://s3:9000/
2017-04-30 09:14:54.476 INFO 1 --- [ main] me.u6k.sample_minio.Main : s3.access-id=xxxxxxxxxxxxxxxxxxxx
2017-04-30 09:14:54.476 INFO 1 --- [ main] me.u6k.sample_minio.Main : s3.secret-key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2017-04-30 09:14:54.476 INFO 1 --- [ main] me.u6k.sample_minio.Main : s3.timeout=10000
2017-04-30 09:14:57.357 INFO 1 --- [ main] me.u6k.sample_minio.Main : bucket=bar
2017-04-30 09:14:57.357 INFO 1 --- [ main] me.u6k.sample_minio.Main : bucket=boo
2017-04-30 09:14:57.357 INFO 1 --- [ main] me.u6k.sample_minio.Main : bucket=foo
Recommended Posts