検索サーバFessのオンプレからAWSへの移行

オンプレのFessサーバをAWSに移行した際のメモです。

#Fessについて
公式サイト
https://fess.codelibs.org/ja/
「Fess (フェス) は「5 分で簡単に構築可能な全文検索サーバー」です。 Java 実行環境があればどの OS でも実行可能です。 Fess は Apache ライセンスで提供され、無料 (フリーソフト) でご利用いただけます。」
↓ 実際の検索画面は以下のような形です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/61971f73-59a3-2709-95dd-6d248a15c1d4.png)

#移行前構成
- 社内のサーバ室にてオンプレ運用
- OSはwindows 7
- ローカルに保管したhtml（約60万ファイル）を検索
- SSL化未対応
- 日次で新しい検索対象ファイルをwebからダウンロードし、webクロールを実施
- 同じくオンプレのファイルサーバに日次でバックアップするタスクを起動

　閉じたネットワーク内でしか使わないのであまり管理されていませんでした。

#移行後構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/814b2076-9fa3-0e7c-25df-3e850a0ff3ff.png)

- AWSにWindows Server2019のEC２を立て、Fessをインストールする
- EIP付与
- ALB+ACMでSSL化する
- セキュリティグループで社内のグローバルIPからのみアクセスを受け付ける
- 頻繁に使うサーバではないので、CloudFormationのEC2 Schedulerを使って稼働時間以外は停止させて節約する
- CloudWatchでALBの死活監視を行い、lambdaからSNS経由でslack通知させる
- Fessのクロールに関する設定は現行踏襲

　ユーザの使い勝手が変わらないようにという要件に沿って構成。

#移行概要
1. EC2構築  
当初はt2.microで作成したのですが、以下の理由で後でt2.largeに変更しました。
       - クロールが一日かかっても終わらない。（変更後は30分ほどに改善）
       - 検索結果が表示されるのに非常に時間がかかる。（30秒→1秒に改善）
    
2. Fessのインストール
EC2が完成したら、Fessをインストールします。  
https://fess.codelibs.org/ja/quick-start.html#fess
    - ブラウザからインストールする時にはInternet Explorerセキュリティ強化をオフにする必要があります。
    
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/181a15b9-a8f0-3c07-aff8-b48c1d5ca03e.png)

   - Javaのインストール
     - 公式サイトに従って最新版をインストールします。  
     https://www.oracle.com/java/technologies/javase-downloads.html
<img width="1158" alt="62B772AB-9A29-4752-99D5-8513C78C2FD4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/8aa72ba1-9640-c87d-1326-9a8216153546.png">

     - インストールしたJavaのパスを環境変数を登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/1c8be24c-07de-70bd-d273-6f5f53e80124.png)

3.Fess起動  

`./bin/fess.bat`で起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/7d30edab-977b-3743-9edd-4807e2aad65a.png)

 - WindowsのECのパーソナルFW（Windows Defender）を開けないと、外部からfessとしてアクセス出来ませんでした。fessで利用するポート（デフォルト：8080）の穴あけをする必要あります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/278e252d-c8bf-12b8-fe6e-da86d9c9304d.png)

4.Fessの設定

- webクロール
   - クロールジョブのスケジュールの設定をします。
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/25687303-40fb-6c47-3638-80f86fbdd81b.png)

   - sitemapの設定
      - 移行前の設定と同様に、sitemapをクロールのURLに設定します。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/d1a63e23-8e01-d9fa-528e-f33aedb7a4ee.png)

5.SSL化  
SSL化するには固定ドメインが必要なので、取得済みのドメインからサブドメインを登録して利用します。

  - Route53登録
fess用のサブドメインを登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/850cc1b4-f867-79d3-89f0-daa264577905.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/f91c2240-35d9-7efd-8365-6aaa0bcde78a.png)
レジストラ側のネームサーバの内容をRoute53側に登録します。
※画像はムームードメインのものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/294f573e-76e3-4de0-fb41-0b769075de16.png)

  - ACMからの証明書発行  
ACMでパブリック証明書のリクエストを行い、取得したサブドメインを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/064f46aa-5b52-a347-9b96-24c30ee32f83.png)
サブドメインがACMに登録されたら、証明書をALBに登録してFessとしてアクセスが可能になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/2953fbb6-d654-a621-d00a-f2f46b322df1.png)

#移行時に困った点

 - 構築当初はクロールに要する時間がとても長いので気をつける
   - EC2のインスタンスタイプt2.microの状態でしたが、検索対象となるhtmlファイルが約60万でクロールに３日以上かかりました。EC2のCPUが張り付いたらインスタンスタイプの変更要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/3cb2c50a-8e0c-5386-3e83-2d34ea74ec02.png)

 - 実際の検索に時間がかかる時
   -  EC2のインスタンスタイプの変更で解消。
 - 検索対象となるファイルの移行
    - 最初は現行サーバのDBを移行しようと思ったのですが、現行に影響を与えないという移行方針から、対象となるファイルを手動でコピーしました。Mac上で`rsync`などのコピーコマンドを実行しましたが、どうしてもコピー中にエラーが生じる（新旧で検索結果の件数が異なる）ので何度も繰り返すこととなりました。 

#今後の課題
全体の構成をterraformで管理しようと思います。