WIP：OpenSearch に関してServerless(Preview)を使うとコストが激安になるのか気になって調べてみた

# ※※※注意※※※
本記事は、OpenSearch Serverlessを使う場合のコストメリットについて気になって書いた記事です。
一方で、キャパシティの消費量が読めない特性上、執筆時点(12/23)では結論を出すことできていません:cry:追記予定！

# 背景
最近AWSのデータ系サービスのserveless化が活発ですね。
 * [Aurora Serverless v2](https://aws.amazon.com/jp/rds/aurora/serverless/)(re:Invent 2020)
 * [Redshift Serverless](https://aws.amazon.com/jp/redshift/redshift-serverless/)(re:Invent 2021)
 * [Neptune serverless](https://aws.amazon.com/jp/neptune/serverless/)(2022)
 * [MSK Serverless](https://aws.amazon.com/jp/msk/features/msk-serverless/) (2022)
 * [EMR Serverless](https://aws.amazon.com/jp/emr/serverless/)(2022)
 * etc ...

そんな中、re:Invent 2022でOpenSearch Serverless (Preview)が発表されました！
私は普段Elastic Cloud上でElasticsearch + Kibanaをベースにしたデータ分析基盤を運用しているのですが、
以下のような点でリソースを持て余している状態です。
 * Kibanaを用いた分析が主であるためデータの参照頻度が多くはない。
 * 開発用デプロイメントについてはさらに参照頻度が少ない。
 * 参照する際には大規模なデータの集計を行う場合もある。

そのため、OpenSearch側がServerlessになったと聞いて、
もしも自分のやりたきことがServerlessの提供形態でできるのであれば、大きなコストメリットがあるのでは、、、、？と気になっています。

そのため、検証してみました！

# コスト形態の調査
コスト形態を見てみます、、、

https://aws.amazon.com/jp/opensearch-service/pricing/

## 通常のOpenSearchの価格要素:
 * データノードのインスタンス料金
 * マスタノードのインスタンス料金
 * ストレージ（EBSボリューム）の料金
 * (標準の AWS データ転送料金)
前提によって色々と変わるので、AWSの料金例をそのまま参考にします。
> Amazon OpenSearch Service を初めて使用し、米国東部 (バージニア北部) リージョンでドメインを作成しているとします。
> 3 つの t3.small.search インスタンスと、各インスタンスに 15 GB のストレージを使用してサービスをテストしています。


| コストタイプ | 価格 | 使用法 | 無料利用枠 | 請求使用量 | １か月あたりの費用 |
|:-:|:-:|:-:|:-:|:-:|:-:|
|  インスタンスの使用 | t3.small.search = 1 時間あたり $0.036  |  3 インスタンス * 1 か月で 730 時間 = 2,190 時間 | 750時間  | 2,190 時間 – 750 時間 =。1,440時間  |  1,440 * ＄0.036 = ＄51.84 |
|  保管コスト |  EBS 汎用 SSD (gp2) = 月額 1 GB あたり $0.135 | 15 GB * 3 インスタンス = 45 GB/月  | 10GB  | 	45GB – 10GB = 35GB  | 35 * ＄0.135 = ＄4.725  |

総費用 ＄56.57

## OpenSearch Serverlessの価格要素：

では、同じような条件で OpenSearch Serverlessでやるとどうなるのか考えたかったのですが、、、
以下の通り、OpenSearch コンピューティング ユニット (OCU)単位のリソース時間で課金がされ、
どのくらいのクエリでどのくらいのOCUを使うかが分からないため、精緻な見積もりが難しいです、、、、。:cry:

> Amazon OpenSearch Serverless では、ワークロードによって消費されたリソースに対してのみ料金が発生します。
> OpenSearch Serverless は、コンピューティングとストレージに対して個別に課金されます。
> コンピューティング容量は、OpenSearch コンピューティング ユニット (OCU) で測定されます。
> OCU の数は、データのインデックス作成やクエリの実行に必要な CPU、メモリ、Amazon EBS ストレージ、および I/O リソースに直接対応します。
> 1 つの OCU は、6 GB の RAM、対応する vCPU、GP3 ストレージ (最も頻繁にアクセスされるデータへの高速アクセスを提供するために使用)、および Amazon Simple Storage Service (S3) へのデータ転送で構成されます。

| リソースタイプ | 価格 |
|:-:|:-:|
| OpenSearch コンピューティング ユニット (OCU) - インデックス作成  |  1 時間あたり OCU あたり$0.24 |
| OpenSearch Compute Unit (OCU) - 検索とクエリ  | 1 時間あたり OCU あたり$0.24  |
| マネージド ストレージ  |  月額1 GB あたり$0.024 | 

そのため、一旦立ててみて、一定期間普通に運用してどのくらいかかるかを見る必要がありそうです。

# とりあえず立ててみた

とりあえずServerlessでOpensearchを立ててみます。

コンソールからServerlessを選択してスタート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3063671/fb36b81a-a12e-a10b-5db0-550399a5462a.png)

Collectionという単位で管理する様子。Time seriesなのかSearchなのかなど、用途をここで指定している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3063671/6a86497f-892d-8ccc-f2f8-57ff22fa205a.png)

簡単な設定を行い立ててみる。アクティブになるまで待つ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3063671/3f4ab5db-1112-394a-f61e-5d2c5cfa62fa.png)

アクティブになった！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3063671/8050ff3c-badc-4675-7b87-c5d93a1cf832.png)

URLからdashboardを開きデモデータをロードする→見られない、、、。(401)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3063671/f8ac6214-1c9d-b528-5417-f41bd538e77d.png)

Data access policiesからインデックスやコレクションに対するアクセス権限が設定できる。設定してみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3063671/84ddfccc-883a-1e10-57fd-d0d1372c5947.png)
※add principalで対象のiamユーザを設定してます。

みられた！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3063671/ecc0d071-6d81-3a6c-892d-e851de5983a1.png)

マネジメントコンソールから消費コンピューティングユニットが見られました。時間単位が分からないですが、恐らくほとんど振れていない状態。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3063671/144e6d69-85a4-9622-90f1-e0ec6df19e98.png)


試すの自体はとてもサクサクできました！

# まとめ

当初予定したコスト見積もりは、しばらく試して実績を見る形になりそうです。:cry::cry::cry:
一方で、試すのはサクサクできそうだったので、プロジェクトのログ分析を試してみて、
参照頻度やデータ量を基にコストのあたりをつけられればと思います！