EC2 上でジェムを通すと ElasticSearch にアクセスできない
AWS ElasticSearch からデータを取得する以下のような ruby プログラムを EC2 上で動かしたいです
require 'elasticsearch'
es_url = 'https://xxxxxxxxxx'
es = Elasticsearch::Client.new ({
log: false,
url: es_url,
request_timeout: 60
})
puts 'query start'
results = es.search({
index: 'xxxxxxxxxx',
q: {query: {match_all: {}}},
size: 10000,
scroll: '1m'
})
puts results
これを EC2 で走らせたところ
'query start'
が出力されたところで固まってしまい
数分たってから execution expired というエラーがでます
これをEC2ではないローカルPCから同じESエンドポイントに対して動かすと数秒で実行は完了します
また EC2 上で
curl <es_url>/<index>/search
を叩いてもやはり結果はすぐ返ってきます
同じシェル上で
ruby es_test.rb
と上記スクリプトを実行した場合だけESへのアクセスが固まってしまいます
ES のアクセスポリシーは IP のみです
(セキュリティの問題でアクセスポリシーは見せられないのですが
何の認証情報も載せてない curl で結果が返ってくるので問題ないと思われます)
ローカルですぐに実行が終わる = ESへのクエリ内容が重いわけではない
curl でつながる = ネットワークの設定や権限が間違ってるわけではない
ということになると思うんですが
EC2 上かつプログラムを通した場合だけうまく動かず困っています
パラメータはソース内にすべて固定で書いていて環境依存するパラメータもないように思うのですが
elasticsearch ジェムが何かしらの環境情報をみているということでしょうか
原因や解決方法がわかる方いましたら教えていただけないでしょうか
よろしくお願いいたします
追記
es.search
の中をデバッグする方法はないものでしょうか
リクエストをそもそも送ってないのか
送ってるとしたらどういうリクエストを投げてるのか
サーバー側がうまく処理できてないのかを切り分けたいのですが…