57121


AWS ElasticSearch からデータを取得する以下のような ruby プログラムを EC2 上で動かしたいです

[code]

    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
    
[/code]

これを EC2 で走らせたところ  
'query start'  
が出力されたところで固まってしまい  
数分たってから execution expired というエラーがでます

これをEC2ではないローカルPCから同じESエンドポイントに対して動かすと数秒で実行は完了します

また EC2 上で

[code]

    curl <es_url>/<index>/search
    
[/code]

を叩いてもやはり結果はすぐ返ってきます  
同じシェル上で

[code]

    ruby es_test.rb
    
[/code]

と上記スクリプトを実行した場合だけESへのアクセスが固まってしまいます

ES のアクセスポリシーは IP のみです  
（セキュリティの問題でアクセスポリシーは見せられないのですが  
何の認証情報も載せてない curl で結果が返ってくるので問題ないと思われます)

ローカルですぐに実行が終わる = ESへのクエリ内容が重いわけではない  
curl でつながる = ネットワークの設定や権限が間違ってるわけではない

ということになると思うんですが  
EC2 上かつプログラムを通した場合だけうまく動かず困っています

パラメータはソース内にすべて固定で書いていて環境依存するパラメータもないように思うのですが  
elasticsearch ジェムが何かしらの環境情報をみているということでしょうか

原因や解決方法がわかる方いましたら教えていただけないでしょうか  
よろしくお願いいたします

### 追記

es.search

の中をデバッグする方法はないものでしょうか

リクエストをそもそも送ってないのか  
送ってるとしたらどういうリクエストを投げてるのか  
サーバー側がうまく処理できてないのかを切り分けたいのですが…


CC BY-SA 4.0
2019-08-01T07:20:50.400
57101
2019-08-02T04:40:06.323
2019-08-02T04:13:03.717
question
ruby aws amazon-ec2 elasticsearch
EC2 上でジェムを通すと ElasticSearch にアクセスできない


ひとまず、 query size が 10000は、ちょっと通常の用途からすると、多すぎる気がするので、 100 とか 10
とかで試したら上手くいったりしないでしょうか。


CC BY-SA 4.0
2019-08-01T15:07:29.337
57112
2019-08-01T15:07:29.337
754
57101
answer

[code]

    puts es.inspect
    
[/code]

でオブジェクトをダンプしてみたら port が 9200 になっていました  
ローカルだと 443 になってるんですが…

[code]

    es_url = 'https://xxxxxxxxxx:443'
    
[/code]

を明示的につけたところ EC2 でも動くようになりました  
全く意味不明な挙動なんですが  
動かす環境でデフォルトポートが変化するってあるんですね…


CC BY-SA 4.0
2019-08-02T04:40:06.323
57121
2019-08-02T04:40:06.323
57101
answer