2024-01-11 機械学習勉強会
Amazon OpenSearch Service
概要
- オープンソースの分散型検索・分析スイート
- OpenSearch Project によって開発され、Apache 2.0ライセンスで提供されている
- データストア、検索エンジンの OpenSearch、可視化、UI ツールの OpenSearch Dashboards から構成されている
- セキュリティ、パフォーマンス分析、機械学習など様々なプラグインによる機能拡張が可能
- OpenSearch Project
- AWSだけでなく多くの個人も参画している
- Dashboardなどの周辺ツールや各言語のSDKなどの開発が行われている
- Community Projects
- Enterprise Search サーバーの Fess 、 GUI クライアントの Diggie、Kafka コネクタなどの様々なサードパーティー製品が OpenSearchをサポートしている
基本概念
- ドキュメント
- インデックス
- ドキュメントの格納先。テーブルのようなもの。
- 2種類のOpenSearch REST APIを通じてインデクシングがなされる
- index API
- 新しく生まれるデータをリアルタイムでインクリメンタルにインデクシングしたい場合に利用
- _bulk API
- データのフローの頻度が低い場合や、一回にたくさんのデータをインデクシングしたい場合に利用
- インデックスの制約
- サイズ
- インデックスの_idフィールドは512バイト以下でないとならない
- 命名
- インデックス名は以下の文字列を含むことができない
- , , , , , , , , , , or
- インデックス エイリアス
- エイリアスは仮想のインデックス名であり、1つ以上のインデックスを指すことができる
- 例えば、複数のインデックスに検索対象が分断されている場合、どのインデックスに対してクエリを投げるが都度制御するよりも、エイリアスを作って横断的に検索することが可能になります。
- また、インデックスの向き先はいつでも変更可能なため、再インデックス時にダウンタイムなしで移行が可能になります
- Re-Indexing
- インデックス作成後にフィールドの追加や複数のインデックスの統合など、インデックスを一から作り直したいケースがある
- 一度削除してインデックスを再構築するのではなく、reindexを使うことで、クエリを通じて取得したデータを新しいインデックスにコピーすることができます。
- シャード
- インデックスの実体。
- 1 つ以上のシャードでインデックスは構成されている。
- シャードを複数のデータノードに分散配置することで、高いスケーラビリティ を獲得
- レプリカを設定することで、単一ノード障害時のデータ欠損を防ぐことが可能。 合わせて、検索処理をスケールさせることが可能。
- シャード数はインデックス作成後に変更することができないが、レプリカ数は随時変更可能
- →図の例だとシャードが3つレプリカが1つだが、シャード3つは固定でレプリカ数を2とかにできる。
- [tomoaki] シャード数 =< レプリカ数になると、同じシャードに同じレプリカが入るのであまり意味がなさそう?
- クラスター/ノード
- OpenSearch クラスターは 1 つ以上のノードで構成されている
- 各ノードは 5 つの役割に分かれている。単一のノードで複数の役割を兼任することも可能
- Cluster manager
- クラスターの全体的な運用を管理し、クラスターの状態をモニタリングする。これには、インデックスの作成と削除、クラスターに参加および離脱するノードのモニタリング、各ノードの健康状態の確認(ピングリクエストの実行による)、およびノードへのシャードの割り当てが含まれます。
- Data
- データの保存と検索を行う。すべてのデータ関連操作(インデックス作成、検索、集計)をローカルシャードで実行する。これらはクラスターのワーカーノードであり、他のノードタイプよりも多くのディスクスペースが必要。
- Ingest
- クラスターに保存する前にデータを事前処理し、インデックスに追加する前にデータを変換するインジェストパイプラインを実行します。
- Coordinating
- クライアントのリクエストをデータノード上のシャード渡し、結果を収集・集約して最終結果を一つにまとめ、結果をクライアントに返送する
- ドメイン
- OpenSearch クラスター、およびクラスターと連携する AWS サービスの総称
- クラスターのノードはデータノード、専用マスターノード、UltraWarm ノードの 3 種類
利用時のTips・豆知識
- エンドポイント
- OpenSearch ドメインごとに、API 用のエンドポイント、ダッシュボードアクセス用のエンドポイントの 2 つが存在する
- 両エンドポイントともドメイン名は同じで、パスのみが異なる
- ネットワーク経路
- VPC と Public のどちらにエンドポイントを配置するかをドメイン作成時に指定することができる
- VPC エンドポイントに対しては、 VPC 内からのみアクセス可能。インターネット経由の 直接アクセスは不可
- Public エンドポイントについてはインターネットから直接アクセス可能。VPC 内からのアクセスについては NAT Gateway を経由する必要あり
- クエリの書き方
- これだけで別途勉強会できるので今回は扱わない
- データの分析
- OpenSearch Dashboards
- 概要
- OpenSearch にバンドルされている可視化ツール
- シンプルなログの検索、可視化に加えて、アプリケーショントレース分析などの、高度な 分析機能も提供
- アラートの設定など、OpenSearch の設定管理機能も付属している
- OpenSearchに格納されたデータを分析する際の最初の選択肢
- Index Patterns
- 分析対象の Index グループ。1 つ以上の Index を登録可能
- 複数 Index を含める場合は、logs-* などワイルドカードを指定する
- Index Patterns は OpenSearch Dashboards 上でのみ利用可能
- Discovery
- Index Patterns に対する検索を行う機能
- OpenSearch の全文検索機能によるドキュメントの部分一致検索、フィルタなどをサポート。障害調査、セキュリティインシデント調査、問い合わせ検索など様々なケースで利用可能
- Visualize
- Index Patterns のデータを可視化する機能
- 作成したグラフは Visualizations として保存し、ダッシュボードに張り付け可能
- Vega
- カスタムビジュアルを作成できる機能
- Vega-lite と呼ばれる JSON 形式の設定から、散布図などの複雑な描画を行ことが可能
- TSVB (Time Series Visual Builder)
- 時系列データを可視化するためのビルダーツール
- 同一データから複数タイプのビジュアル生成が可能
- アノテーションや閾値などをグラフに追加することが可能
- Coordinating Map/Region Map
- データセットに含まれる緯度と経度の値を元にした集計結果を地図上にプロットしたり、地域、国、州、都道府県などの地理的領域に関する統計データを可視化が可能
- フライトデータから空港の発着数をカウントするな場合や国別の売上高などを可視化するようなケースで利用可能
- Dashboard
- 複数の Visualization を配置したダッシュボード
- Control Visualization を配置することで、利用者がリストやスライダーで簡単にデータを絞り込むことが可能。OpenSearch のクエリが記載できれば、検索バーでより高度な絞り込みも可能。
- Reporting
- ダッシュボードおよびドキュメントの検索結果をダウンロードする機能
- ダッシュボードは PDF または PNG で、Discover の検索結果は CSV で提供
- ダウンロード用のファイルを定期作成する機能も提供
- Query Workbench
- SQL、Piped Processing Language (PPL) を使用し、データの検索や集計、分析を行うためのツール
- 実行結果はダウンロード可能
- SQL
- SELECT 文のみをサポートしており、データの書き込みと削除はできない
- 独自に JOIN やサブクエリなど複雑な処理もサポートしている
- これらの処理は OpenSearch コアエンジン 外、SQL モジュールで処理されるため、 通常の検索と比べてパフォーマンスは 低下する点に注意
- PPL (Piped Processing Language)
- PPL とは、パイプ | でコマンドを繋いで処理を記述する言語
- 検索だけでなく、フィールドの値をパースし複数のフィールドに分割するなど複雑な操作も可能
- 例:emailのドメインと名前の分離など
- OpenSearch Dashboards以外だとAmazon Managed Service for GrafanaやDashboards Amazon QuickSightがOpenSearchをサポートしている
- データ変換
- OpenSearch におけるデータ変換
- OpenSearch には Pipeline という機能があり、データ投入時に簡易的な変換処理を 行うことができる。また Index Rollups や Index Transforms といった機能を 活用することで、OpenSearch 上で完結したデータ変換処理を行うことも可能
- Amazon Kinesis Data Firehose や AWS Glue などの AWS サービスやその他 サードパーティツールを OpenSearch 外で実行する方法も有る。より柔軟なデータの 処理が行える他、データ処理にかかる負荷を外部にオフロードできるメリットもある
- Pipeline
- 小規模な変換処理をデータ取り込み前に行うための機能
- 変換処理の例
- フィールドの追加、削除、変換、フィールド名の置き換え
- JSON 文字列のパース
- 正規表現のサポート
- 文字列の置き換え、分割
- Painless Script を利用したカスタム処理
- 具体的には以下のような操作を処理する
- データ変換(文字列を配列に変換、データ型の変換など)
- 文字列操作(大文字小文字変換など)
- フィールド操作(特定フィールドの削除、フィールドの分割、特定フィールドから別のフィールドを生成など)
- 配列操作(要素の追加、ソート)
- バイナリファイル(PDF, PPT, XLS など)からの文字抽出
- Index Rollups
- 時系列データを丸めたサマリを作成する機能。サマリは別インデックスに保存
- グラフ表示や集計処理の時間短縮に有用
- 定期実行、差分集計をサポート
- 例
- タクシー乗降データから日次の乗降客数を集計し、グラフで可視化する
- 対象のデータサイズが大きいため、全期間のデータに対して集計を行った場合、ダッシュボードの表示速度が低下する
- 乗降客数のフィールドをロールアップジョブで日次集計
- ロールアップされたインデックスを可視化に使用することで、グラフの表示速度が大幅に改善
- Index Transforms
- ある Index に対する集計結果を別の Index に保存する機能
- 時系列データに加えて、非時系列データの集計もサポート
- 定期実行、差分集計をサポート
- 多段集計された結果の可視化を実現。事前集計を行うことでダッシュボードの表示速度の改善や、アクセス時の負荷低減といったメリットが得られる
- 例
Amazon OpenSearch Service の特徴(フルマネージド)
- 動的なクラスタースケーリング
- 設定変更、構成変更はオンラインで行われる
- 構成変更が実行されると、ノード間でデータの移動が行われる。データの移動が完了すると トラフィックが切り替えられる。一連の処理は blue/green deployment と呼ばれる。
- blue/green deploymentとは同じアプリケーションの異なるバージョンを実行している同一の環境間でトラフィックを移行することによってアプリケーションをリリースする手法
- データ移動はノード間で直接行われるため負荷がかかる。オフピーク帯での実行を推奨
- オンラインでのパッチ適用
- ソフトウェアアップデートは、Amazon OpenSearch Service としての機能追加、インフラストラクチャのセキュリティ対応、ソフトウェアバグフィックスなどが含まれる
- セキュリティ対応を含む関係上、緊急度の高いアップデートについては猶予期間終了後に自動適用される
- アップデート通知は Amazon EventBridge、Amazon OpenSearch Serviceコンソール、Personal Health Dashboards などに配信される
- オンラインで適用可能だが、blue/green deployment と同等のノード入れ替えが行われる
- OpenSearch エンジンのマイナーバージョン、メジャーバージョンが上がることは無い
- オンラインでのバージョンアップ
- オンラインでエンジンのバージョンアップグレードが可能
- マイナー・メジャーバージョン両方のアップデートの両方をサポート
- アップデート中は一時的にOpenSearch Dashboardsが使用できない点に注意
- メジャーバージョンアップは破壊的な変更を含むため、スナップショットから検証環境を構築し、事前の動作検証を行うことを推奨
- Auto-Tune による自動チューニング
- Auto-Tune では、OpenSearch クラスターのパフォーマンスと使用状況のメトリクスを使用して、メモリ関連の設定の変更を提案
- これには、キューとキャッシュのサイズ、ノードの Java 仮想マシン (JVM) 設定が含まれ、これらのオプションの変更により、クラスターの速度と安定性の向上が見込める
- 変更は、すぐにデプロイされるものもあれば、ドメインのオフピークウィンドウにスケジュールされるものもあり、いつでもデフォルトの OpenSearch Service 設定に戻すことができる
- インデックス運用の自動化
- Index State Management を利用し、インデックスの状態を自動的に切り替えることが可能
- 状態遷移の条件、状態変化時に行われるアクションをポリシーとして定義し、複数のインデックスに関連付けることが可能
- Force Merge の実行、Close、インデックスの削除など様々なアクションを実行可能
- トリガとしては、インデックスサイズ、ドキュメント数、インデックス作成またはロールオーバーからの経過時間、cron 式をサポート
- 一般的なユースケースは、一定期間が経過した古いインデックスを定期的に削除すること
- 例えば、30 日後にインデックスを 状態に移行して、90 日後に最終的に削除するポリシーを定義できます。
- Amazon OpenSearch Service におけるバックアップ
- Amazon OpenSearch Service は 2 種類のスナップショットオプションを提供
- データ移行、長期保管、1 時間より短い間隔でバックアップを取得したい場合は手動スナップショットを利用。それ以外は無料の自動スナップショットがおすすめ
- 自動スナップショット、手動スナップショットは並列取得可能(Elasticsearch 7.9 以降もしくは OpenSearch の全てのエンジンでサポート)
- 注意:OpenSearch Serverless にはまだスナップショット機構がない
- Cross Cluster Replication によるディザスタリカバリ
- クラスター間でインデックスの論理的な継続レプリケーションを行う機能
- 書き込みと検索のワークロード分離、ディザスタリカバリ目的で利用可能
- メトリクス
- Cluster メトリクス
- Cluster 全体の状態、傾向を把握するためのメトリクス
- Node メトリクス
- CPU 使用率など, 個々のノードのパフォーマンスを把握するためのメトリクス
- Shard メトリクス
- ノードごとの Shard 数など, 負荷の偏りなどのトラブル対応に利用可能なメトリクス
- ログ
- 以下の 4 種類のログを CloudWatch Logs に出力することが可能。(CloudWatch Logs の利用料金が別途発生する)
- インデックススローログ(ドキュメントの追加・削除・更新)
- N 秒以上時間がかかる場合のみログを出力するなどの閾値調整が可能
- 検索スローログ
- Query, Fetch の 2 つのフェーズに分けて取得可能。閾値調整も可能。
- エラーログ(WARN, ERROR, FATAL, DEBUG の例外)
- 監査ログ
Amazon OpenSearch Service の特徴(セキュリティ)
- Amazon OpenSearch Service の多層セキュリティ
- SAML および Cognito、IAM (Identity Access Management ) と統合された Dashboards アクセスコントロール
- IAM (Identity Access Management ) による API エンドポイントへのアクセスコントロール
- VPC 内にデプロイされたエンドポイントへのセキュリティグループを利用したアクセス制御
- OpenSearch のきめ細やかなアクセス制御機能によるデータおよびダッシュボードの保護
- 保管されたデータおよび転送データの暗号化
- 監査ログによる不正なアクションの追跡
- アクセスコントロールの全体像
- 監査ログ (Audit Log)
- OpenSearch 上のデータに対するアクセスログを取得
- アクセスログにはユーザー名、アクセス先のインデックス名、アクセス元 IP アドレスなどが含まれる
- インデックス、ドキュメント、フィールド単位でアクセスログの取得要否をコントロール可能
- 特定ユーザー(アプリケーションユーザー) からのアクセスは記録しない、など細かい指定も可能
- Fine-Grained Access Control を使うことが前提
Amazon OpenSearch Service の特徴(コスト最適化)
- 階層ストレージによるコスト最適化
- ホットノード
- IOPS, レイテンシ要件に応じて EBS(gp3, gp2, io1,standard)、もしくはインスタンスストアからストレージを選択可能
- クラスターにつき最大 3 PiB までストレージを割当可能
- 低レイテンシ、高頻度なランダムアクセスが必要な用途向き
- インスタンスタイプオプション
- CPUとメモリの比率、サポートされるストレージタイプを元にインスタンスを選定
- 開発用途では t3.small.search も利用可能(本番での利用は非推奨)
- 小規模ワークロードであれば t3.medium.search も本番利用の選択肢に入る
- ストレージオプション
- 要件に応じて複数のストレージタイプからストレージを選択可能
- コストパフォーマンスに優れた gp3 を最初に検討
- 高スループット/高 IOPS が必要ならインスタンスストアを検討
- 専用マスターノードにはストレージはアタッチされない
- UltraWarm
- 全てのデータをホットストレージに格納する場合と比較して、最大 90% のコスト削減
- データは高耐久の S3 に格納。レプリカ、ストレージのオーバーヘッドを削減し、データの収容効率を向上
- アドホックなログ分析、可視化に利用可能
- Cold Storage
- デタッチされたデータを S3に近いコストで S3 に保存し、UltraWarm の空き容量を確保
- Cold Storage のデータは検索不可。検索したい場合は再アタッチが必要。再アタッチは通常数秒で完了