3

Amazon S3 からいくつかのファイルを読み取り、そのデータを AWS ElasticSearch Service にプッシュする関数を含む AWS Lambda パッケージ (Java) を作成しました。私は AWS Elastic Search を使用しているため、トランスポート クライアントを使用できません。その場合、Jest クライアントを使用して REST 経由でプッシュしています。問題は Jest クライアントにあります。

これが私の Jest クライアント インスタンスです。

public JestClient getClient() throws InterruptedException{
    final Supplier<LocalDateTime> clock = () -> LocalDateTime.now(ZoneOffset.UTC);

    DefaultAWSCredentialsProviderChain awsCredentialsProvider = new DefaultAWSCredentialsProviderChain();

    final AWSSigner awsSigner = new AWSSigner(awsCredentialsProvider, REGION, SERVICE, clock);

    JestClientFactory factory = new JestClientFactory() {
        @Override
        protected HttpClientBuilder configureHttpClient(HttpClientBuilder builder) {
            builder.addInterceptorLast(new AWSSigningRequestInterceptor(awsSigner));
            return builder;
        }

        @Override
        protected HttpAsyncClientBuilder configureHttpClient(HttpAsyncClientBuilder builder) {
            builder.addInterceptorLast(new AWSSigningRequestInterceptor(awsSigner));
            return builder;
        }
    };

    factory.setHttpClientConfig(
            new HttpClientConfig.Builder(URL)
                    .discoveryEnabled(true)
                    .multiThreaded(true).build());

    JestClient jestClient = factory.getObject();
    return jestClient;
}

AWS Elasticsearch ドメインは IAM アクセス ポリシーによって保護されているため、AWS によって承認されるようにリクエストに署名します (例はこちら)。POJO を使用してドキュメントのインデックスを作成します。

私が直面している問題は、jest クライアント インスタンスで複数のアクションを実行できないことです。たとえば、最初にインデックスを作成した場合:

client.execute(new CreateIndex.Builder(indexName).build()); 

その後、たとえば、一括インデックス作成を行いたいと思いました。

for (Object object : listOfObjects) {
    bulkIndexBuilder.addAction(new Index.Builder(object ).
                      index(INDEX_NAME).type(DOC_TYPE).build());
        }
client.execute(bulkIndexBuilder.build());

最初のアクションのみが実行され、2 番目のアクションは失敗します。何故ですか?複数のアクションを実行することは可能ですか?

Morover、提供されたコードを使用して、ドキュメントにインデックスを付けたいときに、20 を超える一括操作を実行できません。基本的には 20 前後で問題ありませんが、それ以上になるとclient.execute(bulkIndexBuilder.build());実行されず、クライアントがシャットダウンします。

どんな助けや提案も感謝します。

更新: AWS ElasticSearch では、個々のノードへの接続が許可されていないようです。Jest クライアントでノード検出をオフにするだけで、.discoveryEnabled(false)すべての問題が解決しました。この答えは役に立ちました。

4

0 に答える 0