[アップデート] Amazon OpenSearch Service で S3 との Zero-ETL 統合が一般公開されました
こんにちは、中川です。
2024 年 5 月に Amazon OpenSearch Service で Amazon S3 との Zero-ETL 統合が一般公開されました。
Zero-ETL 統合は、2023 年の re:Invent にてプレビューが発表されていた機能です。プレビュー時の内容については、以下の記事をご覧ください。
本記事では、Zero-ETL 統合の仕様と触ってみた内容を紹介します。
Zero-ETL 統合の概要
アップデートにより、Amazon OpenSearch Service を使用して S3 上のデータにクエリを実行できる Direct Query が利用可能になりました。[1]
これまで、S3 上のデータを OpenSearch Service で分析するには、一度 OpenSearch Service 上にデータを取り込む必要がありました。
頻繁に分析されるデータであれば一度パイプラインを作成すればいいですが、普段使われないデータに対してパイプラインを都度作成しなくてはならず、パイプラインを残せばそれはそれでストレージコストに影響します。
今回のアップデートで、頻繁に使われない S3 上のデータに対しても OpenSearch から手間を掛けずにクエリを実行して分析が可能になりました。
具体的なユースケースについては re:Invent 2023 のセッション(ANT353)で紹介されていました。
アプリケーションログや分散トレースログのような Primary data を OpenSearch 上に取り込み、VPC Flow Logs や Audit Logs のような Secondary data に Direct Query を、といった使い分けができると良さそうです。
ANT353より抜粋
Query Acceleration
S3 上にあるデータへ高速にクエリを実行するオプションとして、Skipping indexes, Materialized views, Covering indexes が提供されてます。
OpenSearch Dashboard 上からだと Query Workbench から SQL または GUI ベースに設定できます。
各オプションについても re:Invent 2023 のセッション ANT353 で紹介されていましたので引用します。
ANT353より抜粋
Skipping indexes
S3 に保存されたデータのメタデータのみをインデックス化するオプションです。
クエリプランナーがインデックスを参照するために、全てのパーティションやファイルをスキャンする必要がなくなり、クエリの実行速度が向上します。
Materialized views
集計などの複雑なクエリを使用するダッシュボードの Visualize を作成するときに使うオプションです。
クエリ結果の一部を OpenSearch Service 上にインデックス化して利用できます。
Covering indexes
指定されたカラムのデータを全てインデックス化します。ストレージを多く使いますが、パフォーマンス効果は最も高いオプションです。
統合機能
OpenSearch Dashboard 上で AWS サービスやアプリケーションに対応した統合機能が提供されています。
統合機能を利用することで利用者側でクエリを書くことなく、すぐに分析や事前に用意されたダッシュボードを利用できます。
2024 年 8 月時点では以下の AWS サービスとアプリケーションで統合機能利用できます。
- Amazon CloudFront
- Elastic Load Balancing
- Amazon Relational Database Service
- Amazon S3
- Amazon VPC Flow Logs
- AWS CloudTrail
- AWS WAF
- Apache Access Logs
- HAProxy
- Kubernetes
- Nginx
各統合機能で用意される内容は以下のリポジトリから確認できます。
opensearch-project/opensearch-catalog/docs/integrations/Release.md
料金
S3 へのクエリやインデックスの管理に必要なコンピューティングリソースに対する課金として OpenSearch Compute Units (OCU) が使われます。
OCU は S3 へのインタラクティブなクエリをするときと Query Acceleration のインデックス化をするときの 2 パターンあります。
東京リージョンでは 1 時間あたり 0.334 USD/OCU の課金となります。
ただ、これだけでは具体的な利用費の見積もりは難しいかと思います。AWS 公式ブログにてクエリでスキャンされるデータ量に応じて、どの程度の課金が発生するか紹介してましたので、概算には以下の表を使うと良いかも知れません。
クエリごとにスキャンされるデータ (GB) | クエリごとの OCU 価格 (USD) |
---|---|
1-10 | $0.026 |
100 | $0.24 |
1000 | $1.35 |
参考の公式ブログより抜粋。バージニアリージョンでの計算例
思いがけず OCU の使用量が増えることがありえますので、Direct Queiry を使うときは、一緒に AWS Budgets で使用量を監視することをお勧めします。(私自身、想定した以上に使いこんでいたことを後から気がつきました...)
Budgets では、使用タイプ XXX-DirectQueryOCU
でフィルターします。
参考:
制限事項
2024 年 8 月時点での制限事項は以下のとおりです。
- OpenSearch ドメインはバージョン 2.13 以上
- OpenSearch Serverless は非対応
- データタイプは Parquet、CSV、JSON に対応(事前にフラットな構造されていることが必要)
- AWS Glue Data Catalog や Athena で生成されたテーブルはサポート外
やってみた
Direct Query と統合機能を確認します。
事前に S3 バケットと OpenSearch を作成しています。
S3 バケットには分析対象の ALB ログを保管バケットと、Direct Query のメタデータを格納するチェックポイントバケットの 2 つを用意しています。
Data Source の設定
最初にデータソースの設定を行います。
マネージメントコンソールの OpenSearch Service から[接続]タブを開き、[Create]をクリックします。
データソースを定義します。ここでは名前とデータソースタイプに Amazon S3 with AWS Glue Data Catalog を選択します。
また、ここで Amazon S3 と AWS Glue データカタログへの読み取り/書き込みアクセスを許可する IAM ロールを作成します。
作成したら、OpenSearch Dashboard に接続し、左メニューから Integrations をクリックします。
[Available]タブをクリックします。
ALB のログに対して試すので、Elasitc Load Balancing をクリックします。
[Set Up]をクリックします。
統合の設定をします。先程作成したデータソースを選択し、ログが保存された S3 バケット名とチェックポイント用 S3 バケット名を入力します。
Queries と Dashboards & Visualizations にチェックを入れ、[Add Integration]をクリックします。
セットアップ中の画面が表示され、数分でセットアップは完了します。
セットアップが完了すると統合機能で追加された Visualize や Dashboard を確認できます。
データセットと統合機能の設定は完了です。
ここから Direct Query や提供されるダッシュボードを使えるようになります。
Direct Query
Direct Query を確認します。
左メニューから Query Workbench をクリックします。
データソースから alb_log を選択します。統合機能で作成されたデータベース default , テーブル amazon_elb, スキッピングインデックス, マテリアライズドビューをそれぞれ確認できます。
まずは SELECT *
で実行してみると、正常にログが取れていることを確認できました。
次に Query Acceleration の Covering index を試してみます。Query Workbench 上から[Accelerate Table]をクリックします。
データベースとテーブルを選択し、Acceleration type では Covering index を選択します。
インデックス名、リフレッシュタイプ、チェックポイントの場所を指定します。
Covering index の対象とするカラムを選択します。Advanced setting ではインデックスごとにシャード数の設定をできますが、ここではデフォルトのままにします。
Generate preview をクリックすると、インデックスを作成するときの SQL が表示されます。確認して、[Create acceleration]をクリックします。
Covering index が作成されたことを確認でき、インデックス化した elb_status_code に対して集計するクエリを投げると、正常に取得できました。
クエリとして実行結果を得られましたが、インデックスとしてどのように作られているか確認もしてみます。
左メニューから Index Management を開きます。
Indexes から、covering index でインデックスが張られていることを確認できました。
Direct Query の検証は以上とします。
Accelerated queries を追加する場合も、コンソールから簡単に設定できることがわかりました。
統合機能のダッシュボード
続いて統合機能で追加されたダッシュボードを見てみます。
左メニューから Dashboards をクリックします。
ELB Summary をクリックします。
ダッシュボードが表示されました。
最初のところでではアカウント単位、リージョン単位、ステータスの統計を確認できます。ELB やアカウントをプルダウンで絞れるようになっているのは地味に嬉しいですね。
スクロールすると、ユーザーエージェント、メソッド、SSL 方式、URL ドメインやパスを確認できます。
さいごの部分では、ソース IP、ターゲット IP、処理時間、実際のログデータを確認できます。
ダッシュボードの確認は以上です。
カスタマイズしなくても使えるダッシュボードを利用できることを確認できました。
さいごに
OpenSearch Service で Amazon S3 との Zero-ETL 統合が一般公開されたので紹介しました。
AS3 上のデータに直接クエリを実行できるようになったことで、頻繁に使用されないデータに対しても手間をかけずに OpenSearch 上で分析が可能になります。
注意点として、クエリの実行ごとに料金が発生するので、あくまで頻度の低いデータに対してのみ利用するように使い分けることをお勧めします。
統合機能を使うと、S3へのクエリをすぐに実行でき、また使いやすいダッシュボードが提供されていました。
個人的には ALB のログを可視化するのにドメイン部分を抽出してくれてる点が嬉しかったです。これまで OpenSearch で ALB ログを可視化しようとすると Logstash 等でドメイン部分をパターンファイルに定義してましたが、統合機能ではユーザー側で考えなくても実用的なダッシュボードが使えることはありがたいです。
統合機能は OpenSearch ダッシュボード上でサンプルデータと一緒に確認できますので、気になる連携があれば直接確認してみてください。
参考
- Working with Amazon OpenSearch Service direct queries with Amazon S3
- Modernize your data observability with Amazon OpenSearch Service zero-ETL integration with Amazon S3
- AWS re:Invent 2023-Vector database and zero-ETL capabilities for Amazon OpenSearch Service (ANT353)
表記は執筆時点の日本語マネージメントコンソールに揃えて Direct Query としてます ↩︎