Edited at

fluent-plugin-s3のoutputをlocalstackで試す

More than 1 year has passed since last update.


背景

fluent-plugin-s3で動作確認をするとき、localで動作確認を完結させたいので localstack のS3をpluginの出力先に指定したい


やりたいこと

localで Fluentdlocalstack を起動し、 fluent-cat で投げたテストデータがlocalstackのS3に保存されていることを確認する


方法

localstackで使う場合は以下の項目を設定する

<match **>

@type s3

s3_endpoint http://localstack:4572
force_path_style true
aws_key_id dummy
aws_sec_key dummy

...
</match>



  • s3_endpoint


    • localstackを使うように指定

    • docker-composeを使っているのでservice名で設定




  • force_path_style


    • これを指定しないとbucket名をsubdomainとしてS3のendpointを叩くので設定




  • aws_key_id / aws_sec_key


    • 適当に値を入れておく




動作確認

sample code を用意したので、こちらを使って再現する

$ git clone git@gist.github.com:b6da34a467c6009a3193b6eb1ee1b106.git

$ cd b6da34a467c6009a3193b6eb1ee1b106
$ mkdir plugins # on-buildの処理で必要になる
$ docker-compose up localstack fluentd

上記とは別shellで下記を実行する

# 適当にデータを投げる

$ echo '{"json":"message"}' | fluent-cat debug.test

# 強制flushするか、fluentdのdebug logでflushされることを確認する
# chunk作成のdebug logのsample
# fluentd_1 | 2018-11-05 08:10:29 +0000 [debug]: #0 fluent/log.rb:302:debug: Created new chunk chunk_id="579e66b174a8257559277e1e101d4367" metadata=#<struct Fluent::Plugin::Buffer::Metadata timekey=1541404800, tag="debug.test", variables=nil>
# flushのdebug logのsample
# fluentd_1 | 2018-11-05 08:11:33 +0000 [debug]: #0 fluent/log.rb:302:debug: out_s3: write chunk 579e66b174a8257559277e1e101d4367 with metadata #<struct Fluent::Plugin::Buffer::Metadata timekey=1541404800, tag="debug.test", variables=nil> to s3://sample-bucket/debug.test/dt=20181105/2018110508_0.gz

# fileを確認
$ aws --endpoint-url=http://localhost:4572 s3 ls s3://sample-bucket/debug.test/

うまく行けば最後の s3 ls で新しいpathの存在が確認できる