Fess 15.4から、Amazon S3やGoogle Cloud Storage(GCS)を対象としたs3://スキームとgcs://スキームが、ファイルシステムクロールに追加されました。これにより、クラウドストレージ上に保存しているドキュメントやログファイルなどを、専用のスキームを指定するだけでFessの検索対象として取り込めるようになります。
第66回 ファイルシステムクロールでS3をクロールするでは、汎用的なstorage://形式のパスを利用してS3バケットをクロールする方法を紹介しました。今回は、新たに追加されたs3://スキームを指定して、S3バケット内のファイルをクロールし、全文検索できるようにする手順を説明します。
今回は、Fess 15.7.0を利用して、手順を説明します。
s3スキームによるクロールとは
Fessのファイルシステムクロールは、ローカルのファイルパスだけでなく、storage://・s3://・gcs://といったスキームを指定して、クラウドストレージ上のファイルもクロールできます。これらのスキームはいずれもFess本体に標準で組み込まれているため、追加のプラグインは必要ありません。
s3://スキームは、AWS SDKを利用してAmazon S3(およびMinIOなどのS3互換ストレージ)にアクセスします。第66回で紹介した汎用のstorage://スキームでもS3をクロールできますが、s3://スキームを使うことで、Amazon S3を対象としていることが設定上わかりやすくなります。
なお、第46回 Amazon S3のクロールで紹介したfess-ds-s3プラグインは、データストアクロールとして動作する別方式であり、こちらはプラグインのインストールが必要です。用途に応じて使い分けてください。
s3スキームのクロール設定
s3://スキームを指定したファイルシステムクロールを設定します。S3への接続に必要なエンドポイントや認証情報は、クロール設定の「設定パラメータ」で指定します。
クロール設定の作成
管理画面の「クローラー」>「ファイルシステムクロール」>「新規作成」をクリックして以下を入力します。
- 名前
- パス
- 設定パラメータ
「名前」には任意のクロール設定の名前を入力します。
今回は例として、S3上に作成した「fess-testdata」バケットをクロールするため、「パス」には以下のように入力しました。クロール対象のS3バケットに合わせて、「fess-testdata」の部分を置き換えてください。バケット名はパスの一部として指定するため、設定パラメータでは指定しません。
s3://fess-testdata/
「設定パラメータ」は次のように記述します。
client.endpoint=[エンドポイントURL]
client.accessKey=[アクセスキー]
client.secretKey=[シークレットアクセスキー]
client.region=[リージョン]
client.endpointには、S3のエンドポイントを指定します。AWS S3の場合はhttps://s3.<リージョン>.amazonaws.comの形式です(例:https://s3.ap-northeast-1.amazonaws.com)。client.endpoint、client.accessKey、client.secretKeyは必須です。client.regionは省略でき、省略した場合はus-east-1が使用されます。
アクセスキー、シークレットキーの作成については、第66回 ファイルシステムクロールでS3をクロールするの「認証情報の取得」の章を参照してください。

上記を入力後、「作成」ボタンをクリックします。
クロール範囲の絞り込み
バケット全体ではなく、特定のフォルダー配下だけをクロールしたい場合は、「パス」にプレフィックスまで含めて指定します。たとえば、logs/配下のみを対象とする場合は、以下のように指定します。
s3://fess-testdata/logs/
特定のフォルダーやファイルをクロール対象から外したい場合は、クロール設定の「クロール対象から除外するパス」に正規表現を指定します。この条件は、クロールするURL全体(s3://バケット名/...)に対して評価されます。たとえば、work/フォルダー配下を除外する場合は、以下のように指定します。
s3://fess-testdata/work/.*
なお、「クロール対象とするパス」に指定した正規表現も、起点のパスや途中のフォルダーを含むすべてのURLに対して評価されます。このため、拡張子など末端のファイル名だけにマッチする条件(例:s3://fess-testdata/.*\.log)を指定すると、中間のフォルダー(s3://fess-testdata/logs/)が条件にマッチせず、その先のファイルまでたどれなくなります。対象を絞り込む場合は、パスのプレフィックスや除外指定を利用してください。
クロールの実行
クロール設定の登録後、「システム」>「スケジューラ」>「Default Crawler」から「今すぐ開始」をクリックします。 クロールが完了したら、検索画面にアクセスして検索してみましょう。 S3バケットに保存されたファイルが検索できれば成功です。

注意点
s3://スキームでクロールする際は、以下の点に注意してください。
-
認証情報:認証には静的なアクセスキーとシークレットキーを使用します(IAMロールやインスタンスプロファイルによる認証には対応していません)。クロールには最低限
s3:ListBucketとs3:GetObjectの権限が必要です。第66回で付与したAmazonS3ReadOnlyAccessポリシーであれば、これらを含む読み取り権限がまとめて設定されます。 -
エンドポイント:実際のAWS S3を対象とする場合でも、エンドポイントの指定は必須です。
https://s3.<リージョン>.amazonaws.comの形式で、対象バケットのリージョンに合わせて指定してください。 -
リージョン:
client.regionはリクエストの署名にも使用されます。エンドポイントのリージョンと一致しないと認証エラーになる場合があるため、バケットのリージョンに合わせて指定してください。 -
S3互換ストレージ:FessはS3へのアクセスに、バケット名をパスに含める「パススタイル」(
<エンドポイント>/<バケット名>/<オブジェクトキー>)でリクエストします。そのため、MinIOなどのS3互換ストレージに対しても、エンドポイントを変更するだけで同じ手順でクロールできます。 - ファイルサイズの上限:クロール対象とするファイルサイズには上限があります。大きなファイルを取り込む場合の設定は「第62回 クロール対象のファイルサイズ上限の設定」を参照してください。
まとめ
今回は、s3://スキームを指定して、Amazon S3のバケット内のファイルをクロールする方法を紹介しました。
S3上に保存しているファイルをFessの検索対象にすることで、クラウドストレージに蓄積されたドキュメントやログなどを、通常のファイルと同じように全文検索できます。既にS3をファイル保管先として利用している場合は、Fessと連携することで、既存データを検索基盤に取り込みやすくなります。