88require "thread"
99require "tmpdir"
1010require "fileutils"
11+ require "uri"
1112
1213
1314# INFORMATION:
5960# This is an example of logstash config:
6061# [source,ruby]
6162# output {
62- # s3{
63+ # s3 {
6364# access_key_id => "crazy_key" (required)
6465# secret_access_key => "monkey_access_key" (required)
66+ # endpoint => "http://127.0.0.1:8080" (optional, used for non-AWS endpoints, default = "")
6567# region => "eu-west-1" (optional, default = "us-east-1")
6668# bucket => "boss_please_open_your_bucket" (required)
6769# size_file => 2048 (optional) - Bytes
@@ -84,6 +86,9 @@ class LogStash::Outputs::S3 < LogStash::Outputs::Base
8486 # S3 bucket
8587 config :bucket , :validate => :string
8688
89+ # endpoint
90+ config :endpoint , :validate => :string
91+
8792 # Set the size of file in bytes, this means that files on bucket when have dimension > file_size, they are stored in two or more file.
8893 # If you have tags then it will generate a specific size file for every tags
8994 ##NOTE: define size of file is the better thing, because generate a local temporary file on disk and then put it in bucket.
@@ -147,6 +152,7 @@ def aws_s3_config
147152
148153 def full_options
149154 aws_options_hash . merge ( signature_options )
155+ aws_options_hash . merge ( endpoint_options )
150156 end
151157
152158 def signature_options
@@ -157,6 +163,20 @@ def signature_options
157163 end
158164 end
159165
166+ def endpoint_options
167+ if @endpoint
168+ uri = URI ( @endpoint )
169+ {
170+ :s3_force_path_style => true ,
171+ :s3_endpoint => uri . host ,
172+ :s3_port => uri . port ,
173+ :use_ssl => uri . scheme == "https" ,
174+ }
175+ else
176+ { }
177+ end
178+ end
179+
160180 def aws_service_endpoint ( region )
161181 return {
162182 :s3_endpoint => region == 'us-east-1' ? 's3.amazonaws.com' : "s3-#{ region } .amazonaws.com"
0 commit comments