Exemple de code utilisant Minio de Java

Récemment, j'ai utilisé Minio, un stockage compatible S3, pour des tests automatisés d'applications qui reposent sur Amazon S3. Maintenant, créez un exemple de code pour accéder à Minio à partir de Java (Spring Boot) à l'aide du kit AWS SDK pour Java.

Qu'est-ce que Minio

C'est l'un des clones S3 et est compatible avec S3, vous pouvez donc y accéder avec AWS SDK etc. de la même manière qu'Amazon S3. Pratique car vous pouvez facilement utiliser le stockage compatible S3.

Conditions préalables

$ 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"

procédure

Cette section décrit la procédure pour utiliser Minio en tant que conteneur Docker et y accéder à partir de l'application Spring Boot. L'exemple de code créé se trouve à l'adresse u6k / sample-minio.

Essayez d'exécuter le conteneur Minio

Exploitons-le en nous référant au "Docker Container" de Minio Docs.

$ docker run \
    -d \
    --name s3 \
    -p 9000:9000 \
    minio/minio:edge server /export

S'il démarre normalement, le journal sera généré comme indiqué ci-dessous.

$ 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 démarre sur le port 9000, alors connectez-vous au port 9000 avec un navigateur Web ou une API. Si vous essayez d'accéder à http: // localhost: 9000 /, l'interface Web Minio s'affichera, alors essayez de vous connecter. À ce stade, veuillez créer des buckets. Affiche la liste des buckets avec l'exemple de code.

La clé d'accès et la clé secrète sont sorties dans le journal, utilisez-les donc lors de l'accès avec un navigateur Web ou une API. Si vous souhaitez corriger la clé d'accès et la clé secrète dans le test automatique, etc., vous pouvez les définir arbitrairement en spécifiant les variables d'environnement MINIO_ACCESS_KEY et MINIO_SECRET_KEY.

Essayez d'accéder à Minio depuis l'application Spring Boot

La procédure de création d'un projet Spring Boot est omise. Voir src / main / java / me / u6k / sample_minio / Main.java pour l'exemple de code essentiel. Certains sont expliqués ici.

@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;

