MinIO Bucket Notification Guide
MinIO 버킷 알림 가이드
Events occurring on objects in a bucket can be monitored using bucket event notifications. Event types supported by MinIO server are...
버킷 이벤트 알림을 사용하여 버킷의 객체에서 발생하는 이벤트를 모니터링할 수 있습니다. MinIO 서버가 지원하는 이벤트 유형은 다음과 같습니다...
Supported Event Types
s3:ObjectCreated:Put
s3:ObjectCreated:CompleteMultipartUpload
s3:ObjectAccessed:Head
s3:ObjectCreated:Post
s3:ObjectRemoved:Delete
s3:ObjectCreated:Copy
s3:ObjectAccessed:Get
Use client tools like mc to set and listen for event notifications using the event sub-command. MinIO SDK's BucketNotification APIs can also be used.
mc와 같은 클라이언트 도구를 사용하면 event 하위 명령을 통해 이벤트 알림을 설정하고 수신할 수 있습니다. MinIO SDK의 BucketNotification API도 사용할 수 있습니다.
The notification message MinIO sends to publish an event is a JSON message with the following structure.
MinIO가 이벤트를 게시하기 위해 보내는 알림 메시지는 다음 구조의 JSON 메시지입니다.
Bucket events can be published to the following targets:
버킷 이벤트는 다음 대상에 게시될 수 있습니다.
Supported Notification Targets
지원되는 알림 대상
AMQP
Redis
MySQL
MQTT
NATS
Apache Kafka
Elasticsearch
PostgreSQL
Webhooks
NSQ
Prerequisites
전제조건
Install and configure MinIO Server from here.
여기에서 MinIO 서버를 설치하고 구성합니다.
Install and configure MinIO Client from here.
여기에서 MinIO 클라이언트를 설치하고 구성하세요.
Publish MinIO events via AMQP
AMQP를 통해 MinIO 이벤트 게시
Install RabbitMQ from here.
여기에서 RabbitMQ를 설치하십시오.
Step 1: Add AMQP endpoint to MinIO
1 단계: MinIO에 AMQP 엔드포인트 추가
The MinIO server configuration file is stored on the backend in json format. The AMQP configuration is located in the amqp key under the notify top-level key.
MinIO 서버 구성 파일은 백엔드에 json 형식으로 백엔드에 저장됩니다. AMQP 구성은 알림 최상위 키 아래의 amqp 키에 있습니다.
Create a configuration key-value pair here for your AMQP instance. The key is a name for your AMQP endpoint, and the value is a collection of key-value parameters described in the table below.
AMQP 인스턴스에 대한 구성 키-값 쌍을 여기에서 생성합니다. 키는 AMQP 엔드포인트의 이름이고, 값은 아래 표에 설명된 키-값 매개변수의 컬렉션입니다.
Parameter
Type
Description
설명
enable
bool
(Required) Is this server endpoint configuration active/enabled?
(Required) 이 서버 엔드포인트 구성이 활성화되어 있습니까/사용가능합니까?
url
string
(Required) AMQP server endpoint, e.g. amqp://myuser:mypassword@localhost:5672
(Required) AMQP 서버 엔드포인트 (예를 들어 amqp://myuser:mypassword@localhost:5672)
exchange
string
Name of the exchange.
거래소 이름.
routingKey
게시용 라우팅 키입니다.
routingKey
string
Routing key for publishing.
게시용 라우팅 키입니다.
exchangeType
string
Kind of exchange.
일종의 교환.
deliveryMode
uint8
Delivery mode for publishing. 0 or 1 - transient; 2 - persistent.
게시를 위한 게재 모드입니다. 0 또는 1 - 일시적입니다. 2 - 지속적.
mandatory
bool
Publishing related bool.
출판 관련 부울.
immediate
bool
Publishing related bool.
출판 관련 부울.
durable
bool
Exchange declaration related bool.
거래서 선언 관련 부울.
internal
bool
Exchange declaration related bool.
거래소 선언 관련 부울.
noWait
bool
Exchange declaration related bool.
거래소 선언 관련 부울.
autoDeleted
bool
Exchange declaration related bool.
거래소 선언 관련 부울.
queueDir
string
Persistent store for events when AMQP broker is offline
AMQP 브로커가 오프라인일 때 이벤트에 대한 영구 저장소
queueLimit
int
Set the maximum event limit for the persistent store. The default limit is 10000
영구 저장소에 대한 최대 이벤트 제한을 설정합니다. 기본 한도는 10000입니다
An example configuration for RabbitMQ is shown below:
RabbitMQ의 구성 예는 다음과 같습니다:
"amqp": {
"1": {
"enable": true,
"url": "amqp://myuser:mypassword@localhost:5672",
"exchange": "bucketevents",
"routingKey": "bucketlogs",
"exchangeType": "fanout",
"deliveryMode": 0,
"mandatory": false,
"immediate": false,
"durable": false,
"internal": false,
"noWait": false,
"autoDeleted": false,
"queueDir": "",
"queueLimit": 0
}
}
MinIO supports persistent event store. The persistent store will backup events when the AMQP broker goes offline and replays it when the broker comes back online.
MinIO는 지속적인 이벤트 저장소를 지원합니다. 영구 저장소는 AMQP 브로커가 오프라인이 되면 이벤트를 백업하고 브로커가 다시 온라인이 되면 이를 재생합니다.
The event store can be configured by setting the directory path in queueDir field and the maximum limit of events in the queueDir in queueLimit field.
queueDir 필드에 디렉터리 경로를 설정하고 queueLimit 필드의 queueDir에 최대 이벤트 제한을 설정하여 이벤트 저장소를 구성할 수 있습니다.
For eg, the queueDir can be /home/events and queueLimit can be 1000. By default, the queueLimit is set to 10000.
예를 들어, queueDir은 /home/events이고 queueLimit는 1000일 수 있습니다. 기본적으로 queueLimit은 10000으로 설정됩니다.
To update the configuration, use mc admin config get command to get the current configuration file for the minio deployment in json format, and save it locally.
구성을 업데이트하려면 mc admin config get 명령을 사용하여 minio 배포에 대한 현재 구성 파일을 json 형식으로 가져와 로컬에 저장합니다.
mc admin config get myminio/ > /tmp/myconfig
After updating the AMQP configuration in /tmp/myconfig , use mc admin config set command to update the configuration for the deployment. Restart the MinIO server to put the changes into effect.
/tmp/myconfig에서 AMQP 구성을 업데이트한 후 mc admin config set 명령을 사용하여 배포 구성을 업데이트합니다. 변경 사항을 적용하려면 MinIO 서버를 다시 시작하세요.
The server will print a line like SQS ARNs: arn:minio:sqs::1:amqp at start-up if there were no errors.
오류가 없는 경우 서버는 시작 시 SQS ARN: arn:minio:sqs::1:amqp와 같은 줄을 인쇄합니다.
mc admin config set myminio < /tmp/myconfig
MinIO supports all the exchanges available in RabbitMQ. For this setup, we are using fanout exchange.
MinIO는 RabbitMQ에서 사용 가능한 모든 교환을 지원합니다. 이 설정에서는 팬아웃 교환을 사용합니다.
Note that, you can add as many AMQP server endpoint configurations as needed by providing an identifier (like "1" in the example above) for the AMQP instance and an object of per-server configuration parameters.
AMQP 인스턴스에 대한 식별자 (예: 위 예의 "1")와 서버별 구성 매개변수의 객체를 제공하여 필요한 만큼 AMQP 서버 엔드포인트 구성을 추가할 수 있습니다.
Step 2: Enable bucket notification using MinIO client
2 단계: MinIO 클라이언트를 사용하여 버킷 알림 활성화
We will enable bucket event notification to trigger whenever a JPEG image is uploaded or deleted images bucket on myminio server.
myminio 서버에서 JPEG 이미지가 업로드되거나 이미지 버킷이 삭제될 때마다 버킷 이벤트 알림이 트리거되도록 활성화하겠습니다.
Here ARN value is arn:minio:sqs::1:amqp. To understand more about ARN please follow AWS ARN documentation.
여기서 ARN 값은 arn:minio:sqs::1:amqp입니다. ARN에 대해 자세히 알아보려면 AWS ARN 설명서를 따르십시오.
mc mb myminio/images
mc event add myminio/images arn:minio:sqs::1:amqp --suffix .jpg
mc event list myminio/images
arn:minio:sqs::1:amqp s3:ObjectCreated:*,s3:ObjectRemoved:* Filter: suffix=”.jpg”
Step 3: Test on RabbitMQ
3 단계: RabbitMQ에서 테스트
The python program below waits on the queue exchange bucket events and prints event notifications on the console. We use Pika Python Client library to do this.
아래의 Python 프로그램은 대기열 교환 버킷 이벤트를 기다리고 콘솔에 이벤트 알림을 인쇄합니다. 이를 위해 Pika Python 클라이언트 라이브러리를 사용합니다.
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel = connection.channel()
channel.exchange_declare(exchange='bucketevents',
exchange_type='fanout')
result = channel.queue_declare(exclusive=False)
queue_name = result.method.queue
channel.queue_bind(exchange='bucketevents',
queue=queue_name)
print(' [*] Waiting for logs. To exit press CTRL+C')
def callback(ch, method, properties, body):
print(" [x] %r" % body)
channel.basic_consume(callback,
queue=queue_name,
no_ack=False)
channel.start_consuming()
Execute this example python program to watch for RabbitMQ events on the console.
이 예제 Python 프로그램을 실행하여 콘솔에서 RabbitMQ 이벤트를 감시하세요.
python rabbit.py
Open another terminal and upload a JPEG image into images bucket.
다른 터미널을 열고 JPEG 이미지를 이미지 버킷에 업로드하세요.
mc cp myphoto.jpg myminio/images
You should receive the following event notification via RabbitMQ once the upload completes.
업로드가 완료되면 RabbitMQ를 통해 다음 이벤트 알림을 받아야 합니다.
python rabbit.py
'{"Records":[{"eventVersion":"2.0","eventSource":"aws:s3","awsRegion":"","eventTime":"2016–09–08T22:34:38.226Z","eventName":"s3:ObjectCreated:Put","userIdentity":{"principalId":"minio"},"requestParameters":{"sourceIPAddress":"10.1.10.150:44576"},"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":"147279EAF9F40933"}}}],"level":"info","msg":"","time":"2016–09–08T15:34:38–07:00"}'
Publish MinIO events MQTT
MinIO 이벤트 MQTT 게시
Install an MQTT Broker from here.
여기에서 MQTT 브로커를 설치하세요.
Step 1: Add MQTT endpoint to MinIO
1 단계: MinIO에 MQTT 엔드포인트 추가
The MinIO server configuration file is stored on the backend in json format. The MQTT configuration is located in the mqtt key under the notify top-level key.
MinIO 서버 구성 파일은 json 형식으로 백엔드에 저장됩니다. MQTT 구성은 알림 최상위 키 아래의 mqtt 키에 있습니다.
Create a configuration key-value pair here for your MQTT instance.
MQTT 인스턴스에 대한 구성 키-값 쌍을 여기에서 생성합니다.
The key is a name for your MQTT endpoint, and the value is a collection of key-value parameters described in the table below.
키는 MQTT 엔드포인트의 이름이고 값은 아래 표에 설명된 키-값 매개변수의 컬렉션입니다.
Parameter
Type
Description
설명
enable
bool
(Required) Is this server endpoint configuration active/enabled?
(필수) 이 서버 엔드포인트 구성이 활성화되어 있습니까/사용가능합니까?
broker
string
(Required) MQTT server endpoint, e.g. tcp://localhost:1883
(필수) MQTT 서버 엔드포인트 (예: tcp://localhost:1883
topic
string
(Required) Name of the MQTT topic to publish on, e.g. minio
(필수) 게시할 MQTT 주제의 이름입니다, 예: minio
qos
int
Set the Quality of Service Level
서비스 품질 수준 설정
username
string
Username to connect to the MQTT server (if required)
MQTT 서버에 연결하기 위한 사용자 이름 (필요한 경우)
password
string
Password to connect to the MQTT server (if required)
MQTT 서버에 연결하기 위한 패스워드 (필요한 경우)
queueDir
string
Persistent store for events when MQTT broker is offline
MQTT 브로커가 오프라인일 때 이벤트에 대한 영구 저장소
queueLimit
int
Set the maximum event limit for the persistent store. The default limit is 10000
영구 저장소의 최대 이벤트 제한을 설정합니다. 기본 한도는 10000입니다
An example configuration for MQTT is shown below:
MQTT 구성의 예는 다음과 같습니다:
"mqtt": {
"1": {
"enable": true,
"broker": "tcp://localhost:1883",
"topic": "minio",
"qos": 1,
"username": "",
"password": "",
"queueDir": "",
"queueLimit": 0
}
}
MinIO supports persistent event store. The persistent store will backup events when the MQTT broker goes offline and replays it when the broker comes back online.
MinIO는 지속적인 이벤트 저장소를 지원합니다. 영구 저장소는 MQTT 브로커가 오프라인이 되면 이벤트를 백업하고 브로커가 다시 온라인이 되면 이벤트를 재생합니다.
The event store can be configured by setting the directory path in queueDir field and the maximum limit of events in the queueDir in queueLimit field.
queueDir 필드에 디렉터리 경로를 설정하고 queueLimit 필드의 queueDir에 최대 이벤트 제한을 설정하여 이벤트 저장소를 구성할 수 있습니다.
For eg, the queueDir can be /home/events and queueLimit can be 1000. By default, the queueLimit is set to 10000.
예를 들어, queueDir은 /home/events이고 queueLimit는 1000일 수 있습니다. 기본적으로 queueLimit는 10000으로 설정됩니다.
To update the configuration, use mc admin config get command to get the current configuration file for the minio deployment in json format, and save it locally.
구성을 업데이트하려면 mc admin config get 명령을 사용하여 minio 배포에 대한 현재 구성 파일을 json 형식으로 가져와 로컬에 저장합니다.
mc admin config get myminio/ > /tmp/myconfig
After updating the MQTT configuration in /tmp/myconfig , use mc admin config set command to update the configuration for the deployment. Restart the MinIO server to put the changes into effect.
/tmp/myconfig에서 MQTT 구성을 업데이트한 후 mc admin config set 명령을 사용하여 배포 구성을 업데이트합니다. 변경 사항을 적용하려면 MinIO 서버를 다시 시작하세요.
The server will print a line like SQS ARNs: arn:minio:sqs::1:mqtt at start-up if there were no errors.
오류가 없는 경우 서버는 시작 시 SQS ARN: arn:minio:sqs::1:mqtt와 같은 라인을 인쇄합니다.
mc admin config set myminio < /tmp/myconfig
MinIO supports any MQTT server that supports MQTT 3.1 or 3.1.1 and can connect to them over TCP, TLS, or a Websocket connection using tcp://, tls://, or ws:// respectively as the scheme for the broker url.
MinIO는 MQTT 3.1 또는 3.1.1을 지원하는 모든 MQTT 서버를 지원하며 브로커 url의 구성표로 각각 tcp://, tls:// 또는 ws://를 사용하여 TCP, TLS 또는 Websocket 연결을 통해 서버에 연결할 수 있습니다.
See the Go Client documentation for more information.
자세한 내용은 Go 클라이언트 문서를 참조하세요.
Note that, you can add as many MQTT server endpoint configurations as needed by providing an identifier (like "1" in the example above) for the MQTT instance and an object of per-server configuration parameters.
MQTT 인스턴스에 대한 식별자 (예: 위 예의 "1")와 서버별 구성 매개변수의 객체를 제공하여 필요한 만큼 MQTT 서버 엔드포인트 구성을 추가할 수 있습니다.
Step 2: Enable bucket notification using MinIO client
2 단계: MinIO 클라이언트를 사용하여 버킷 알림 활성화
We will enable bucket event notification to trigger whenever a JPEG image is uploaded or deleted images bucket on myminio server. Here ARN value is arn:minio:sqs::1:mqtt.
myminio 서버에 JPEG 이미지가 업로드되거나 이미지 버킷이 삭제될 때마다 버킷 이벤트 알림이 트리거되도록 활성화하겠습니다. 여기서 ARN 값은 arn:minio:sqs::1:mqtt입니다.
mc mb myminio/images
mc event add myminio/images arn:minio:sqs::1:mqtt --suffix .jpg
mc event list myminio/images
arn:minio:sqs::1:amqp s3:ObjectCreated:*,s3:ObjectRemoved:* Filter: suffix=”.jpg”
Step 3: Test on MQTT
3 단계: MQTT에서 테스트
The python program below waits on mqtt topic /minio and prints event notifications on the console. We use paho-mqtt library to do this.
아래 Python 프로그램은 mqtt topic /minio를 기다리고 콘솔에 이벤트 알림을 인쇄합니다. 이를 위해 paho-mqtt 라이브러리를 사용합니다.
#!/usr/bin/env python3
from __future__ import print_function
import paho.mqtt.client as mqtt
# This is the Subscriber
# 구독자입니다
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
[@E # qos level is set to 1 @E]
[@K # qos 레벨은 1로 설정됩니다 @K]
client.subscribe("minio", 1)
def on_message(client, userdata, msg):
print(msg.payload)
# client_id is a randomly generated unique ID for the mqtt broker to identify the connection.
# client_id는 연결을 식별하기 위해 mqtt 브로커에 대해 무작위로 생성된 고유 ID입니다.
client = mqtt.Client(client_id="myclientid",clean_session=False)
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost",1883,60)
client.loop_forever()
Execute this example python program to watch for MQTT events on the console.
이 예제 Python 프로그램을 실행하여 콘솔에서 MQTT 이벤트를 감시하세요.
python mqtt.py
Open another terminal and upload a JPEG image into images bucket.
다른 터미널을 열고 JPEG 이미지를 이미지 버킷에 업로드하세요.
mc cp myphoto.jpg myminio/images
You should receive the following event notification via MQTT once the upload completes.
업로드가 완료되면 MQTT를 통해 다음 이벤트 알림을 받아야 합니다.
python mqtt.py
{“Records”:[{“eventVersion”:”2.0",”eventSource”:”aws:s3",”awsRegion”:”",”eventTime”:”2016–09–08T22:34:38.226Z”,”eventName”:”s3:ObjectCreated:Put”,”userIdentity”:{“principalId”:”minio”},”requestParameters”:{“sourceIPAddress”:”10.1.10.150:44576"},”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”:”147279EAF9F40933"}}}],”level”:”info”,”msg”:””,”time”:”2016–09–08T15:34:38–07:00"}
Publish MinIO events via Elasticsearch
Elasticsearch를 통해 MinIO 이벤트 게시
Install Elasticsearch server.
Elasticsearch 서버를 설치합니다.
This notification target supports two formats: namespace and access.
이 알림 대상은 네임스페이스와 액세스라는 두 가지 형식을 지원합니다.
When the namespace format is used, MinIO synchronizes objects in the bucket with documents in the index.
네임스페이스 형식이 사용되면 MinIO는 버킷의 객체를 인덱스의 문서와 동기화합니다.
For each event in the MinIO, the server creates a document with the bucket and object name from the event as the document ID. Other details of the event are stored in the body of the document.
MinIO의 각 이벤트에 대해 서버는 이벤트의 버킷 및 객체 이름을 문서 ID로 사용하여 문서를 생성합니다. 이벤트의 기타 세부사항은 문서 본문에 저장됩니다.
Thus if an existing object is over-written in MinIO, the corresponding document in the Elasticsearch index is updated. If an object is deleted, the corresponding document is deleted from the index.
따라서 MinIO에서 기존 객체를 덮어쓰면 Elasticsearch 인덱스의 해당 문서가 업데이트됩니다. 객체가 삭제되면 해당 문서가 인덱스에서 삭제됩니다.
When the access format is used, MinIO appends events as documents in an Elasticsearch index.
액세스 형식이 사용되면 MinIO는 이벤트를 Elasticsearch 인덱스의 문서로 추가합니다.
For each event, a document with the event details, with the timestamp of document set to the event's timestamp is appended to an index.
각 이벤트에 대해 이벤트 세부정보가 포함된 문서가 이벤트의 타임스탬프로 설정된 문서의 타임스탬프와 함께 인덱스에 추가됩니다.
The ID of the documented is randomly generated by Elasticsearch. No documents are deleted or modified in this format.
문서화된 ID는 Elasticsearch에 의해 무작위로 생성됩니다. 이 형식에서는 문서가 삭제되거나 수정되지 않습니다.
The steps below show how to use this notification target in namespace format. The other format is very similar and is omitted for brevity.
아래 단계에서는 이 알림 대상을 네임스페이스 형식으로 사용하는 방법을 보여줍니다. 다른 형식은 매우 유사하므로 간결성을 위해 생략되었습니다.
Step 1: Ensure minimum requirements are met
1 단계: 최소 요구 사항이 충족되는지 확인
MinIO requires a 5.x series version of Elasticsearch. This is the latest major release series. Elasticsearch provides version upgrade migration guidelines here.
MinIO에는 Elasticsearch 5.x 시리즈 버전이 필요합니다. 이것은 최신 주요 릴리스 시리즈입니다. Elasticsearch는 여기에서 버전 업그레이드 마이그레이션 지침을 제공합니다.
Step 2: Add Elasticsearch endpoint to MinIO
2 단계: MinIO에 Elasticsearch 엔드포인트 추가
The MinIO server configuration file is stored on the backend in json format. The Elasticsearch configuration is located in the elasticsearch key under the notify top-level key.
MinIO 서버 구성 파일은 json 형식으로 백엔드에 저장됩니다. Elasticsearch 구성은 알림 최상위 키 아래의 elasticsearch 키에 있습니다.
Create a configuration key-value pair here for your Elasticsearch instance. The key is a name for your Elasticsearch endpoint, and the value is a collection of key-value parameters described in the table below.
여기에서 Elasticsearch 인스턴스에 대한 구성 키-값 쌍을 생성하세요. 키는 Elasticsearch 엔드포인트의 이름이고, 값은 아래 표에 설명된 키-값 매개변수의 컬렉션입니다.
Parameter
Type
Description
설명
enable
bool
(Required) Is this server endpoint configuration active/enabled?
(필수) 이 서버 엔드포인트 구성이 활성화되어 있습니까/사용가능합니까?
format
string
(Required) Either namespace or access.
(필수) 네임스페이스 또는 액세스입니다.
url
string
(Required) The Elasticsearch server's address, with optional authentication info. For example: http://localhost:9200 or with authentication info http://elastic:MagicWord@127.0.0.1:9200.
(필수) 선택적 인증 정보가 포함된 Elasticsearch 서버의 주소입니다. 예: http://localhost:9200 또는 인증 정보 http://elastic:MagicWord@127.0.0.1:9200.
index
string
(Required) The name of an Elasticsearch index in which MinIO will store documents.
(필수) MinIO가 문서를 저장할 Elasticsearch 인덱스의 이름입니다.
queueDir
string
Persistent store for events when Elasticsearch broker is offline
Elasticsearch 브로커가 오프라인일 때 이벤트에 대한 영구 저장소
queueLimit
int
Set the maximum event limit for the persistent store. The default limit is 10000
영구 저장소에 대한 최대 이벤트 제한을 설정합니다. 기본 한도는 10000입니다
An example of Elasticsearch configuration is as follows:
Elasticsearch 구성의 예는 다음과 같습니다:
"elasticsearch": {
"1": {
"enable": true,
"format": "namespace",
"url": "http://127.0.0.1:9200",
"index": "minio_events",
"queueDir": "",
"queueLimit": 0
}
},
MinIO supports persistent event store. The persistent store will backup events when the Elasticsearch broker goes offline and replays it when the broker comes back online.
MinIO는 지속적인 이벤트 저장소를 지원합니다. 영구 저장소는 Elasticsearch 브로커가 오프라인이 될 때 이벤트를 백업하고 브로커가 다시 온라인이 되면 이를 재생합니다.
The event store can be configured by setting the directory path in queueDir field and the maximum limit of events in the queueDir in queueLimit field.
queueDir 필드에 디렉터리 경로를 설정하고 queueLimit 필드의 queueDir에 최대 이벤트 제한을 설정하여 이벤트 저장소를 구성할 수 있습니다.
For eg, the queueDir can be /home/events and queueLimit can be 1000. By default, the queueLimit is set to 10000.
예를 들어, queueDir은 /home/events이고 queueLimit는 1000일 수 있습니다. 기본적으로 queueLimit은 10000으로 설정됩니다.
If Elasticsearch has authentication enabled, the credentials can be supplied to MinIO via the url parameter formatted as PROTO://USERNAME:PASSWORD@ELASTICSEARCH_HOST:PORT.
Elasticsearch에서 인증이 활성화된 경우 PROTO://USERNAME:PASSWORD@ELASTICSEARCH_HOST:PORT 형식의 url 매개변수를 통해 자격 증명을 MinIO에 제공할 수 있습니다.
To update the configuration, use mc admin config get command to get the current configuration file for the minio deployment in json format, and save it locally.
구성을 업데이트하려면 mc admin config get 명령을 사용하여 minio 배포에 대한 현재 구성 파일을 json 형식으로 가져와 로컬에 저장합니다.
mc admin config get myminio/ > /tmp/myconfig
After updating the Elasticsearch configuration in /tmp/myconfig , use mc admin config set command to update the configuration for the deployment. Restart the MinIO server to put the changes into effect.
/tmp/myconfig에서 Elasticsearch 구성을 업데이트한 후 mc admin config set 명령을 사용하여 배포 구성을 업데이트합니다. 변경 사항을 적용하려면 MinIO 서버를 다시 시작하세요.
The server will print a line like SQS ARNs: arn:minio:sqs::1:elasticsearch at start-up if there were no errors.
오류가 없는 경우 서버는 시작 시 SQS ARNs: arn:minio:sqs::1:elasticsearch와 같은 라인을 인쇄합니다.
mc admin config set myminio < /tmp/myconfig
Note that, you can add as many Elasticsearch server endpoint configurations as needed by providing an identifier (like "1" in the example above) for the Elasticsearch instance and an object of per-server configuration parameters.
Elasticsearch 인스턴스에 대한 식별자 (예: 위 예의 "1")와 서버별 구성 매개변수의 객체를 제공하여 필요한 만큼 Elasticsearch 서버 엔드포인트 구성을 추가할 수 있습니다.
Step 3: Enable bucket notification using MinIO client
3 단계: MinIO 클라이언트를 사용하여 버킷 알림 활성화
We will now enable bucket event notifications on a bucket named images. Whenever a JPEG image is created/overwritten, a new document is added or an existing document is updated in the Elasticsearch index configured above.
이제 이미지라는 버킷에서 버킷 이벤트 알림을 활성화하겠습니다. JPEG 이미지를 생성/덮어쓸 때마다 위에서 구성한 Elasticsearch 인덱스에 새 문서가 추가되거나 기존 문서가 업데이트됩니다.
When an existing object is deleted, the corresponding document is deleted from the index. Thus, the rows in the Elasticsearch index, reflect the .jpg objects in the images bucket.
기존 객체가 삭제되면 해당 문서가 인덱스에서 삭제됩니다. 따라서 Elasticsearch 인덱스의 행은 이미지 버킷의 .jpg 객체를 반영합니다.
To configure this bucket notification, we need the ARN printed by MinIO in the previous step. Additional information about ARN is available here.
이 버킷 알림을 구성하려면 이전 단계에서 MinIO가 인쇄한 ARN이 필요합니다. ARN에 대한 추가 정보는 여기에서 확인할 수 있습니다.
With the mc tool, the configuration is very simple to add. Let us say that the MinIO server is aliased as myminio in our mc configuration. Execute the following:
mc 도구를 사용하면 구성을 추가하는 것이 매우 간단합니다. mc 구성에서 MinIO 서버의 별칭이 myminio라고 가정해 보겠습니다. 다음을 실행합니다.
mc mb myminio/images
mc event add myminio/images arn:minio:sqs::1:elasticsearch --suffix .jpg
mc event list myminio/images
arn:minio:sqs::1:elasticsearch s3:ObjectCreated:*,s3:ObjectRemoved:* Filter: suffix=”.jpg”
Step 4: Test on Elasticsearch
4 단계: Elasticsearch에서 테스트
Upload a JPEG image into images bucket.
JPEG 이미지를 이미지 버킷에 업로드합니다.
mc cp myphoto.jpg myminio/images
Use curl to view contents of minio_events index.
minio_events 인덱스의 내용을 보려면 컬을 사용하십시오.
curl "http://localhost:9200/minio_events/_search?pretty=true"
{
"took" : 40,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [
{
"_index" : "minio_events",
"_type" : "event",
"_id" : "images/myphoto.jpg",
"_score" : 1.0,
"_source" : {
"Records" : [
{
"eventVersion" : "2.0",
"eventSource" : "minio:s3",
"awsRegion" : "",
"eventTime" : "2017-03-30T08:00:41Z",
"eventName" : "s3:ObjectCreated:Put",
"userIdentity" : {
"principalId" : "minio"
},
"requestParameters" : {
"sourceIPAddress" : "127.0.0.1:38062"
},
"responseElements" : {
"x-amz-request-id" : "14B09A09703FC47B",
"x-minio-origin-endpoint" : "http://192.168.86.115:9000"
},
"s3" : {
"s3SchemaVersion" : "1.0",
"configurationId" : "Config",
"bucket" : {
"name" : "images",
"ownerIdentity" : {
"principalId" : "minio"
},
"arn" : "arn:aws:s3:::images"
},
"object" : {
"key" : "myphoto.jpg",
"size" : 6474,
"eTag" : "a3410f4f8788b510d6f19c5067e60a90",
"sequencer" : "14B09A09703FC47B"
}
},
"source" : {
"host" : "127.0.0.1",
"port" : "38062",
"userAgent" : "MinIO (linux; amd64) minio-go/2.0.3 mc/2017-02-15T17:57:25Z"
}
}
]
}
}
]
}
}
This output shows that a document has been created for the event in Elasticsearch.
이 출력은 Elasticsearch의 이벤트에 대한 문서가 생성되었음을 보여줍니다.
Here we see that the document ID is the bucket and object name. In case access format was used, the document ID would be automatically generated by Elasticsearch.
여기서는 문서 ID가 버킷 및 객체 이름임을 알 수 있습니다. 액세스 형식이 사용된 경우 문서 ID는 Elasticsearch에 의해 자동으로 생성됩니다.
Publish MinIO events via Redis
Redis를 통해 MinIO 이벤트 게시
Install Redis server. For illustrative purposes, we have set the database password as "yoursecret".
Redis 서버를 설치합니다. 설명을 위해 데이터베이스 비밀번호를 "yoursecret"으로 설정했습니다.
This notification target supports two formats: namespace and access. When the namespace format is used, MinIO synchronizes objects in the bucket with entries in a hash.
이 알림 대상은 네임스페이스와 액세스라는 두 가지 형식을 지원합니다. 네임스페이스 형식이 사용하면 MinIO는 버킷의 객체를 해시의 항목과 동기화합니다.
For each entry, the key is formatted as "bucketName/objectName" for an object that exists in the bucket, and the value is the JSON-encoded event data about the operation that created/replaced the object in MinIO.
각 항목에 대해 버킷에 존재하는 객체에 대한 키 형식은 "bucketName/objectName"이며, 값은 MinIO에서 객체를 생성/교체한 작업에 대한 JSON으로 인코딩된 이벤트 데이터입니다.
When objects are updated or deleted, the corresponding entry in the hash is also updated or deleted. When the access format is used, MinIO appends events to a list using RPUSH.
객체가 업데이트되거나 삭제되면 해시의 해당 항목도 업데이트되거나 삭제됩니다. 액세스 형식이 사용되면 MinIO는 RPUSH를 사용하여 목록에 이벤트를 추가합니다.
Each item in the list is a JSON encoded list with two items, where the first item is a timestamp string, and the second item is a JSON object containing event data about the operation that happened in the bucket.
목록의 각 항목은 두 개의 항목이 포함된 JSON 인코딩 목록입니다. 여기서 첫 번째 항목은 타임스탬프 문자열이고 두 번째 항목은 버킷에서 발생한 작업에 대한 이벤트 데이터가 포함된 JSON 객체입니다.
No entries appended to the list are updated or deleted by MinIO in this format. The steps below show how to use this notification target in namespace and access format.
목록에 추가된 항목은 이 형식으로 MinIO에 의해 업데이트되거나 삭제되지 않습니다. 아래 단계에서는 네임스페이스 및 액세스 형식에서 이 알림 대상을 사용하는 방법을 보여줍니다.
Step 1: Add Redis endpoint to MinIO
1 단계: MinIO에 Redis 엔드포인트 추가
The MinIO server configuration file is stored on the backend in json format. The Redis configuration is located in the redis key under the notify top-level key. Create a configuration key-value pair here for your Redis instance.
MinIO 서버 구성 파일은 json 형식으로 백엔드에 저장됩니다. Redis 구성은 알림 최상위 키 아래의 redis 키에 있습니다. Redis 인스턴스에 대한 구성 키-값 쌍을 여기에서 생성합니다.
The key is a name for your Redis endpoint, and the value is a collection of key-value parameters described in the table below.
키는 Redis 엔드포인트의 이름이고, 값은 아래 표에 설명된 키-값 매개변수의 컬렉션입니다.
Parameter
Type
Description
설명
enable
bool
(Required) Is this server endpoint configuration active/enabled?
(Required) 이 서버 엔드포인트 구성이 활성화되어 있습니까 /사용가능합니까?
format
string
(Required) Either namespace or access.
(Required) 네임스페이스 또는 액세스입니다.
address
string
(Required) The Redis server's address. For example: localhost:6379.
(Required) Redis 서버의 주소입니다. 예를 들어: 로컬호스트:6379.
password
string
(Optional) The Redis server's password.
(Optional) Redis 서버의 패스워드입니다.
key
string
(Required) The name of the redis key under which events are stored. A hash is used in case of namespace format and a list in case of access format.
(Required) 이벤트가 저장되는 redis 키의 이름입니다. 네임스페이스 형식의 경우 해시가 사용하고 액세스 형식의 경우 목록을 사용합니다.
An example of Redis configuration is as follows:
Redis 구성의 예는 다음과 같습니다.
"redis": {
"1": {
"enable": true,
"format": "namespace",
"address": "127.0.0.1:6379",
"password": "yoursecret",
"key": "bucketevents",
"queueDir": "",
"queueLimit": 0
}
}
MinIO supports persistent event store. The persistent store will backup events when the Redis broker goes offline and replays it when the broker comes back online.
MinIO는 지속적인 이벤트 저장소를 지원합니다. 영구 저장소는 Redis 브로커가 오프라인이 될 때 이벤트를 백업하고 브로커가 다시 온라인이 되면 이를 재생합니다.
The event store can be configured by setting the directory path in queueDir field and the maximum limit of events in the queueDir in queueLimit field.
queueDir 필드에 디렉터리 경로를 설정하고 queueLimit 필드의 queueDir에 최대 이벤트 제한을 설정하여 이벤트 저장소를 구성할 수 있습니다.
For eg, the queueDir can be /home/events and queueLimit can be 1000. By default, the queueLimit is set to 10000.
예를 들어, queueDir은 /home/events이고 queueLimit는 1000일 수 있습니다. 기본적으로 queueLimit은 10000으로 설정됩니다.
To update the configuration, use mc admin config get command to get the current configuration file for the minio deployment in json format, and save it locally.
구성을 업데이트하려면 mc admin config get 명령을 사용하여 minio 배포에 대한 현재 구성 파일을 json 형식으로 가져와 로컬에 저장합니다.
mc admin config get myminio/ > /tmp/myconfig
After updating the Redis configuration in /tmp/myconfig , use mc admin config set command to update the configuration for the deployment. Restart the MinIO server to put the changes into effect.
/tmp/myconfig에서 Redis 구성을 업데이트한 후 mc admin config set 명령을 사용하여 배포 구성을 업데이트합니다. 변경 사항을 적용하려면 MinIO 서버를 다시 시작하세요.
The server will print a line like SQS ARNs: arn:minio:sqs::1:redis at start-up if there were no errors.
오류가 없는 경우 서버는 시작 시 SQS ARN: arn:minio:sqs::1:redis와 같은 줄을 인쇄합니다.
mc admin config set myminio < /tmp/myconfig
Note that, you can add as many Redis server endpoint configurations as needed by providing an identifier (like "1" in the example above) for the Redis instance and an object of per-server configuration parameters.
Redis 인스턴스에 대한 식별자 (예: 위 예의 "1")와 서버별 구성 매개변수의 객체를 제공하여 필요한 만큼 Redis 서버 엔드포인트 구성을 추가할 수 있습니다.
Step 2: Enable bucket notification using MinIO client
2 단계: MinIO 클라이언트를 사용하여 버킷 알림 활성화
We will now enable bucket event notifications on a bucket named images. Whenever a JPEG image is created/overwritten, a new key is added or an existing key is updated in the Redis hash configured above.
이제 이미지라는 버킷에서 버킷 이벤트 알림을 활성화하겠습니다. JPEG 이미지가 생성되거나 덮어쓰여질 때마다 위에 구성된 Redis 해시에 새 키가 추가되거나 기존 키가 업데이트됩니다.
When an existing object is deleted, the corresponding key is deleted from the Redis hash. Thus, the rows in the Redis hash, reflect the .jpg objects in the images bucket.
기존 객체가 삭제되면 해당 키가 Redis 해시에서 삭제됩니다. 따라서 Redis 해시의 행은 이미지 버킷의 .jpg 객체를 반영합니다.
To configure this bucket notification, we need the ARN printed by MinIO in the previous step. Additional information about ARN is available here.
이 버킷 알림을 구성하려면 이전 단계에서 MinIO가 인쇄한 ARN이 필요합니다. ARN에 대한 추가 정보는 여기에서 확인할 수 있습니다.
With the mc tool, the configuration is very simple to add. Let us say that the MinIO server is aliased as myminio in our mc configuration. Execute the following:
mc 도구를 사용하면 구성을 추가하는 것이 매우 간단합니다. mc 구성에서 MinIO 서버의 별칭이 myminio라고 가정해 보겠습니다. 다음을 실행합니다.
mc mb myminio/images
mc event add myminio/images arn:minio:sqs::1:redis --suffix .jpg
mc event list myminio/images
arn:minio:sqs::1:redis s3:ObjectCreated:*,s3:ObjectRemoved:* Filter: suffix=”.jpg”
Step 3: Test on Redis
3 단계: Redis에서 테스트
Start the redis-cli Redis client program to inspect the contents in Redis. Run the monitor Redis command. This prints each operation performed on Redis as it occurs.
redis-cli Redis 클라이언트 프로그램을 시작하여 Redis의 콘텐츠를 검사합니다. 모니터 Redis 명령을 실행합니다. 이는 Redis에서 수행된 각 작업이 발생하는 대로 인쇄됩니다.
redis-cli -a yoursecret
127.0.0.1:6379> monitor
OK
Open another terminal and upload a JPEG image into images bucket.
다른 터미널을 열고 JPEG 이미지를 이미지 버킷에 업로드하세요.
mc cp myphoto.jpg myminio/images
In the previous terminal, you will now see the operation that MinIO performs on Redis:
이전 터미널에서는 이제 MinIO가 Redis에서 수행하는 작업을 볼 수 있습니다.
127.0.0.1:6379> monitor
OK
1490686879.650649 [0 172.17.0.1:44710] "PING"
1490686879.651061 [0 172.17.0.1:44710] "HSET" "minio_events" "images/myphoto.jpg" "{\"Records\":[{\"eventVersion\":\"2.0\",\"eventSource\":\"minio:s3\",\"awsRegion\":\"\",\"eventTime\":\"2017-03-28T07:41:19Z\",\"eventName\":\"s3:ObjectCreated:Put\",\"userIdentity\":{\"principalId\":\"minio\"},\"requestParameters\":{\"sourceIPAddress\":\"127.0.0.1:52234\"},\"responseElements\":{\"x-amz-request-id\":\"14AFFBD1ACE5F632\",\"x-minio-origin-endpoint\":\"http://192.168.86.115:9000\"},\"s3\":{\"s3SchemaVersion\":\"1.0\",\"configurationId\":\"Config\",\"bucket\":{\"name\":\"images\",\"ownerIdentity\":{\"principalId\":\"minio\"},\"arn\":\"arn:aws:s3:::images\"},\"object\":{\"key\":\"myphoto.jpg\",\"size\":2586,\"eTag\":\"5d284463f9da279f060f0ea4d11af098\",\"sequencer\":\"14AFFBD1ACE5F632\"}},\"source\":{\"host\":\"127.0.0.1\",\"port\":\"52234\",\"userAgent\":\"MinIO (linux; amd64) minio-go/2.0.3 mc/2017-02-15T17:57:25Z\"}}]}"
Here we see that MinIO performed HSET on minio_events key.
여기서는 MinIO가 minio_events 키에 대해 HSET을 수행한 것을 볼 수 있습니다.
In case, access format was used, then minio_events would be a list, and the MinIO server would have performed an RPUSH to append to the list. A consumer of this list would ideally use BLPOP to remove list items from the left-end of the list.
액세스 형식이 사용된 경우, minio_events는 목록이 되고 MinIO 서버는 RPUSH를 수행하여 목록에 추가합니다. 이 목록의 소비자는 이상적으로 BLPOP을 사용하여 목록의 왼쪽 끝에서 목록 항목을 제거합니다.
Publish MinIO events via NATS
NATS를 통해 MinIO 이벤트 게시
Install NATS from here.
여기에서 NATS를 설치하세요.
Step 1: Add NATS endpoint to MinIO
1 단계: MinIO에 NATS 엔드포인트 추가
The NATS configuration block in config.json is as follows:
config.json의 NATS 구성 블록은 다음과 같습니다.
"nats": {
"1": {
"enable": true,
"address": "0.0.0.0:4222",
"subject": "bucketevents",
"username": "yourusername",
"password": "yoursecret",
"token": "",
"secure": false,
"pingInterval": 0,
"queueDir": "",
"queueLimit": 0,
"streaming": {
"enable": false,
"clusterID": "",
"async": false,
"maxPubAcksInflight": 0
}
}
},
MinIO supports persistent event store. The persistent store will backup events when the NATS broker goes offline and replays it when the broker comes back online.
MinIO는 지속적인 이벤트 저장소를 지원합니다. 영구 저장소는 NATS 브로커가 오프라인이 될 때 이벤트를 백업하고 브로커가 다시 온라인이 되면 이를 재생합니다.
The event store can be configured by setting the directory path in queueDir field and the maximum limit of events in the queueDir in queueLimit field.
queueDir 필드에 디렉터리 경로를 설정하고 queueLimit 필드의 queueDir에 최대 이벤트 제한을 설정하여 이벤트 저장소를 구성할 수 있습니다.
For eg, the queueDir can be /home/events and queueLimit can be 1000. By default, the queueLimit is set to 10000.
예를 들어, queueDir은 /home/events이고 queueLimit는 1000일 수 있습니다. 기본적으로 queueLimit은 10000으로 설정됩니다.
To update the configuration, use mc admin config get command to get the current configuration file for the minio deployment in json format, and save it locally.
구성을 업데이트하려면 mc admin config get 명령을 사용하여 minio 배포에 대한 현재 구성 파일을 json 형식으로 가져와 로컬에 저장합니다.
mc admin config get myminio/ > /tmp/myconfig
After updating the NATS configuration in /tmp/myconfig , use mc admin config set command to update the configuration for the deployment. Restart MinIO server to reflect config changes. bucketevents is the subject used by NATS in this example.
/tmp/myconfig에서 NATS 구성을 업데이트한 후 mc admin config set 명령을 사용하여 배포 구성을 업데이트합니다. 구성 변경 사항을 반영하려면 MinIO 서버를 다시 시작하세요. bucketevents는 이 예에서 NATS가 사용하는 주제입니다.
mc admin config set myminio < /tmp/myconfig
MinIO server also supports NATS Streaming mode that offers additional functionality like At-least-once-delivery, and Publisher rate limiting. To configure MinIO server to send notifications to NATS Streaming server, update the MinIO server configuration file as follows:
MinIO 서버는 최소 한 번 전달 및 게시자 속도 제한과 같은 추가 기능을 제공하는 NATS 스트리밍 모드도 지원합니다. NATS 스트리밍 서버에 알림을 보내도록 MinIO 서버를 구성하려면 다음과 같이 MinIO 서버 구성 파일을 업데이트하세요.
"nats": {
"1": {
"enable": true,
"address": "0.0.0.0:4222",
"subject": "bucketevents",
"username": "yourusername",
"password": "yoursecret",
"token": "",
"secure": false,
"pingInterval": 0,
"queueDir": "",
"queueLimit": 0,
"streaming": {
"enable": true,
"clusterID": "test-cluster",
"async": true,
"maxPubAcksInflight": 10
}
}
},
Read more about sections clusterID, clientID on NATS documentation. Section maxPubAcksInflight is explained here.
NATS 설명서에서 ClusterID, clientID 섹션에 대해 자세히 알아보세요. maxPubAcksInflight 섹션은 여기에 설명되어 있습니다.
Step 2: Enable bucket notification using MinIO client
2 단계: MinIO 클라이언트를 사용하여 버킷 알림 활성화
We will enable bucket event notification to trigger whenever a JPEG image is uploaded or deleted from images bucket on myminio server.
myminio 서버의 이미지 버킷에서 JPEG 이미지를 업로드되거나 삭제될 때마다 버킷 이벤트 알림이 트리거되도록 활성화하겠습니다.
Here ARN value is arn:minio:sqs::1:nats. To understand more about ARN please follow AWS ARN documentation.
여기서 ARN 값은 arn:minio:sqs::1:nats입니다. ARN에 대해 자세히 알아보려면 AWS ARN 설명서를 따르십시오.
mc mb myminio/images
mc event add myminio/images arn:minio:sqs::1:nats --suffix .jpg
mc event list myminio/images
arn:minio:sqs::1:nats s3:ObjectCreated:*,s3:ObjectRemoved:* Filter: suffix=”.jpg”
Step 3: Test on NATS
3 단계: NATS에서 테스트
If you use NATS server, check out this sample program below to log the bucket notification added to NATS.
NATS 서버를 사용하는 경우, 아래 샘플 프로그램을 확인하여 NATS에 추가된 버킷 알림을 기록하세요.
package main
// Import Go and NATS packages
// Go 및 NATS 패키지 가져오기
import (
"log"
"runtime"
"github.com/nats-io/nats.go"
)
func main() {
// Create server connection
// 서버 연결 생성
natsConnection, _ := nats.Connect("nats://yourusername:yoursecret@localhost:4222")
log.Println("Connected")
// Subscribe to subject
// 주제 구독
log.Printf("Subscribing to subject 'bucketevents'\n")
natsConnection.Subscribe("bucketevents", func(msg *nats.Msg) {
// Handle the message
// 메시지 처리
log.Printf("Received message '%s\n", string(msg.Data)+"'")
})
// Keep the connection alive
// 연결을 유지합니다
runtime.Goexit()
}
go run nats.go
2016/10/12 06:39:18 Connected
2016/10/12 06:39:18 Subscribing to subject 'bucketevents'
Open another terminal and upload a JPEG image into images bucket.
다른 터미널을 열고 JPEG 이미지를 이미지 버킷에 업로드하세요.
mc cp myphoto.jpg myminio/images
The example nats.go program prints event notification to console.
예제 nats.go 프로그램은 이벤트 알림을 콘솔에 인쇄합니다.
go run nats.go
2016/10/12 06:51:26 Connected
2016/10/12 06:51:26 Subscribing to subject 'bucketevents'
2016/10/12 06:51:33 Received message '{"EventType":"s3:ObjectCreated:Put","Key":"images/myphoto.jpg","Records":[{"eventVersion":"2.0","eventSource":"aws:s3","awsRegion":"","eventTime":"2016-10-12T13:51:33Z","eventName":"s3:ObjectCreated:Put","userIdentity":{"principalId":"minio"},"requestParameters":{"sourceIPAddress":"[::1]:57106"},"responseElements":{},"s3":{"s3SchemaVersion":"1.0","configurationId":"Config","bucket":{"name":"images","ownerIdentity":{"principalId":"minio"},"arn":"arn:aws:s3:::images"},"object":{"key":"myphoto.jpg","size":56060,"eTag":"1d97bf45ecb37f7a7b699418070df08f","sequencer":"147CCD1AE054BFD0"}}}],"level":"info","msg":"","time":"2016-10-12T06:51:33-07:00"}
If you use NATS Streaming server, check out this sample program below to log the bucket notification added to NATS.
NATS 스트리밍 서버를 사용하는 경우 아래 샘플 프로그램을 확인하여 NATS에 추가된 버킷 알림을 기록하세요.
package main
// Import Go and NATS packages
// Go 및 NATS 패키지 가져오기
import (
"fmt"
"runtime"
"github.com/nats-io/stan.go"
)
func main() {
var stanConnection stan.Conn
subscribe := func() {
fmt.Printf("Subscribing to subject 'bucketevents'\n")
stanConnection.Subscribe("bucketevents", func(m *stan.Msg) {
// Handle the message
// 메시지 처리
fmt.Printf("Received a message: %s\n", string(m.Data))
})
}
stanConnection, _ = stan.Connect("test-cluster", "test-client", stan.NatsURL("nats://yourusername:yoursecret@0.0.0.0:4222"), stan.SetConnectionLostHandler(func(c stan.Conn, _ error) {
go func() {
for {
// Reconnect if the connection is lost.
// 연결이 끊어지면 다시 연결합니다.
if stanConnection == nil || stanConnection.NatsConn() == nil || !stanConnection.NatsConn().IsConnected() {
stanConnection, _ = stan.Connect("test-cluster", "test-client", stan.NatsURL("nats://yourusername:yoursecret@0.0.0.0:4222"), stan.SetConnectionLostHandler(func(c stan.Conn, _ error) {
if c.NatsConn() != nil {
c.NatsConn().Close()
}
_ = c.Close()
}))
if stanConnection != nil {
subscribe()
}
}
}
}()
}))
// Subscribe to subject
// 주제 구독
subscribe()
// Keep the connection alive
// 연결을 유지합니다
runtime.Goexit()
}
go run nats.go
2017/07/07 11:47:40 Connected
2017/07/07 11:47:40 Subscribing to subject 'bucketevents'
Open another terminal and upload a JPEG image into images bucket.
다른 터미널을 열고 JPEG 이미지를 이미지 버킷에 업로드하세요.
mc cp myphoto.jpg myminio/images
The example nats.go program prints event notification to console.
예제 nats.go 프로그램은 이벤트 알림을 콘솔에 인쇄합니다.
Received a message:
메시지를 받았습니다:
{"EventType":"s3:ObjectCreated:Put","Key":"images/myphoto.jpg","Records":[{"eventVersion":"2.0","eventSource":"minio:s3","awsRegion":"","eventTime":"2017-07-07T18:46:37Z","eventName":"s3:ObjectCreated:Put","userIdentity":{"principalId":"minio"},"requestParameters":{"sourceIPAddress":"192.168.1.80:55328"},"responseElements":{"x-amz-request-id":"14CF20BD1EFD5B93","x-minio-origin-endpoint":"http://127.0.0.1:9000"},"s3":{"s3SchemaVersion":"1.0","configurationId":"Config","bucket":{"name":"images","ownerIdentity":{"principalId":"minio"},"arn":"arn:aws:s3:::images"},"object":{"key":"myphoto.jpg","size":248682,"eTag":"f1671feacb8bbf7b0397c6e9364e8c92","contentType":"image/jpeg","userDefined":{"content-type":"image/jpeg"},"versionId":"1","sequencer":"14CF20BD1EFD5B93"}},"source":{"host":"192.168.1.80","port":"55328","userAgent":"MinIO (linux; amd64) minio-go/2.0.4 mc/DEVELOPMENT.GOGET"}}],"level":"info","msg":"","time":"2017-07-07T11:46:37-07:00"}
Publish MinIO events via PostgreSQL
PostgreSQL을 통해 MinIO 이벤트 게시
Install PostgreSQL database server. For illustrative purposes, we have set the "postgres" user password as password and created a database called minio_events to store the events.
PostgreSQL 데이터베이스 서버를 설치합니다. 설명을 위해 "postgres" 사용자 패스워드를 비밀번호로 설정하고 이벤트를 저장하기 위해 minio_events라는 데이터베이스를 만들었습니다.
This notification target supports two formats: namespace and access. When the namespace format is used, MinIO synchronizes objects in the bucket with rows in the table.
이 알림 대상은 네임스페이스와 액세스라는 두 가지 형식을 지원합니다. 네임스페이스 형식이 사용되면 MinIO는 버킷의 객체를 테이블의 행과 동기화합니다.
It creates rows with two columns: key and value. The key is the bucket and object name of an object that exists in MinIO.
키와 값이라는 두 개의 열이 있는 행을 생성합니다. 키는 MinIO에 존재하는 객체의 버킷과 객체 이름입니다.
The value is JSON encoded event data about the operation that created/replaced the object in MinIO. When objects are updated or deleted, the corresponding row from this table is updated or deleted respectively.
값은 MinIO에서 객체를 생성/교체한 작업에 대한 JSON 인코딩 이벤트 데이터입니다. 객체가 업데이트되거나 삭제되면 이 테이블의 해당 행이 각각 업데이트되거나 삭제됩니다.
When the access format is used, MinIO appends events to a table. It creates rows with two columns: event_time and event_data.
액세스 형식이 사용되면 MinIO는 이벤트를 테이블에 추가합니다. event_time 및 event_data라는 두 개의 열이 있는 행을 생성합니다.
The event_time is the time at which the event occurred in the MinIO server. The event_data is the JSON encoded event data about the operation on an object. No rows are deleted or modified in this format.
event_time은 MinIO 서버에서 이벤트가 발생한 시간입니다. event_data는 객체 작업에 대한 JSON 인코딩 이벤트 데이터입니다. 이 형식에서는 행을 삭제하거나 수정하지 않습니다.
The steps below show how to use this notification target in namespace format. The other format is very similar and is omitted for brevity.
아래 단계에서는 이 알림 대상을 네임스페이스 형식으로 사용하는 방법을 보여줍니다. 다른 형식은 매우 유사하므로 간결성을 위해 생략되었습니다.
Step 1: Ensure minimum requirements are met
1 단계: 최소 요구 사항이 충족되는지 확인
MinIO requires PostgreSQL version 9.5 or above. MinIO uses the INSERT ON CONFLICT (aka UPSERT) feature, introduced in version 9.5 and the JSONB data-type introduced in version 9.4.
MinIO에는 PostgreSQL 버전 9.5 이상이 필요합니다. MinIO는 버전 9.5에 도입된 INSERT ON CONFLICT (일명 UPSERT) 기능과 버전 9.4에 도입된 JSONB 데이터 유형을 사용합니다.
Step 2: Add PostgreSQL endpoint to MinIO
2 단계: MinIO에 PostgreSQL 엔드포인트 추가
The MinIO server configuration file is stored on the backend in json format. The PostgreSQL configuration is located in the postgresql key under the notify top-level key.
MinIO 서버 구성 파일은 json 형식으로 백엔드에 저장됩니다. PostgreSQL 구성은 알림 최상위 키 아래의 postgresql 키에 있습니다.
Create a configuration key-value pair here for your PostgreSQL instance. The key is a name for your PostgreSQL endpoint, and the value is a collection of key-value parameters described in the table below.
여기에서 PostgreSQL 인스턴스에 대한 구성 키-값 쌍을 만듭니다. 키는 PostgreSQL 엔드포인트의 이름이고, 값은 아래 표에 설명된 키-값 매개변수의 컬렉션입니다.
Parameter
Type
Description
설명
enable
bool
(Required) Is this server endpoint configuration active/enabled?
(필수) 이 서버 엔드포인트 구성이 활성화되어 있습니까 /사용가능합니까?
format
string
(Required) Either namespace or access.
(필수) 네임스페이스 또는 액세스입니다.
connectionString
string
(Optional) Connection string parameters for the PostgreSQL server. Can be used to set sslmode for example.
(선택 사항) PostgreSQL 서버에 대한 연결 문자열 매개변수입니다. sslmode를 설정하는 데 사용할 수 있습니다.
table
string
(Required) Table name in which events will be stored/updated. If the table does not exist, the MinIO server creates it at start-up.
(필수) 이벤트가 저장/업데이트될 테이블 이름입니다. 테이블이 없으면 MinIO 서버는 시작 시 테이블을 생성합니다.
host
string
(Optional) Host name of the PostgreSQL server. Defaults to localhost. IPv6 host should be enclosed with [ and ]
(선택 사항) PostgreSQL 서버의 호스트 이름입니다. 기본값은 localhost입니다. IPv6 호스트는 [ 및 ]로 묶어야 합니다.
port
string
(Optional) Port on which to connect to PostgreSQL server. Defaults to 5432.
(선택 사항) PostgreSQL 서버에 연결할 포트입니다. 기본값은 5432입니다.
user
string
(Optional) Database user name. Defaults to user running the server process.
(선택 사항) 데이터베이스 사용자 이름입니다. 기본값은 서버 프로세스를 실행하는 사용자입니다.
password
string
(Optional) Database password.
(선택 사항) 데이터베이스 패스워드입니다.
database
string
(Optional) Database name.
(선택 사항) 데이터베이스 이름입니다.
An example of PostgreSQL configuration is as follows:
PostgreSQL 구성의 예는 다음과 같습니다.
"postgresql": {
"1": {
"enable": true,
"format": "namespace",
"connectionString": "sslmode=disable",
"table": "bucketevents",
"host": "127.0.0.1",
"port": "5432",
"user": "postgres",
"password": "password",
"database": "minio_events",
"queueDir": "",
"queueLimit": 0
}
}
MinIO supports persistent event store. The persistent store will backup events when the PostgreSQL connection goes offline and replays it when the broker comes back online.
MinIO는 지속적인 이벤트 저장소를 지원합니다. 영구 저장소는 PostgreSQL 연결이 오프라인이 되면 이벤트를 백업하고 브로커가 다시 온라인이 되면 이를 재생합니다.
The event store can be configured by setting the directory path in queueDir field and the maximum limit of events in the queueDir in queueLimit field.
queueDir 필드에 디렉터리 경로를 설정하고 queueLimit 필드의 queueDir에 최대 이벤트 제한을 설정하여 이벤트 저장소를 구성할 수 있습니다.
For eg, the queueDir can be /home/events and queueLimit can be 1000. By default, the queueLimit is set to 10000.
예를 들어, queueDir은 /home/events이고 queueLimit는 1000일 수 있습니다. 기본적으로 queueLimit은 10000으로 설정됩니다.
Note that for illustration here, we have disabled SSL. In the interest of security, for production this is not recommended.
여기에서는 설명을 위해 SSL을 비활성화했습니다. 보안상의 이유로 프로덕션에서는 권장되지 않습니다.
To update the configuration, use mc admin config get command to get the current configuration file for the minio deployment in json format, and save it locally.
구성을 업데이트하려면 mc admin config get 명령을 사용하여 minio 배포에 대한 현재 구성 파일을 json 형식으로 가져와 로컬에 저장합니다.
mc admin config get myminio/ > /tmp/myconfig
After updating the Postgres configuration in /tmp/myconfig, use mc admin config set command to update the configuration for the deployment.Restart the MinIO server to put the changes into effect.
/tmp/myconfig에서 Postgres 구성을 업데이트한 후 mc admin config set 명령을 사용하여 배포 구성을 업데이트합니다. MinIO 서버를 다시 시작하여 변경 사항을 적용합니다.
The server will print a line like SQS ARNs: arn:minio:sqs::1:postgresql at start-up if there were no errors.
오류가 없는 경우 서버는 시작 시 SQS ARN: arn:minio:sqs::1:postgresql과 같은 라인을 인쇄합니다.
mc admin config set myminio < /tmp/myconfig
Note that, you can add as many PostgreSQL server endpoint configurations as needed by providing an identifier (like "1" in the example above) for the PostgreSQL instance and an object of per-server configuration parameters.
PostgreSQL 인스턴스에 대한 식별자 (예: 위 예의 "1")와 서버별 구성 매개변수의 객체를 제공하여 필요한 만큼 PostgreSQL 서버 엔드포인트 구성을 추가할 수 있습니다.
Step 3: Enable bucket notification using MinIO client
3 단계: MinIO 클라이언트를 사용하여 버킷 알림 활성화
We will now enable bucket event notifications on a bucket named images. Whenever a JPEG image is created/overwritten, a new row is added or an existing row is updated in the PostgreSQL configured above.
이제 이미지라는 버킷에서 버킷 이벤트 알림을 활성화하겠습니다. JPEG 이미지가 생성되거나 덮어쓰여질 때마다 위에서 구성한 PostgreSQL에서 새 행이 추가되거나 기존 행이 업데이트됩니다.
When an existing object is deleted, the corresponding row is deleted from the PostgreSQL table. Thus, the rows in the PostgreSQL table, reflect the .jpg objects in the images bucket.
기존 객체가 삭제되면 해당 행이 PostgreSQL 테이블에서 삭제됩니다. 따라서 PostgreSQL 테이블의 행은 이미지 버킷의 .jpg 객체를 반영합니다.
To configure this bucket notification, we need the ARN printed by MinIO in the previous step. Additional information about ARN is available here.
이 버킷 알림을 구성하려면 이전 단계에서 MinIO가 인쇄한 ARN이 필요합니다. ARN에 대한 추가 정보는 여기에서 확인할 수 있습니다.
With the mc tool, the configuration is very simple to add. Let us say that the MinIO server is aliased as myminio in our mc configuration. Execute the following:
mc 도구를 사용하면 구성을 추가하는 것이 매우 간단합니다. mc 구성에서 MinIO 서버의 별칭이 myminio라고 가정해 보겠습니다. 다음을 실행합니다.
# Create bucket named `images` in myminio
# myminio에서`images`라는 버킷을 생성합니다.
mc mb myminio/images
# Add notification configuration on the `images` bucket using the MySQL ARN. The --suffix argument filters events.
# MySQL ARN을 사용하여`images` 버킷에 알림 구성을 추가합니다. --suffix 인수는 이벤트를 필터링합니다.
mc event add myminio/images arn:minio:sqs::1:postgresql --suffix .jpg
# Print out the notification configuration on the `images` bucket.
# `images` 버킷에 알림 구성을 인쇄합니다.
mc event list myminio/images
mc event list myminio/images
arn:minio:sqs::1:postgresql s3:ObjectCreated:*,s3:ObjectRemoved:* Filter: suffix=”.jpg”
Step 4: Test on PostgreSQL
4 단계: PostgreSQL에서 테스트
Open another terminal and upload a JPEG image into images bucket.
다른 터미널을 열고 JPEG 이미지를 이미지 버킷에 업로드하세요.
mc cp myphoto.jpg myminio/images
Open PostgreSQL terminal to list the rows in the bucketevents table.
PostgreSQL 터미널을 열어 bucketevents 테이블의 행을 나열합니다.
psql -h 127.0.0.1 -U postgres -d minio_events
minio_events=# select * from bucketevents;
key | value
--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
images/myphoto.jpg | {"Records": [{"s3": {"bucket": {"arn": "arn:aws:s3:::images", "name": "images", "ownerIdentity": {"principalId": "minio"}}, "object": {"key": "myphoto.jpg", "eTag": "1d97bf45ecb37f7a7b699418070df08f", "size": 56060, "sequencer": "147CE57C70B31931"}, "configurationId": "Config", "s3SchemaVersion": "1.0"}, "awsRegion": "", "eventName": "s3:ObjectCreated:Put", "eventTime": "2016-10-12T21:18:20Z", "eventSource": "aws:s3", "eventVersion": "2.0", "userIdentity": {"principalId": "minio"}, "responseElements": {}, "requestParameters": {"sourceIPAddress": "[::1]:39706"}}]}
(1 row)
Publish MinIO events via MySQL
MySQL을 통해 MinIO 이벤트 게시
Install MySQL from here. For illustrative purposes, we have set the root password as password and created a database called miniodb to store the events.
여기에서 MySQL을 설치하세요. 설명을 위해 루트 패스워드를 비밀번호로 설정하고 이벤트를 저장하기 위해 miniodb라는 데이터베이스를 만들었습니다.
This notification target supports two formats: namespace and access.
이 알림 대상은 네임스페이스와 액세스라는 두 가지 두 가지 형식을 지원합니다.
When the namespace format is used, MinIO synchronizes objects in the bucket with rows in the table. It creates rows with two columns: key_name and value.
네임스페이스 형식이 사용되면 MinIO는 버킷의 객체를 테이블의 행과 동기화합니다. key_name과 value라는 두 개의 열이 있는 행을 생성합니다.
The key_name is the bucket and object name of an object that exists in MinIO.
key_name은 MinIO에 존재하는 객체의 버킷 및 객체 이름입니다.
The value is JSON encoded event data about the operation that created/replaced the object in MinIO.
값은 MinIO에서 객체를 생성/교체한 작업에 대한 JSON 인코딩 이벤트 데이터입니다.
When objects are updated or deleted, the corresponding row from this table is updated or deleted respectively.
객체가 업데이트되거나 삭제되면 이 테이블의 해당 행이 각각 업데이트되거나 삭제됩니다.
When the access format is used, MinIO appends events to a table. It creates rows with two columns: event_time and event_data.
액세스 형식이 사용되면 MinIO는 이벤트를 테이블에 추가합니다. event_time 및 event_data라는 두 개의 열이 있는 행을 생성합니다.
The event_time is the time at which the event occurred in the MinIO server.
event_time은 MinIO 서버에서 이벤트가 발생한 시간입니다.
The event_data is the JSON encoded event data about the operation on an object. No rows are deleted or modified in this format.
event_data는 객체 작업에 대한 JSON 인코딩 이벤트 데이터입니다. 이 형식에서는 행을 삭제이 삭제되거나 수정되지 않습니다.
The steps below show how to use this notification target in namespace format. The other format is very similar and is omitted for brevity.
아래 단계에서는 이 알림 대상을 네임스페이스 형식으로 사용하는 방법을 보여줍니다. 다른 형식은 매우 유사하므로 간결성을 위해 생략되었습니다.
Step 1: Ensure minimum requirements are met
1 단계: 최소 요구 사항이 충족되는지 확인
MinIO requires MySQL version 5.7.8 or above. MinIO uses the JSON data-type introduced in version 5.7.8. We tested this setup on MySQL 5.7.17.
MinIO에는 MySQL 버전 5.7.8 이상이 필요합니다. MinIO는 버전 5.7.8에 도입된 JSON 데이터 유형을 사용합니다. 우리는 MySQL 5.7.17에서 이 설정을 테스트했습니다.
Step 2: Add MySQL server endpoint configuration to MinIO
2 단계: MySQL 서버 엔드포인트 구성을 MinIO에 추가
The MinIO server configuration file is stored on the backend in json format.
MinIO 서버 구성 파일은 json 형식으로 백엔드에 저장됩니다.
The MySQL configuration is located in the mysql key under the notify top-level key. Create a configuration key-value pair here for your MySQL instance.
MySQL 구성은 알림 최상위 키 아래의 mysql 키에 있습니다. 여기에서 MySQL 인스턴스에 대한 구성 키-값 쌍을 만듭니다.
The key is a name for your MySQL endpoint, and the value is a collection of key-value parameters described in the table below.
키는 MySQL 엔드포인트의 이름이고, 값은 아래 표에 설명된 키-값 매개변수의 컬렉션입니다.
Parameter
Type
Description
설명
enable
bool
(Required) Is this server endpoint configuration active/enabled?
(필수) 이 서버 엔드포인트 구성이 활성화/활성화되어 있습니까?
format
string
(Required) Either namespace or access.
(필수) 네임스페이스 또는 액세스입니다.
dsnString
string
(Optional) Data-Source-Name connection string for the MySQL server. If not specified, the connection information specified by the host, port, user, password and database parameters are used.
(선택 사항) MySQL 서버에 대한 데이터 소스 이름 연결 문자열입니다. 지정하지 않으면 호스트, 포트, 사용자, 비밀번호 및 데이터베이스 매개변수에 지정된 연결 정보가 사용됩니다.
table
string
(Required) Table name in which events will be stored/updated. If the table does not exist, the MinIO server creates it at start-up.
(필수) 이벤트가 저장/업데이트될 테이블 이름입니다. 테이블이 없으면 MinIO 서버는 시작 시 테이블을 생성합니다.
host
string
Host name of the MySQL server (used only if dsnString is empty).
MySQL 서버의 호스트 이름 (dsnString이 비어 있는 경우에만 사용됨)입니다.
port
string
Port on which to connect to the MySQL server (used only if dsnString is empty).
MySQL 서버에 연결할 포트입니다 (dsnString이 비어 있는 경우에만 사용됨).
user
string
Database user-name (used only if dsnString is empty).
데이터베이스 사용자 이름 (dsnString이 비어 있는 경우에만 사용됨).
password
string
Database password (used only if dsnString is empty).
데이터베이스 패스워드 (dsnString이 비어있는 경우에만 사용됨).
database
string
Database name (used only if dsnString is empty).
데이터베이스 이름 (dsnString이 비어있는 경우에만 사용됨).
An example of MySQL configuration is as follows:
MySQL 구성의 예제는 다음과 같습니다.
"mysql": {
"1": {
"enable": true,
"dsnString": "",
"format": "namespace",
"table": "minio_images",
"host": "172.17.0.1",
"port": "3306",
"user": "root",
"password": "password",
"database": "miniodb",
"queueDir": "",
"queueLimit": 0
}
}
MinIO supports persistent event store. The persistent store will backup events when the MySQL connection goes offline and replays it when the broker comes back online.
MinIO는 지속적인 이벤트 저장소를 지원합니다. 영구 저장소는 MySQL 연결이 오프라인이 되면 이벤트를 백업하고 브로커가 다시 온라인이 되면 이를 재생합니다.
The event store can be configured by setting the directory path in queueDir field and the maximum limit of events in the queueDir in queueLimit field.
queueDir 필드에 디렉터리 경로를 설정하고 queueLimit 필드의 queueDir에 최대 이벤트 제한을 설정하여 이벤트 저장소를 구성할 수 있습니다.
For eg, the queueDir can be /home/events and queueLimit can be 1000. By default, the queueLimit is set to 10000.
예를 들어, queueDir은 /home/events이고 queueLimit은 1000일 수 있습니다. 기본적으로 queueLimit은 10000으로 설정됩니다.
To update the configuration, use mc admin config get command to get the current configuration file for the minio deployment in json format, and save it locally.
구성을 업데이트하려면 mc admin config get 명령을 사용하여 minio 배포에 대한 현재 구성 파일을 json 형식으로 가져와 로컬에 저장합니다.
mc admin config get myminio/ > /tmp/myconfig
After updating the MySQL configuration in /tmp/myconfig , use mc admin config set command to update the configuration for the deployment.Restart the MinIO server to put the changes into effect.
/tmp/myconfig에서 MySQL 구성을 업데이트한 후 mc admin config set 명령을 사용하여 배포 구성을 업데이트합니다. MinIO 서버를 다시 시작하여 변경 사항을 적용합니다.
The server will print a line like SQS ARNs: arn:minio:sqs::1:mysql at start-up if there were no errors.
오류가 없는 경우 서버는 시작 시 SQS ARN: arn:minio:sqs::1:mysql과 같은 라인을 인쇄합니다.
mc admin config set myminio < /tmp/myconfig
Note that, you can add as many MySQL server endpoint configurations as needed by providing an identifier (like "1" in the example above) for the MySQL instance and an object of per-server configuration parameters.
MySQL 인스턴스에 대한 식별자 (예: 위 예의 "1")와 서버별 구성 매개변수의 객체를 제공하여 필요한 만큼 MySQL 서버 엔드포인트 구성을 추가할 수 있습니다.
Step 3: Enable bucket notification using MinIO client
3 단계: MinIO 클라이언트를 사용하여 버킷 알림 활성화
We will now setup bucket notifications on a bucket named images. Whenever a JPEG image object is created/overwritten, a new row is added or an existing row is updated in the MySQL table configured above.
이제 이미지라는 버킷에 버킷 알림을 설정하겠습니다. JPEG 이미지 객체가 생성되거나 덮어쓰여질 때마다 위에 구성된 MySQL 테이블에 새 행이 추가되거나 기존 행이 업데이트됩니다.
When an existing object is deleted, the corresponding row is deleted from the MySQL table. Thus, the rows in the MySQL table, reflect the .jpg objects in the images bucket.
기존 객체가 삭제되면 해당 행이 MySQL 테이블에서 삭제됩니다. 따라서 MySQL 테이블의 행은 이미지 버킷의 .jpg 객체를 반영합니다.
To configure this bucket notification, we need the ARN printed by MinIO in the previous step. Additional information about ARN is available here.
이 버킷 알림을 구성하려면 이전 단계에서 MinIO가 인쇄한 ARN이 필요합니다. ARN에 대한 추가 정보는 여기에서 확인할 수 있습니다.
With the mc tool, the configuration is very simple to add. Let us say that the MinIO server is aliased as myminio in our mc configuration. Execute the following:
mc 도구를 사용하면, 구성을 추가하는 것이 매우 간단합니다. mc 구성에서 MinIO 서버의 별칭이 myminio라고 가정해 보겠습니다. 다음을 실행합니다.
# Create bucket named `images` in myminio
# myminio에서 `images`라는 버킷을 생성합니다
mc mb myminio/images
# Add notification configuration on the `images` bucket using the MySQL ARN. The --suffix argument filters events.
# MySQL ARN을 사용하여 `images` 버킷에 알림 구성을 추가합니다. --suffix 인수는 이벤트를 필터링합니다.
mc event add myminio/images arn:minio:sqs::1:postgresql --suffix .jpg
# Print out the notification configuration on the `images` bucket.
# `images` 버킷의 알림 구성을 인쇄합니다.
mc event list myminio/images
arn:minio:sqs::1:postgresql s3:ObjectCreated:*,s3:ObjectRemoved:* Filter: suffix=”.jpg”
Step 4: Test on MySQL
4 단계: MySQL에서 테스트
Open another terminal and upload a JPEG image into images bucket:
다른 터미널을 열고 JPEG 이미지를 이미지 버킷에 업로드합니다:
mc cp myphoto.jpg myminio/images
Open MySQL terminal and list the rows in the minio_images table.
MySQL 터미널을 열고 minio_images 테이블의 행을 나열합니다.
mysql -h 172.17.0.1 -P 3306 -u root -p miniodb
mysql> select * from minio_images;
+--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| key_name | value |
+--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| images/myphoto.jpg | {"Records": [{"s3": {"bucket": {"arn": "arn:aws:s3:::images", "name": "images", "ownerIdentity": {"principalId": "minio"}}, "object": {"key": "myphoto.jpg", "eTag": "467886be95c8ecfd71a2900e3f461b4f", "size": 26, "sequencer": "14AC59476F809FD3"}, "configurationId": "Config", "s3SchemaVersion": "1.0"}, "awsRegion": "", "eventName": "s3:ObjectCreated:Put", "eventTime": "2017-03-16T11:29:00Z", "eventSource": "aws:s3", "eventVersion": "2.0", "userIdentity": {"principalId": "minio"}, "responseElements": {"x-amz-request-id": "14AC59476F809FD3", "x-minio-origin-endpoint": "http://192.168.86.110:9000"}, "requestParameters": {"sourceIPAddress": "127.0.0.1:38260"}}]} |
+--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
Publish MinIO events via Kafka
Kafka를 통해 MinIO 이벤트 게시
Install Apache Kafka from here.
여기에서 Apache Kafka를 설치합니다.
Step 1: Ensure minimum requirements are met
1 단계: 최소 요구 사항이 충족되는지 확인
MinIO requires Kafka version 0.10 or 0.9. Internally MinIO uses the Shopify/sarama library and so has the same version compatibility as provided by this library.
MinIO에는 Kafka 버전 0.10 또는 0.9가 필요합니다. 내부적으로 MinIO는 Shopify/sarama 라이브러리를 사용하므로 이 라이브러리에서 제공하는 것과 동일한 버전 호환성을 갖습니다.
Step 2: Add Kafka endpoint to MinIO
2 단계: MinIO에 Kafka 엔드포인트 추가
The MinIO server configuration file is stored on the backend in json format. Update the kafka configuration block in config.json as follows:
MinIO 서버 구성 파일은 json 형식으로 백엔드에 저장됩니다. 다음과 같이 config.json에서 kafka 구성 블록을 업데이트합니다.
"kafka": {
"1": {
"enable": true,
"brokers": ["localhost:9092"],
"topic": "bucketevents",
"queueDir": "",
"queueLimit": 0,
"tls": {
"enable": false,
"skipVerify": false,
"clientAuth": 0
},
"sasl": {
"enable": false,
"username": "",
"password": ""
}
}
}
MinIO supports persistent event store. The persistent store will backup events when the kafka broker goes offline and replays it when the broker comes back online.
MinIO는 지속적인 이벤트 저장소를 지원합니다. 영구 저장소는 kafka 브로커가 오프라인이 되면 이벤트를 백업하고 브로커가 다시 온라인이 되면 이를 재생합니다.
The event store can be configured by setting the directory path in queueDir field and the maximum limit of events in the queueDir in queueLimit field.
queueDir 필드에 디렉터리 경로를 설정하고 queueLimit 필드의 queueDir에 최대 이벤트 제한을 설정하여 이벤트 저장소를 구성할 수 있습니다.
For eg, the queueDir can be /home/events and queueLimit can be 1000. By default, the queueLimit is set to 10000.
예를 들어, queueDir은 /home/events이고 queueLimit는 1000일 수 있습니다. 기본적으로 queueLimit은 10000으로 설정됩니다.
To update the configuration, use mc admin config get command to get the current configuration file for the minio deployment in json format, and save it locally.
구성을 업데이트하려면 mc admin config get 명령을 사용하여 minio 배포에 대한 현재 구성 파일을 json 형식으로 가져와 로컬에 저장합니다.
mc admin config get myminio/ > /tmp/myconfig
After updating the Kafka configuration in /tmp/myconfig, use mc admin config set command to update the configuration for the deployment. Restart the MinIO server to put the changes into effect.
/tmp/myconfig에서 Kafka 구성을 업데이트한 후 mc admin config set 명령을 사용하여 배포 구성을 업데이트합니다. 변경 사항을 적용하려면 MinIO 서버를 다시 시작하세요.
The server will print a line like SQS ARNs: arn:minio:sqs::1:kafka at start-up if there were no errors. bucketevents is the topic used by kafka in this example.
오류가 없는 경우 서버는 시작시 SQS ARN: arn:minio:sqs::1:kafka와 같은 라인을 인쇄합니다. bucketevents는 이 예에서 kafka가 사용하는 주제입니다.
mc admin config set myminio < /tmp/myconfig
Step 3: Enable bucket notification using MinIO client
3 단계: MinIO 클라이언트를 사용하여 버킷 알림 활성화
We will enable bucket event notification to trigger whenever a JPEG image is uploaded or deleted from images bucket on myminio server.
myminio 서버의 이미지 버킷에서 JPEG 이미지가 업로드되거나 삭제될 때마다 버킷 이벤트 알림이 트리거되도록 활성화하겠습니다.
Here ARN value is arn:minio:sqs::1:kafka. To understand more about ARN please follow AWS ARN documentation.
여기서 ARN 값은 arn:minio:sqs::1:kafka입니다. ARN에 대해 자세히 알아보려면 AWS ARN 설명서를 따르십시오.
mc mb myminio/images
mc event add myminio/images arn:minio:sqs::1:kafka --suffix .jpg
mc event list myminio/images
arn:minio:sqs::1:kafka s3:ObjectCreated:*,s3:ObjectRemoved:* Filter: suffix=”.jpg”
Step 4: Test on Kafka
4 단계: Kafka에서 테스트
We used kafkacat to print all notifications on the console.
kafkacat을 사용하여 콘솔에 모든 알림을 인쇄했습니다.
kafkacat -C -b localhost:9092 -t bucketevents
Open another terminal and upload a JPEG image into images bucket.
다른 터미널을 열고 JPEG 이미지를 이미지 버킷에 업로드하세요.
mc cp myphoto.jpg myminio/images
kafkacat prints the event notification to the console.
kafkacat은 이벤트 알림을 콘솔에 인쇄합니다.
kafkacat -b localhost:9092 -t bucketevents
{
"EventName": "s3:ObjectCreated:Put",
"Key": "images/myphoto.jpg",
"Records": [
{
"eventVersion": "2.0",
"eventSource": "minio:s3",
"awsRegion": "",
"eventTime": "2019-09-10T17:41:54Z",
"eventName": "s3:ObjectCreated:Put",
"userIdentity": {
"principalId": "AKIAIOSFODNN7EXAMPLE"
},
"requestParameters": {
"accessKey": "AKIAIOSFODNN7EXAMPLE",
"region": "",
"sourceIPAddress": "192.168.56.192"
},
"responseElements": {
"x-amz-request-id": "15C3249451E12784",
"x-minio-deployment-id": "751a8ba6-acb2-42f6-a297-4cdf1cf1fa4f",
"x-minio-origin-endpoint": "http://192.168.97.83:9000"
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "Config",
"bucket": {
"name": "images",
"ownerIdentity": {
"principalId": "AKIAIOSFODNN7EXAMPLE"
},
"arn": "arn:aws:s3:::images"
},
"object": {
"key": "myphoto.jpg",
"size": 6474,
"eTag": "430f89010c77aa34fc8760696da62d08-1",
"contentType": "image/jpeg",
"userMetadata": {
"content-type": "image/jpeg"
},
"versionId": "1",
"sequencer": "15C32494527B46C5"
}
},
"source": {
"host": "192.168.56.192",
"port": "",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
}
}
]
}
Publish MinIO events via Webhooks
Webhooks를 통해 MinIO 이벤트 게시
Webhooks are a way to receive information when it happens, rather than continually polling for that data.
웹후크는 해당 데이터를 지속적으로 폴링하는 대신 정보가 발생할 때 이를 수신하는 방법입니다.
Step 1: Add Webhook endpoint to MinIO
1 단계: MinIO에 웹후크 엔드포인트 추가
The MinIO server configuration file is stored on the backend in json format. Update the Webhook configuration block in config.json as follows
MinIO 서버 구성 파일은 json 형식으로 백엔드에 저장됩니다. 다음과 같이 config.json의 Webhook 구성 블록을 업데이트합니다.
"webhook": {
"1": {
"enable": true,
"endpoint": "http://localhost:3000/",
"queueDir": "",
"queueLimit": 0
}
MinIO supports persistent event store. The persistent store will backup events when the webhook goes offline and replays it when the broker comes back online.
MinIO는 지속적인 이벤트 저장소를 지원합니다. 영구 저장소는 웹후크가 오프라인이 되면 이벤트를 백업하고 브로커가 다시 온라인이 되면 이를 재생합니다.
The event store can be configured by setting the directory path in queueDir field and the maximum limit of events in the queueDir in queueLimit field.
queueDir 필드에 디렉터리 경로를 설정하고 queueLimit 필드의 queueDir에 최대 이벤트 제한을 설정하여 이벤트 저장소를 구성할 수 있습니다.
For eg, the queueDir can be /home/events and queueLimit can be 1000. By default, the queueLimit is set to 10000.
예를 들어, queueDir은 /home/events이고 queueLimit는 1000일 수 있습니다. 기본적으로 queueLimit은 10000으로 설정됩니다.
To update the configuration, use mc admin config get command to get the current configuration file for the minio deployment in json format, and save it locally.
구성을 업데이트하려면 mc admin config get 명령을 사용하여 minio 배포에 대한 현재 구성 파일을 json 형식으로 가져와 로컬에 저장합니다.
mc admin config get myminio/ > /tmp/myconfig
After updating the webhook configuration in /tmp/myconfig , use mc admin config set command to update the configuration for the deployment.Here the endpoint is the server listening for webhook notifications.
/tmp/myconfig에서 웹후크 구성을 업데이트한 후 mc admin config set 명령을 사용하여 배포 구성을 업데이트합니다. 여기서 엔드포인트는 웹후크 알림을 수신하는 서버입니다.
Save the file and restart the MinIO server for changes to take effect. Note that the endpoint needs to be live and reachable when you restart your MinIO server.
변경 사항을 적용하려면 파일을 저장하고 MinIO 서버를 다시 시작하세요. MinIO 서버를 다시 시작할 때 엔드포인트가 활성화되어 있고 연결할 수 있어야 합니다.
mc admin config set myminio < /tmp/myconfig
Step 2: Enable bucket notification using MinIO client
2 단계: MinIO 클라이언트를 사용하여 버킷 알림 활성화
We will enable bucket event notification to trigger whenever a JPEG image is uploaded to images bucket on myminio server.
myminio 서버의 이미지 버킷에 JPEG 이미지가 업로드될 때마다 버킷 이벤트 알림이 트리거되도록 활성화하겠습니다.
Here ARN value is arn:minio:sqs::1:webhook. To learn more about ARN please follow AWS ARN documentation.
여기서 ARN 값은 arn:minio:sqs::1:webhook입니다. ARN에 대해 자세히 알아보려면 AWS ARN 설명서를 따르십시오.
mc mb myminio/images
mc mb myminio/images-thumbnail
mc event add myminio/images arn:minio:sqs::1:webhook --event put --suffix .jpg
Check if event notification is successfully configured by ~
~에 의해 이벤트 알림이 성공적으로 구성되었는지 확인하십시오
mc event list myminio/images
You should get a response like this
여러분은 이런 응답을 받아야 합니다
arn:minio:sqs::1:webhook s3:ObjectCreated:* Filter: suffix=".jpg"
Step 3: Test with Thumbnailer
3 단계: 썸네일러로 테스트
We used Thumbnailer to listen for MinIO notifications when a new JPEG file is uploaded (HTTP PUT). Triggered by a notification, Thumbnailer uploads a thumbnail of new image to MinIO server. To start with, download and install Thumbnailer.
새로운 JPEG 파일이 업로드될 때(HTTP PUT) MinIO 알림을 수신하기 위해 Thumbnailer를 사용했습니다. 알림에 의해 트리거된 Thumbnailer는 새 이미지의 썸네일을 MinIO 서버에 업로드합니다. 시작하려면 Thumbnailer를 다운로드하여 설치하세요.
git clone https://github.com/minio/thumbnailer/
npm install
Then open the Thumbnailer config file at config/webhook.json and add the configuration for your MinIO server and then start Thumbnailer by
그런 다음 config/webhook.json에서 Thumbnailer 구성 파일을 열고 MinIO 서버 구성을 추가한 다음 Thumbnailer를 시작하십시오.
NODE_ENV=webhook node thumbnail-webhook.js
Thumbnailer starts running at http://localhost:3000/. Next, configure the MinIO server to send notifications to this URL (as mentioned in step 1) and use mc to set up bucket notifications (as mentioned in step 2). Then upload a JPEG image to MinIO server by
Thumbnailer는 http://localhost:3000/에서 실행을 시작합니다. 다음으로, 이 URL로 알림을 보내도록 MinIO 서버를 구성하고 (1단계에서 설명한 대로) mc를 사용하여 버킷 알림을 설정합니다 (2단계에서 설명한 대로). 그런 다음 JPEG 이미지를 MinIO 서버에 업로드하십시오.
mc cp ~/images.jpg myminio/images
.../images.jpg: 8.31 KB / 8.31 KB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 100.00% 59.42 KB/s 0s
Wait a few moments, then check the bucket’s contents with mc ls — you will see a thumbnail appear.
잠시 기다린 후 mc ls 를 사용하여 버킷의 내용을 확인하세요. 썸네일이 나타나는 것을 볼 수 있습니다.
mc ls myminio/images-thumbnail
[2017-02-08 11:39:40 IST] 992B images-thumbnail.jpg
Publish MinIO events to NSQ
NSQ에 MinIO 이벤트 게시
Install an NSQ Daemon from here. Or use the following Docker command for starting an nsq daemon:
여기에서 NSQ 데몬을 설치합니다. K 또는 nsq 데몬을 시작하려면 다음 Docker 명령을 사용하세요:
docker run --rm -p 4150-4151:4150-4151 nsqio/nsq /nsqd
Step 1: Add NSQ endpoint to MinIO
1 단계: MinIO에 NSQ 엔드포인트 추가
The MinIO server configuration file is stored on the backend in json format. The NSQ configuration is located in the nsq key under the notify top-level key. Create a configuration key-value pair here for your NSQ instance.
MinIO 서버 구성 파일은 json 형식으로 백엔드에 저장됩니다. NSQ 구성은 알림 최상위 키 아래의 nsq 키에 있습니다. NSQ 인스턴스에 대한 구성 키-값 쌍을 여기에서 생성합니다.
The key is a name for your NSQ endpoint, and the value is a collection of key-value parameters. An example configuration for NSQ is shown below:
키는 NSQ 엔드포인트의 이름이고 값은 키-값 매개변수의 컬렉션입니다. NSQ의 구성 예는 다음과 같습니다.
"nsq": {
"1": {
"enable": true,
"nsqdAddress": "127.0.0.1:4150",
"topic": "minio",
"tls": {
"enable": false,
"skipVerify": true
},
"queueDir": "",
"queueLimit": 0
}
}
MinIO supports persistent event store. The persistent store will backup events when the NSQ broker goes offline and replays it when the broker comes back online.
MinIO는 지속적인 이벤트 저장소를 지원합니다. 영구 저장소는 NSQ 브로커가 오프라인이 되면 이벤트를 백업하고 브로커가 다시 온라인이 되면 이를 재생합니다.
The event store can be configured by setting the directory path in `queueDir` field and the maximum limit of events in the queueDir in `queueLimit` field.
이벤트 저장소는`queueDir` 필드에 디렉토리 경로를 설정하고 `queueLimit` 필드에 queueDir에 있는 이벤트의 최대 제한을 설정하여 구성할 수 있습니다.
For eg, the `queueDir` can be `/home/events` and `queueLimit` can be `1000`. By default, the `queueLimit` is set to 10000.
예를 들어, `queueDir`은 `/home/events`일 수 있고 `queueLimit`은 `1000`일 수 있습니다. 기본적으로 `queueLimit`은 10000으로 설정됩니다.
To update the configuration, use mc admin config get command to get the current configuration file for the MinIO deployment in json format, and save it locally.
구성을 업데이트하려면 mc admin config get 명령을 사용하여 MinIO 배포에 대한 현재 구성 파일을 json 형식으로 가져와 로컬에 저장합니다.
mc admin config get myminio/ > /tmp/myconfig
After updating the NSQ configuration in /tmp/myconfig, use mc admin config set command to update the configuration for the deployment. Restart the MinIO server to put the changes into effect.
/tmp/myconfig에서 NSQ 구성을 업데이트한 후, mc admin config set 명령을 사용하여 배포 구성을 업데이트합니다. 변경 사항을 적용하려면 MinIO 서버를 다시 시작하세요.
The server will print a line like SQS ARNs: arn:minio:sqs::1:nsq at start-up if there were no errors.
오류가 없는 경우 서버는 시작 시 SQS ARNs: arn:minio:sqs::1:nsq와 같은 라인을 인쇄합니다.
mc admin config set myminio < /tmp/myconfig
Note that, you can add as many NSQ daemon endpoint configurations as needed by providing an identifier (like "1" in the example above) for the NSQ instance and an object of per-server configuration parameters.
NSQ 인스턴스에 대한 식별자 (예: 위 예의 "1")와 서버별 구성 매개변수의 객체를 제공하여 필요한 만큼 NSQ 데몬 엔드포인트 구성을 추가할 수 있습니다.
Step 2: Enable bucket notification using MinIO client
2 단계: MinIO 클라이언트를 사용하여 버킷 알림 활성화
We will enable bucket event notification to trigger whenever a JPEG image is uploaded or deleted images bucket on myminio server. Here ARN value is arn:minio:sqs::1:nsq.
myminio 서버에 JPEG 이미지가 업로드되거나 이미지 버킷이 삭제될 때마다 버킷 이벤트 알림이 트리거되도록 활성화하겠습니다. 여기서 ARN 값은 arn:minio:sqs::1:nsq입니다.
mc mb myminio/images
mc event add myminio/images arn:minio:sqs::1:nsq --suffix .jpg
mc event list myminio/images
arn:minio:sqs::1:nsq s3:ObjectCreated:*,s3:ObjectRemoved:* Filter: suffix=”.jpg”
Step 3: Test on NSQ
3 단계: NSQ에서 테스트
The simplest test is to download nsq_tail from nsq github
가장 간단한 테스트는 nsq github에서 nsq_tail을 다운로드하는 것입니다
./nsq_tail -nsqd-tcp-address 127.0.0.1:4150 -topic minio
Open another terminal and upload a JPEG image into images bucket.
다른 터미널을 열고 JPEG 이미지를 이미지 버킷에 업로드하세요.
mc cp gopher.jpg myminio/images
You should receive the following event notification via NSQ once the upload completes.
업로드가 완료되면 NSQ를 통해 다음 이벤트 알림을 받아야 합니다.
{"EventName":"s3:ObjectCreated:Put","Key":"images/gopher.jpg","Records":[{"eventVersion":"2.0","eventSource":"minio:s3","awsRegion":"","eventTime":"2018-10-31T09:31:11Z","eventName":"s3:ObjectCreated:Put","userIdentity":{"principalId":"21EJ9HYV110O8NVX2VMS"},"requestParameters":{"sourceIPAddress":"10.1.1.1"},"responseElements":{"x-amz-request-id":"1562A792DAA53426","x-minio-origin-endpoint":"http://10.0.3.1:9000"},"s3":{"s3SchemaVersion":"1.0","configurationId":"Config","bucket":{"name":"images","ownerIdentity":{"principalId":"21EJ9HYV110O8NVX2VMS"},"arn":"arn:aws:s3:::images"},"object":{"key":"gopher.jpg","size":162023,"eTag":"5337769ffa594e742408ad3f30713cd7","contentType":"image/jpeg","userMetadata":{"content-type":"image/jpeg"},"versionId":"1","sequencer":"1562A792DAA53426"}},"source":{"host":"","port":"","userAgent":"MinIO (linux; amd64) minio-go/v6.0.8 mc/DEVELOPMENT.GOGET"}}]}
NOTE If you are running distributed MinIO, modify ~/.minio/config.json on all the nodes with your bucket event notification backend configuration.
참고: 분산형 MinIO를 실행하는 경우 버킷 이벤트 알림 백엔드 구성이 있는 모든 노드에서 ~/.minio/config.json을 수정합니다.