OpenSearch Serverlessが出た！ 従来版と触り比べながら再入門してみる

今年のAWS re:Invent 2022ではAnalytics系のアップデートが目白押しでした。
中でも、今年に入って多数の分析系サービスがサーバーレス化されていたなか唯一残っていた **OpenSearch Service** のサーバーレス版がようやく発表されました。

https://aws.amazon.com/jp/blogs/aws/preview-amazon-opensearch-serverless-run-search-and-analytics-workloads-without-managing-clusters/

私は業務上、クラウドでも昔ながらのWebアプリケーションに携わることが多く、データ分析や機械学習といった最近流行りの分野はあまりキャッチアップ出来ていないのですが、OpenSearchは辛うじて業務システムのログ分析用途などで使うことがあります。

そこで改めて　**従来のOpenSearch Serviceってどんなものだっけ？** をおさらいしながらサーバーレス版と一緒に実機で触り比べてみます。


# おさらい

## そもそもOpenSearchって何だっけ？

元々は **Amazon Elasticsearch Service** というサービス名でした。
Apache系のOSSであるElasticsearch（＋Kibana）をAWS上でマネージドに提供してくれるサービスです。

https://www.elastic.co/jp/elasticsearch/

Elasticsearchとは、一言でいうと「検索エンジン」です。
アプリケーションが出力したログの分析用途によく使われます。
その際、一緒に使われるツールと合わせて **「EFKスタック」** などと総称されます。
- Elasticsearch：ログ検索
- Fluentd：ログ転送
- Kibana：ログ分析＆可視化

※ちなみに名称変更の理由は、AWSがElasticsearchを自社の商用サービスとして利用することに対し、OSS開発元のElastic社が反発しライセンス規約を変更したためのようです。そのためAWSはElasticsearchのGitリポジトリをフォークし、OpenSearchという別プロダクトとして分岐開発していくこととなりました。

https://www.publickey1.jp/blog/21/awselasticsearchkibanaopensearchelastic.html

「EFKスタック」に並ぶ類似製品として、Splunkや **「PLGスタック」** などがあります。後者はCNCFファミリーで、クラウドネイティブ界隈で人気ですね。
- Promtail：ログ転送
- Loki：ログ保存
- Grafana：ログ分析＆可視化

## 従来版のAWS OpenSearch Serviceとは？

上記のElasticSearchをAWS上でマネージドに構築することができます。
ざっくり、以下のようなコンポーネントで構成されます。

![スクリーンショット 2022-12-04 20.40.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/59302b9f-644b-78ce-7d59-0d58a3ef6109.png)

- ドメイン：最上位の管理単位。OSS版でいう「クラスター」のAWS版の呼称。
- クラスター：ドメインの中で実際に稼働するノード群。（EC2のイメージ）
    - マスターノード：ノードの管理やインデックスの作成を行う。AWS版では他の役割と兼任させない「専用マスターノード」にすることを推奨されている。かつ3AZ構成（最低３ノード）が推奨。
    - データノード：実際にデータを保管・検索する。

ドメインに対してダッシュボード（Kibana相当）へのアクセス用エンドポイントが払い出されます。
ただしクラスターを自前VPCに配置（非パブリックアクセス）した場合、インターネットからダッシュボード用URLにそのままアクセスは出来ないので注意。


## 今回発表されたOpenSearch Serverlessとは？

上記のように従来のOpenSearch Serviceはノード群をある程度マネージドに構築・管理させてくれるのですが、クラスターやノード自体は利用者が意識して設計する必要がありました。

OpenSearch Serverlessでは、クラスターの設計・管理を隠蔽してサービスを提供してくれます。
![スクリーンショット 2022-12-04 20.40.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/ad3744a8-4dcd-48d2-1ad3-83970f3139ff.png)

- コレクション：最上位の管理単位。従来版でいう「ドメイン」がより利用目線に改称されましたね。
    - コレクションタイプ：「時系列」 or 「検索」から選べます。変更不可。


# 実際に触ってみる

### 従来版OpenSearch

コンソールのトップで `Managed Clusters` を選ぶと従来版のOpenSearch Serviceを利用開始できます。
![スクリーンショット 2022-12-04 19.21.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/2398cf25-35e2-80c6-ba45-29e6eef4508b.png)