L'URL du point de terminaison S3, la clé d'accès, la clé secrète et la valeur du délai (en millisecondes) sont acquises en tant qu'informations de configuration. Puisqu'il s'agit d'une application SpringBoot, elle peut être spécifiée dans ʻapplication.properties` ou dans des variables d'environnement.

AWSCredentials credentials = new BasicAWSCredentials(this.s3accessId, this.s3secretKey);

Créez des informations d'identification à l'aide des clés d'accès et secrètes. Il semble y avoir une autre façon de créer des informations d'identification à partir d'un certificat.

ClientConfiguration configuration = new ClientConfiguration();
configuration.setSocketTimeout(this.s3timeout);
configuration.setSignerOverride("AWSS3V4SignerType");

Spécifiez la valeur du délai d'expiration et la méthode de signature. Cette zone est magique.

AmazonS3 s3 = AmazonS3ClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(credentials))
                .withEndpointConfiguration(new EndpointConfiguration(this.s3url, "us-east-1"))
                .withClientConfiguration(configuration)
                .withPathStyleAccessEnabled(true)
                .build();

Initialisez le client S3 en définissant les informations d'identification, le point de terminaison S3, les informations de configuration du client et le style de chemin.

Le point de terminaison S3 spécifie une région en plus de l'URL. Je codifie en dur ʻus-east-1 ici, mais Minio est pour ʻus-east-1 par défaut.

En ce qui concerne le style de chemin, cela est obligatoire car le nom du compartiment dans AWS S3 est un nom DNS, tandis que Minio est un chemin.

for (Bucket bucket : s3.listBuckets()) {
    L.info("bucket={}", bucket.getName());
}

La liste des compartiments est acquise et le nom du compartiment est affiché dans le journal.

Créez une image Docker et essayez d'y accéder à partir d'un conteneur Docker

Tout d'abord, créez l'image Docker.

$ docker build -t sample-minio .

Démarrez le conteneur Minio à l'avance, créez des compartiments et démarrez le conteneur sample-minio.

$ 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

Une fois terminé normalement, le journal sera généré comme indiqué ci-dessous.

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

en conclusion

Seuls l'accès S3 et le processus d'initialisation du client sont différents, mais il a été confirmé que les autres sont accessibles de la même manière. Je pense que Minio peut être utilisé comme environnement local pour S3.

Recommended Posts

Exemple de code utilisant Minio de Java
Exemple de code Java 02
Exemple de code Java 03
Exemple de code Java 04
Java EE 8 (utilisant NetBeans IDE 8.2) à partir de l'exemple de code Partie 1 Construction de l'environnement
Exemple de code de signature électronique (JAVA)
Collection d'exemples de code parallèle Java
Utilisation de Docker depuis Java Gradle
Nouvelles fonctionnalités de Java 9 et exemple de code
[Java] Élimination du code de plaque de chaudière à l'aide de Lombok
[Java] Élimination du code de plaque de chaudière avec Lombok 2
Exemple d'utilisation de l'API Bulk de Salesforce à partir d'un client Java avec PK-chunking
Exemple de code pour l'implémentation Singleton à l'aide d'énumération
Traitement des données à l'aide de l'API de flux de Java 8
Connectez-vous de Java à MySQL à l'aide d'Eclipse
[Java] Flux du code source à l'exécution
Exécutez du code Java à partir de cpp sur cocos2dx
Exécuter du code Java de manière scriptée
CONSEILS relatifs au code Java
[Java] Exemple de génériques
Échantillon de sélénium (Java)
Exemple d'interface graphique Java
Code de caractère Java
Accédez à Forec.com depuis Java en utilisant Axis2 Enterprise WSDL
[Java] Convertit le code DB en valeur de code à l'aide d'énum
Essayez d'utiliser Sourcetrail (version win) avec du code Java
Essayez d'utiliser Sourcetrail (version macOS) avec du code Java
Essayez d'accéder à l'ensemble de données depuis Java en utilisant JZOS
En utilisant Gradle avec VSCode, compilez Java → exécutez
Ecrire du code de liaison Selenium Java à l'aide de Silk WebDriver
Connexion SSH à l'aide de SSHJ à partir de l'application Java 6
Tri à l'aide du comparateur java
Appeler Java depuis JRuby
Prise en main des programmes Java à l'aide de Visual Studio Code
Sortie de la valeur maximale d'un tableau à l'aide de la sortie standard Java
Exemple de code pour convertir List en List <String> dans Java Stream
Créer un environnement VS Code + WSL + Java + Gradle à partir de zéro
Changements de Java 8 à Java 11
Somme de Java_1 à 100
Exemple d'interface graphique utilisant JavaFX
Évaluer la source Java à partir de Java
Exemple de code Apache beam
[Java] Exemple de jugement de vacances
[Java] Extraction de texte de PowerPoint (ppt) à l'aide d'Apache POI
Pratique de grattage avec Java ②
De Java à Ruby !!
Utilisation de la base de données (SQL Server 2014) à partir d'un programme Java 04/01/2018
Pratique du grattage avec Java ①
Exemple de code pour la sortie du journal par Java + SLF4J + Logback
Différences de code lors de l'utilisation du système de longueur en Java
Exemple de code Java pour acquérir et afficher les données source et de destination DBLINK dans Oracle Database à l'aide de DBLINK
Exemple de code pour analyser la date et l'heure avec SimpleDateFormat de Java
Créer un code QR pour Google Authenticator à l'aide de ZXing en Java
Corrigez le code de caractère en Java et lisez à partir de l'URL
L'histoire de l'utilisation de Java Input Wait (Scanner) avec VSCode
Un exemple CRUD simple utilisant Java Servlet / JSP et MySQL
Essayez d'utiliser RocksDB avec Java