
Introduction
Minio server supports Amazon S3 compatible bucket event notification for following targets AMQP, Elasticsearch , Redis, nats.io, PostgreSQL and Apache Kafka. Part 2 of this blog series covers sending bucket notifications using Elasticsearch server.
I used Ubuntu Linux 16.04, latest Minio server binary and Elasticsearch 2.4.0on my laptop for this setup.
Note: Elasticsearch requires at least Java 7. It is recommended you use the Oracle JDK.
Install Elasticsearch
$ curl -L -O https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.4.0/elasticsearch-2.4.0.tar.gz
$ tar -xvf elasticsearch-2.4.0.tar.gz
$ cd elasticsearch-2.4.0/bin
$ ./elasticsearch
[2016-09-09 16:17:24,733][INFO ][node ] [Kirigi] version[2.4.0], pid[4422], build[ce9f0c7/2016-08-29T09:14:17Z]
[2016-09-09 16:17:24,734][INFO ][node ] [Kirigi] initializing ...
[2016-09-09 16:17:25,632][INFO ][plugins ] [Kirigi] modules [reindex, lang-expression, lang-groovy], plugins [], sites []
[2016-09-09 16:17:25,679][INFO ][env ] [Kirigi] using [1] data paths, mounts [[/ (/dev/sda1)]], net usable_space [3.5gb], net total_space [7gb], spins? [possibly], types [ext4]
...
...
Note: Ensure you have curl package installed.
Latest Minio server binary can be downloaded from https://minio.io/downloads/
$ wget https://dl.minio.io/server/minio/release/linux-amd64/minio
$ chmod +x minio
In this case “myphotos” is used as my data directory for Minio server.
$ ./minio server myphotos
Endpoint: http://10.1.10.150:9000 http://127.0.0.1:9000
AccessKey: 7I6R5G576YI641GS9J9F
SecretKey: SuycBIe+O/s5zXxU9w+N4wkXHpBCKa2H6Ptlrc8c
Region: us-east-1
...
...
The default location of Minio server configuration file is ~/.minio/config.json. Update the Elasticsearch configuration block in ‘config.json’ as follows.
Restart the Minio server to reflect config changes made above. “bucketevents” is the index used by Elasticsearch in this example.
Step 1: Download and install Minio client
$ wget https://dl.minio.io/client/mc/release/linux-amd64/mc
$ chmod 755 mc
Step 2: Add Minio server host alias information
Configure Minio client with access and secret keys pointing to the Minio server.
$ ./mc config host add myminio http://localhost:9000 7I6R5G576YI641GS9J9F SuycBIe+O/s5zXxU9w+N4wkXHpBCKa2H6Ptlrc8c
Step 3: Enable bucket notification
In this example we will enable bucket events only when JPEG images are uploaded or deleted from ‘images’ bucket on ‘myminio’ server. Here ARN value is arn:minio:sqs:us-east-1:1:elasticsearch. To understand more about ARN please follow AWS ARN documentation.
$ ./mc mb myminio/images
$ ./mc events add myminio/images arn:minio:sqs:us-east-1:1:elasticsearch --suffix .jpg
$ ./mc events list myminio/images
arn:minio:sqs:us-east-1:1:elasticsearch s3:ObjectCreated:*,s3:ObjectRemoved:* Filter: suffix=”.jpg”
Step 4: Testing on Elasticsearch
Open another terminal and upload a JPEG image into “images” bucket.
$ ./mc cp myphoto.jpg myminio/images
You should see Elasticsearch has created a new index.
$ curl -XGET '127.0.0.1:9200/_cat/indices?v'
health status index pri rep docs.count docs.deleted store.size
pri.store.size
yellow open bucketevents 5 1 1 0 7.8kb 7.8kb
Use curl to view contents of “bucketevents” index.
$ curl -XGET '127.0.0.1:9200/bucketevents/_search?pretty=1'
{
"took" : 3,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [ {
"_index" : "bucketevents",
"_type" : "event",
"_id" : "AVcRVOlwe-uNB1tfj6bx",
"_score" : 1.0,
"_source" : {
"Records" : [ {
"eventVersion" : "2.0",
"eventSource" : "aws:s3",
"awsRegion" : "us-east-1",
"eventTime" : "2016-09-09T23:42:39.977Z",
"eventName" : "s3:ObjectCreated:Put",
"userIdentity" : {
"principalId" : "minio"
},
"requestParameters" : {
"sourceIPAddress" : "10.1.10.150:52140"
},
"responseElements" : { },
"s3" : {
"s3SchemaVersion" : "1.0",
"configurationId" : "Config",
"bucket" : {
"name" : "images",
"ownerIdentity" : {
"principalId" : "minio"
},
"arn" : "arn:aws:s3:::images"
},
"object" : {
"key" : "myphoto.jpg",
"size" : 200436,
"sequencer" : "1472CC35E6971AF3"
}
}
} ]
}
} ]
}
}
view rawelasticsearch hosted with ❤ by Git
curl output above states that an Elasticsearch index has been successfully created with notification contents.
For further questions and comments join our Slack chat at: https://slack.minio.io


