Liferay DXPがElastic Cloud上のElasticsearchに接続するための設定方法

この記事では、構成例のみを示しており、ローカル/オンプレミス環境でのLiferay DXPとElasticsearchの構成について熟知していることを前提としています。

目次を見る

環境 - Elastic Stack 7.x

  • Liferay DXP 7.3 FP1* Elasticsearch 7.9.3/7.13.0**。
  • Liferay DXP 7.2 (FP8/SP3)* Liferay Connector to Elasticsearch 7 (v3.1.0)* Elasticsearch 7.9.0/7.11.1**。

解決方法 - Elastic Stack 7.x

  1. Pre: デプロイメントのカスタマイズ画面で、必要な4つのアナライザー・プラグイン(analysis-icu, analysis-kuromoji, analysis-smartcn, analysis-stempel)が設定されていることを確認します。
  2. デプロイメントの編集画面の ユーザー設定オーバーライド セクションの下 elasticsearch.yml 次のプロパティを追加します。
    • cluster.indices.close.enable: true
  3. デプロイメントの作成プロセスの最後にElastic Cloudが提供するデプロイメント認証情報を保存します。
    • ユーザー名 elasticです。
    • のパスワードを入力します。 <password>となります。
  4. デプロイメントの概要ページから、 Elasticsearch Service エンドポイント をコピーします。 これは以下のようになります。
  5. Liferay DXPの停止
  6. com.liferay.portal.search.elasticsearch7.configuration.config[Liferay-Home]/osgi/configs に以下の内容で作成します。
    • DXP 7.3:
      • networkHostAddresses=["https://5b8cfb0167c54ab4afb1bbd157471f77.us-west1.gcp.cloud.es.io:9243"]
        productionModeEnabled=B"true"
        username="elastic"
        password="<password>"
        authenticationEnabled=B"true"
        httpSSLEnabled=B"true"
        truststorePassword="changeit"
        truststorePath="/PATH/TO/JDK/cacerts"
        truststoreType="jks"
      • networkHostAddresses: この単一のトランスポート・アドレス(Elasticsearch Endpointから導き出すことができます)は、コネクタの設定で設定する必要がある唯一のものです。
      • truststorePath:JDK 11の場合は JAVA_HOME/lib/security 、JDK 8の場合は JAVA_HOME/jre/lib/security にある、JDKのデフォルトの cacerts ファイルを指します。 パスワードのデフォルトは changeitです。
      • Elastic Cloudの セキュリティ関連の制限 もご覧ください。
    • DXP 7.2:
      • clusterName="5b8cfb0167c54ab4afb1bbd157471f77"
        clientTransportSniff=B"false"
        operationMode="REMOTE"
        transportAddresses=["5b8cfb0167c54ab4afb1bbd157471f77.us-west1.gcp.cloud.es.io:9343"]
      • clusterName: あなたのElasticsearch Endpointから来ています。
      • clientTransportSniff: スニッフィングを無効にする必要があります (ref.) 。
      • transportAddresses: この単一のトランスポート・アドレス(Elasticsearch Endpointから導き出すことができます)は、コネクタの設定で設定する必要がある唯一のものです。 "Elasticsearch Service にホストされているデプロイメントは、トランスポート クライアントが Elasticsearch クラスタと直接通信できないようにするプロキシの後ろにあります" (ref...)。 9343を使うことを忘れないでください。
  7. (On DXP 7.2 only) com.liferay.portal.search.elasticsearch7.configuration.XPackSecurityConfiguration.config[Liferay-Home]/osgi/configs に以下の内容で作成します。
    • certificateFormat="PKCS#12"
      sslKeystorePath=""
      sslKeystorePassword=""
      sslTruststorePath="/PATH/TO/cacerts.p12"
      sslTruststorePassword="changeit"
      requiresAuthentication=B"true"
      username="elastic"
      password="<password>"
      transportSSLVerificationMode="certificate"
      transportSSLEnabled=B"true"
    • sslTruststorePath: 以下のコマンドで、JDKのデフォルトの cacerts ファイルからすべてのエントリをPKCS#12ファイルにエクスポートできます。 keytool -importkeystore -srckeystore /PATH/To/JDK/cacerts -srcstorepass changeit -destkeystore /PATH/TO/cacerts.p12 -deststoretype PKCS12 -storepass changeitとなります。
    • Elastic Cloudの セキュリティ関連の制限 もご覧ください。
  8. (DXP 7.2 のみ) Connector to Elasticsearch 7 が以前にデプロイされていない場合、ダウンロードして LPKG ファイルを [Liferay-Home]/osgi/marketplace に置いてください。の場合
  9. Liferay DXPの起動
  10. コントロールパネルの検索管理画面で、接続情報を確認します(DXP 7.1の場合)。 すべてが正常に動作していれば、このように表示されます。
    • Search Engine Vendor: Elasticsearch, Client Version: 7.3.0, Nodes: 5b8cfb0167c54ab4afb1bbd157471f77: [instance-0000000001 (7.11.1), instance-0000000000 (7.11.1), tiebreaker-0000000002 (7.11.1)]
  11. 完全なインデックスの再作成を行い、スペルチェックのインデックスも再作成します。

