CloudSearchを使ってみた

# はじめに

SAPの勉強中に`CloudSearch`というサービスを初めて知ったので試しに触ってみます。

# CloudSearchの概要

- ウェブサイト、アプリケーション向けの検索機能を実装できるフルマネージド型サービス
- アーキテクチャ
 - 構成サービス：検索ドメイン作成・構成
 - ドキュメントサービス
 - 検索サービス
- 検索インスタンスが1つ以上存在(自動的にスケールアップ・スケールアウト)
- アップデートが2015年で停止（https://aws.amazon.com/jp/cloudsearch/whats-new/）


# 料金

- 初めての使用の場合、30日間無料
- 通常料金
 - 検索インスタンスタイプsearch.m1.small $0.082/hour
 - マルチAZなら単純に倍
 - ドキュメントバッチのアップロード $0.1/1000件
 - IndexDocumentsリクエスト(インデックス構成変更) $0.98/検索ドメインに格納されたデータ1GB
 - データ転送(イン) 無料
 - データ転送(アウト) 最初の10TB/月 $0.14/1GB
 - データ転送量は少し複雑なので鵜呑みにせず公式サイト参照のこと

https://aws.amazon.com/jp/cloudsearch/pricing/ 

# 使ってみた

コンソールからCloudSearchに移動し、`Create a new search domain`をクリック。

![スクリーンショット 2021-04-21 22.01.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/3e68b425-a0e7-b14b-92db-8bbd3a8e211b.png)

ドメイン名やインスタンスタイプなどを以下の通り入力。

|項目|値|
|---|---|
|Search Domain Name|test|
|Desired Instance Type|Use default (search small)|
|Desired Replication Count|Use default (0)|

`Use default`の既定値は、ドメイン作成後に以下の通りcliを使用して確認しました。

```sh:
[cloudshell-user@ip-10-0-142-142 ~]$ aws cloudsearch describe-scaling-parameters --domain-name test
{
    "ScalingParameters": {
        "Options": {
            "DesiredReplicationCount": 0,
            "DesiredPartitionCount": 0
        },
        "Status": {
            "CreationDate": "2021-04-21T13:53:50.348000+00:00",
            "UpdateDate": "2021-04-21T13:53:50.348000+00:00",
            "UpdateVersion": 15,
            "State": "Active",
            "PendingDeletion": false
        }
    }
}
[cloudshell-user@ip-10-0-142-142 ~]$ aws cloudsearch describe-domains --domain-name test --query DomainStatusList[*]["SearchInstanceType"]
[
    [
        "search.small"
    ]
]
```

インスタンスタイプとレプリケーションカウントは後から変更可能です。
あらかじめ大量のトラフィックやデータが予想されている場合、最初の設定時からインスタンスタイプなどを大きく設定できます。
CloudSearchは自動的にスケールしますが、希望したインスタンスタイプやレプリケーションカウントを下回ることはありません。
設定した内容を下限として動作します。

![スクリーンショット 2021-04-21 22.08.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/1c563b9e-bd17-b5c5-cebe-c22d3a96647f.png)

今回、インデックス作成にはデモを使用します。

![スクリーンショット 2021-04-21 22.09.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/1f3359ee-8185-076a-5070-1b3d2116dfed.png)

デモを使用しているので、良い感じに設定してくれています。
実際に自分が設定するとなると時間がかかりそうですね。

![スクリーンショット 2021-04-21 22.10.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/ac68138a-0f90-7197-9980-ef692c4496d4.png)

自分が使用しているグローバルIPアドレスを指定します。

![スクリーンショット 2021-04-21 22.12.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/6d731be2-1888-f91c-7e80-ed9d8bf3dcaf.png)

内容を確認します。

![スクリーンショット 2021-04-21 22.13.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/5c982d82-a26f-601a-40eb-ec7a111ad79f.png)

ドメインの初期化に10分ほど時間がかかります。

![スクリーンショット 2021-04-21 22.14.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/c5d74612-71a8-94c7-e569-3e00b3eec857.png)

完了するまで待ちます。

![スクリーンショット 2021-04-21 22.14.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/960d5c3f-3ac6-3aeb-22eb-b88f6d98126b.png)

完了しました。
ドキュメントがないので、デモをダウンロードします。

![スクリーンショット 2021-04-21 23.01.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/3af1a557-c550-5dd3-7e7d-5c6a139dd4cd.png)


![スクリーンショット 2021-04-21 23.03.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/b52a8870-52d5-a432-ca0f-bd52223af63f.png)

5000のドキュメントがアップロードされます。

![スクリーンショット 2021-04-21 23.04.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/eee7b526-d4d3-9b98-514c-e15ff9d5ad9c.png)

![スクリーンショット 2021-04-21 23.04.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/52786ba1-19a1-cc6a-f289-f621c398d86c.png)

`jackson`で検索をかけると一致するものが表示されました。

![スクリーンショット 2021-04-21 23.06.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/325b47ba-728c-c41e-7ddf-f5fdce576815.png)

ブラウザからエンドポイントを入力しても表示されます。
`Search Endpoint/2013-01-01/search?q=jackson&format=xml`

![スクリーンショット 2021-04-21 23.12.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/934edeed-5ce3-79d7-2bdb-f65706c18c43.png)

`Access Policy`を全て拒否に設定すると、以下のようにブラウザからの検索はできなくなります。

![スクリーンショット 2021-04-21 23.27.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/10b761c9-d326-a646-281f-6a15c9cdf1b4.png)

ブラウザからも検索できていたのは、`Access Policy`で自分のグローバルIPを許可していたからだということがはっきりと分かりました。

# おわりに

実際にアプリなどに組み込むときはどのようにするのか気になります。
今回の目的はとりあえずCloudSearchに触れてみることなので、ここまでにしておきます。