こんにちは。 エキサイト株式会社の三浦です。
DBからデータをどこかに同期する(例えば、DB内のデータをElasticsearchに同期する)場合、いろいろな方法がありますが、その一つにLogstashを使うというものがあります。 LogstashはElasticsearchと同じくElastic社が提供しているアプリケーションであり、Elastic社の説明によれば
無料かつオープンのサーバーサイドデータ処理パイプラインです。膨大な数のソースからデータを取り込み、変換して、お好みの格納庫(スタッシュ)に送信します。
というものとなっています。
Elastic社が提供しているということでElasticsearchと相性がよく、使っている方もいるかと思いますが、今回は実体験をもとに、AWS RDSをソースとしたときのある注意点について説明します。
問題の発生
弊社のあるサービスでは、AWS RDSのデータをLogstashを使ってElasticsearchと同期しています。 最近、変更を加えるためにTest環境にLogstashをデプロイしたところ、大きな変更ではなかったにも関わらずエラーが発生し、正しく動かなくなってしまいました。
エラーをよく見てみるとRDSとの接続エラーのようでしたが、その時の変更点はRDSとのコネクションに関わる部分ではなかったため、どうやらコードの変更が原因ではないようです。 RDSと接続するために使用しているJDBCライブラリの更新なども行ってみましたが、特に改善は見られません。
色々調べた結果、ある記事を発見しました。
解決
この記事によると、 useSSL
オプションが悪さをしているとのこと。
本来はSSLでのコネクションでは正しく動かないのですが、デフォルトで使ってしまうので、オプションで useSSL=false
をつけることで回避できる、とのことでした。
実際にこのオプションを付けることでコネクションができるようになりました。
最後に
今回はRDS側の設定もLogstash側のRDSとの接続設定も触っていないにもかかわらず突然コネクションができなくなったので、どこでどんな変更が起きた結果エラーになるようになったのかはわかりませんが、なにはともあれLogstashをRDSと接続させるにはSSLを使用しない設定にする必要があるようです。