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