事象

aws-s3のプラグインでエラーが発生している。 less /var/log/td-agent/td-agent.log

failed to configure/start sub output s3: Unable to activate fluent-plugin-s3-0.8.5, because aws-sdk-
2.1.36 conflicts with aws-sdk (< 3, >= 2.3.22)

解決

下記の通りにgemのインストールを行う。

# td-agent-gem install fluent-plugin-s3
# td-agent-gem install google-protobuf -v "3.7.0"
# td-agent-gem install fluent-plugin-kinesis

インストールバージョン

# td-agent-gem list fluent-plugin-s3 fluent-plugin-kinesis google-protobuf
fluent-plugin-s3 (1.1.11, 0.8.0)
fluent-plugin-kinesis (3.1.0)
google-protobuf (3.7.0 x86_64-linux)

調査

調査1

Plugin Management - Fluentd に使用されるバージョンは The latest version is used と書かれている

# td-agent-gem list aws-sdk

*** LOCAL GEMS ***

aws-sdk (2.10.45, 2.3.22, 2.1.36)
aws-sdk-core (2.10.45, 2.3.22, 2.1.36)
aws-sdk-resources (2.10.45, 2.3.22, 2.1.36)

調査2

fluent-plugin-s3のバージョンをあげる

# td-agent-gem install fluent-plugin-s3
Fetching: serverengine-2.1.1.gem (100%)
Successfully installed serverengine-2.1.1
Fetching: strptime-0.2.3.gem (100%)
Building native extensions.  This could take a while...
.
.
.
Done installing documentation for serverengine, strptime, dig_rb, fluentd, aws-partitions, aws-eventstream, aws-sigv4, aws-sdk-core, aws-sdk-kms, aws-sdk-s3, aws-sdk-sqs, fluent-plugin-s3 after 18 seconds
12 gems installed

結果

事象が変わっただけ。

# less /var/log/td-agent/td-agent.log
.
.
.
2019-07-11 18:11:38 +0900 [error]: #0 failed to configure/start sub output s3: Unable to activate aws-sdk-s3-1.45.0, because aws-sdk-co
re-2.1.36 conflicts with aws-sdk-core (>= 3.58.0, ~> 3)

調査3

依存関係を調査する

# /usr/sbin/td-agent-gem dependency fluent-plugin-s3
Gem fluent-plugin-s3-0.8.5
  aws-sdk (< 3, >= 2.3.22)
  fluentd (< 2, >= 0.10.58)
  rake (>= 0.9.2, development)
  rr (= 1.1.2, development)
  test-unit (>= 3.0.8, development)
  test-unit-rr (>= 1.0.3, development)
  timecop (>= 0, development)

Gem fluent-plugin-s3-1.1.11
  aws-sdk-s3 (~> 1.0)
  aws-sdk-sqs (~> 1.0)
  fluentd (< 2, >= 0.14.22)
  rake (>= 0.9.2, development)
  test-unit (>= 3.0.8, development)
  test-unit-rr (>= 1.0.3, development)
  timecop (>= 0, development)

# /usr/sbin/td-agent-gem dependency aws-sdk-s3
Gem aws-sdk-s3-1.45.0
  aws-sdk-core (>= 3.58.0, ~> 3)
  aws-sdk-kms (~> 1)
  aws-sigv4 (~> 1.1)

調査4

既存のGemをカスタマイズして使うスマートなやり方 – ひげろぐ より、 specific_installgit_install でgithubより最新版をダウンロードする

gem git_install https://github.com/awslabs/aws-fluent-plugin-kinesis.git
gem git_install https://github.com/awslabs/aws-fluent-plugin-kinesis.git v2.1.1 のようにバージョンを指定できる

インストールする

結果

Rubyのバージョンが低いとエラーを指摘される

# td-agent-gem specific_install https://github.com/awslabs/aws-fluent-plugin-kinesis.git
.
.
.
  Successfully built RubyGem
  Name: fluent-plugin-kinesis
  Version: 3.1.0
  File: fluent-plugin-kinesis-3.1.0.gem
ERROR:  While executing gem ... (Gem::InstallError)
    google-protobuf requires Ruby version >= 2.3.

調査5

winebarrel/fluent-plugin-kinesis-firehose: Fluentd output plugin for Amazon Kinesis Firehose. の開発が v0.1.1 で止まっているが、最新を使用しようする為には、 README.md に書いてある通り(Please use fluent-plugin-kinesis.)、fluent-plugin-kinesis を使用する必要がある。

結果

# td-agent-gem install fluent-plugin-kinesis

failed to configure/start sub output s3: Unable to activate fluent-plugin-s3-1.0.0, because aws-sdk-2.3.22 conflicts with aws-sdk (< 3, >= 2.3.22)

調査6

google-protobufの全バージョン履歴 | RubyGems.org | コミュニティのGemホスティングサービス に、3.9、3.8、3.7…とバージョンが並んでいる各リンクを押下して、 必要RUBYバージョン を確認する。

結果

3.7.1 まで、rubyバージョンが指定されていないので使用できる。 3.8.0 からは、rubyバージョンが 2.3 でないといけない。

原因

aws-fluent-plugin-kinesis/fluent-plugin-kinesis.gemspec at master · awslabs/aws-fluent-plugin-kinesis にある通り、 spec.add_dependency "google-protobuf", "~> 3" と、3の最新バージョンまで許容している為に、3.9.0がインストールされてしまう。先に google-protobuf3.7.1 でインストールする必要がある。

調査7

failed to configure/start sub output s3: Unable to activate fluent-plugin-s3-1.0.0, because aws-sdk-2.3.22 conflicts with aws-sdk (< 3, >= 2.3.22)

aws-sdk のバージョンで競合が発生している。

結果

fluent-plugin-s3 のバージョンをあげる

# td-agent-gem install fluent-plugin-s3
# td-agent-gem list fluent-plugin-s3

*** LOCAL GEMS ***

fluent-plugin-s3 (1.1.11, 0.8.0)