まずはドメイン名を指定します。
![スクリーンショット 2022-12-04 19.23.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/5e062e53-de4a-60d9-f25f-890224ad3d1c.png)

「デプロイタイプ」セクションで用途を選びます。
![スクリーンショット 2022-12-04 19.24.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/36b6c127-6e69-49c6-464a-2d3b046d21e2.png)

「データノード」セクションでインスタンスタイプやノード数、EBSボリュームのサイジングを指定します。
![スクリーンショット 2022-12-04 19.25.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/9122598d-d445-464d-ff4d-f86ec93ce2ff.png)

マスターノードのサイジングも指定します。
![スクリーンショット 2022-12-04 19.26.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/7d8eb521-614c-84e4-a4fd-63ccf36fe827.png)

利用者自身のVPC内で管理するか否かを選択します。
「VPCアクセス」を選ぶとプライベートなネットワーク内でのみアクセスでき、セキュリティが向上します。
その場合、VPCやサブネット、セキュリティグループを指定します。
![スクリーンショット 2022-12-04 19.27.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/9fc0b860-6c1b-2891-0345-86505c3d00bf.png)

「作成」ボタンをポチッと押すと、ドメインが構築できました。デプロイタイプを商用にしてしまったこともあり、構築に数十分以上とかなり待たされました。
![スクリーンショット 2022-12-04 19.49.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/4b37023e-c8c8-5968-edc9-c61a20e9b386.png)

ダッシュボードのエンドポイントURLを試しにクリックしてみましたが、ウィザード内で「きめ細やかなアクセスコントロール」を有効にしていたため、ユーザー設定を正しく行わないとアクセスできないようです。残念。
![スクリーンショット 2022-12-04 19.52.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/e58885a2-2ed3-a782-e5ee-5384969f16e9.png)

プロビジョンド版はこんな感じでした。
続いて、サーバーレス版も同じように環境作成して見比べてみましょう。

### OpenSearch Serverless（プレビュー版）

すでに東京を含めたいくつかのリージョンでプレビュー版がリリースされています。
コンソールのトップで `Serverless - preview` を選択するとサーバーレス版を利用開始できます。
![スクリーンショット 2022-12-04 19.21.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/2398cf25-35e2-80c6-ba45-29e6eef4508b.png)

最初にダッシュボードが起動します。 `Get started` から作成を開始してみます。
![スクリーンショット 2022-12-04 19.32.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/fbdb3775-fdc4-3e06-b22e-e8893755dff9.png)

ウィザードもまだ英語ですね。
プロビジョンド版との大きな違いとして、ドメインではなく「コレクション」を作成していきます。
名前を付けて、時系列 or 検索の用途を選択します。
![スクリーンショット 2022-12-04 19.35.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/65d497a0-3da8-7fb2-90e0-1f7af3480867.png)

他にはKMS暗号化設定のほか、ネットワークタイプの設定ぐらいとかなりシンプルになっています。
ノード関連の設定がまるまる無くなっていて楽チンですね！

サーバーレス版でもパブリックアクセスだけではなくVPCタイプも選択できます。その場合、VPCエンドポイントを指定するようになっています。
![スクリーンショット 2022-12-04 19.37.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/02c1431e-caf6-d34c-4eb3-937e48b72911.png)

`Create` ボタンをポチッと押すと、プロビジョンド版よりもかなり短時間で環境準備が完了しました。
![スクリーンショット 2022-12-04 19.45.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/9ed37399-d81e-e883-409d-80e62987704f.png)

検索対象のデータ自体の設定はしていませんが、 `OpenSearch Dashboards` ボタンを押すとダッシュボードのログイン画面にアクセスできました！
![スクリーンショット 2022-12-04 19.48.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/7204935d-90a2-3202-12b4-00df32bd72b4.png)


# まとめ

恥ずかしながら私もOpenSearch Serviceを商用環境で利用してはいるのですが、実際の設定は共通機能の担当チームにお願いしてしまっていたこともありサービスをちゃんと理解できていませんでした。

今回、新サービス紹介にチャレンジしつつ実際に新旧双方を実機で触ってみることでかなり理解が深まりました。
クラウドの新サービス発表は、こうやって自分がちゃんと知らなかった分野を改めて学び直す機会にできると、楽しさが倍増しますね！