環境 - Elastic Stack 6.8.x

解決方法 - Elastic Stack 6.8.x

  1. Pre: デプロイメントのカスタマイズ画面で、必要な4つのアナライザー・プラグイン(analysis-icu, analysis-kuromoji, analysis-smartcn, analysis-stempel)が設定されていることを確認してください。
  2. デプロイメントの編集画面の ユーザー設定オーバーライド セクションの下 elasticsearch.yml 次のプロパティを追加します。
    • cluster.indices.close.enable: true
  3. デプロイメントの作成プロセスの最後にElastic Cloudが提供するデプロイメント認証情報を保存します。
    • ユーザー名 elasticです。
    • のパスワードを入力します。 <password>です。
  4. デプロイメントの概要ページから、 Elasticsearch Service デプロイメント エンドポイント をコピーします。 これは以下のようになります。
  5. Liferay DXPの停止
  6. com.liferay.portal.search.elasticsearch6.configuration.config[Liferay-Home]/osgi/configs に以下の内容で作成します。
    • clusterName="5b8cfb0167c54ab4afb1bbd157471f77"
      operationMode="REMOTE"
      transportAddresses=["5b8cfb0167c54ab4afb1bbd157471f77.us-west1.gcp.cloud.es.io:9343"]
      clientTransportSniff=B"false"
    • clusterName: Deployment Endpointから来ています。
    • clientTransportSniff: スニッフィングを無効にする必要があります (ref.) 。
    • transportAddresses: この単一のトランスポート・アドレス(Elasticsearch Endpointから導き出すことができます)は、コネクタの設定で設定する必要がある唯一のものです。 "Elasticsearch Service にホストされているデプロイメントは、トランスポート クライアントが Elasticsearch クラスタと直接通信できないようにするプロキシの後ろにあります" (ref...)。 9343を使うことを忘れないでください。
  7. com.liferay.portal.search.elasticsearch6.xpack.security.internal.configuration.XPackSecurityConfiguration.config[Liferay-Home]/osgi/configs に以下の内容で作成します。
    • certificateFormat="PKCS#12"
      sslKeystorePath=""
      sslKeystorePassword=""
      sslTruststorePath="/home/tibusz/liferay/bundles/cacerts.p12"
      sslTruststorePassword="changeit"
      requiresAuthentication=B"true"
      username="elastic"
      password="<password>"
      transportSSLVerificationMode="certificate"
      transportSSLEnabled=B"true"
    • sslTruststorePath: 以下のコマンドで、JDKのデフォルトの cacerts ファイルからすべてのエントリをPKCS#12ファイルにエクスポートできます。 keytool -importkeystore -srckeystore /PATH/To/JDK/cacerts -srcstorepass changeit -destkeystore /PATH/TO/cacerts.p12 -deststoretype PKCS12 -storepass changeitとなります。
    • Elastic Cloudの セキュリティ関連の制限 もご覧ください。
  8. Liferay Enterprise Search Security が以前に展開されていない場合 [Liferay-Home]/osgi/marketplace に配置します。
  9. Liferay DXPの起動
  10. コントロールパネルの検索管理画面で、接続情報を確認する
    • DXP 7.2の場合。 すべてが正常に動作していれば、以下のように表示されます。
      • Search Engine Vendor: Elasticsearch, Client Version: 6.8.6, Nodes: 5b8cfb0167c54ab4afb1bbd157471f77: [instance-0000000001 (6.8.10), instance-0000000000 (6.8.10), tiebreaker-0000000002 (6.8.10)]
    • DXP 7.3の場合: 「接続」タブに移動し、「アクティブな接続」セクションを見ます。
      • DXP-7.3-with-ES-on-EC-Connections.png
  11. 完全なインデックスの再作成を行い、スペルチェックのインデックスも再作成します。

Enterprise Search Monitoring/X-Pack Monitoringの設定

ホスティングされたKibanaに接続するために Liferay Enterprise Search Monitoring を設定することは Kibana Service server.rewriteBasePath などの必要なユーザー設定をサポートしていないので できません。basePathserver.rewriteBasePath.

トラブルシューティング

サーバーの証明書のダウンロードとインポート

通常、Azure、AWS、GCPのサーバーの証明書は、信頼できるCAによって署名されているため、JDKのデフォルトの cacerts ファイルで十分です。 接続に問題がある場合(NoNodeAvailableExceptionなど)は、サーバーの証明書を取得してインポートし、DXPのコネクタ設定で使用してみてください。

  1. お使いのElasticsearch Deploymentの証明書をダウンロードしてインポートしてください。
    1. サーバーの証明書をPEM形式でダウンロードします(ブラウザのHTTPS接続検査ツールや、 opensslを使用した場合など)。
      • openssl s_client -connect 5b8cfb0167c54ab4afb1bbd157471f77.us-west1.gcp.cloud.es.io:9243 -showcerts
      • サーバーのBase-64エンコードされたテキスト gcp.cloud.es.io (「-----BEGIN CERTIFICATE-----」と「 "-----END CERTIFICATE -----」の間)が対象の証明書です。
    2. 証明書のテキストを server.pemというファイルにコピーします。
    3. サーバーの証明書をクライアント(Liferay DXP)の PKCS# 12 形式のトラストストア(elastic-certificates.p12、すでに作成していることを想定)にインポートします。
      keytool -importcert -keystore elastic-certificates.p12 -storepass <password> -alias <preferred-alias> -file server.pem
  2. この.p12ファイルを使用するために、コネクタの構成を更新します。

Elastic Cloudの制限について

Elastic Cloudでは、ElasticsearchとKibanaのすべての機能と構成がサポートされているわけではありません。 詳細は以下の記事をご参照ください。

https://www.elastic.co/guide/en/cloud/current/ec-restrictions.html

クラウドプロバイダーの制限

選択したクラウドプロバイダーやサブスクリプションの方法によっては、Elasticsearch Serviceのデプロイメントに追加の制限が適用される場合があります。 どの機能が影響を受けるかについては、以下の資料をご参照ください。


Liferay DXPで利用可能なElasticsearchコネクタの技術的な概要については、こちらの記事 をご覧ください

* 括弧内のパッチレベルとMarketplaceのバージョンは、この記事の作成に使用されたバージョンを示しています。 その他の互換性のある環境については、互換性マトリックスをご覧ください。

** この記事では、デプロイのカスタマイズ画面で、analysis-icu、analysis-kuromoji、analysis-smartcn および analysis-stempel) を使用して、Elastic Cloud のテストを実施しました。

この記事は役に立ちましたか?
1人中1人がこの記事が役に立ったと言っています