概要
AWS Glue Elastic Viewsのプレビュー版について、説明したいと思います。
あまり情報もなく、セットアップも画面UIも荒削りなので現時点ではプロダクト採用には難しいですがデータ同期がマネージドサービスで実現できることにメリットがありそうです。
前提
プレビューに申し込んでいること
こちらのフォームから申し込んでください。
約1週間後にAvailableになったよ〜って通知がメールできます。
背景
サーバーレス構成のデータの保存先として DynamoDBを利用しています。そのシステムに全文検索機能をはじめ、少し凝った検索機能を追加する場合、DynamoDBだけではなかなか実装が難しいと思います。
ステップ1
コスト優先ということでDynamoDB Streamsを利用して別のテーブルに検索語句を連携する方式を採用しました。
※以下の記事、大変参考にさせていただきました
DynamoDBで全文検索もどきをする
そして、お客様の検索条件の飽くなき探究心に運用が耐えられず、Amazon Auroraの移行を検討
ステップ2
Auroraに関しては、geometry型を用いた検索もしているのでアーキテクチャとしては悪くないのですがRDBの性質上、前方一致検索しか採用したくない・・・
(部分一致検索はFull Scanとなり、早晩運用が破綻すると考えたため)
ステップ3(これから)
ユーザビリティを考えると全文検索を実現したい。そのため、Elasticsearch Serviceを組み合わせて実現したいなぁ・・・と思っていた矢先、AWS Glue Elastic Viewsが発表される
環境構築
AWSからGetting Startedが公開されています。
英語のみでGoogle翻訳するとツラミですが、我慢しましょう・・・
DynamoDB
すでに存在するテーブルを利用するので割愛
Amazon ES domain
Create the Amazon ES domainを参考に作成をしてください。
また、チュートリアルの簡易さを優先してドメインはPublicに設定しているようです。各自のセキュリティポリシーに合わせて検討ください
AWS Glue EV
サービス一覧には表示されないので直リンクAWS Glue Elastic Viewsでアクセスします
また、DynamoDBのテーブルは既に存在することをします。
そのうえで、AWS Glue Elastic Viewsで作業するのは
テーブル作成
コンソールからDynamoDBのテーブル一覧が表示されるので、選択するだけです。
スキーマ定義が作成されます
※アクティベートを忘れないようにしてください。1分程度で有効化されます
ビュー作成
※ビューのページから作成ボタンを押下すると、PartiQLの設定などを手動で記述する必要があります
ビュー名のみ任意で設定して、その他はデフォルト値のまま作成します
マテビュー作成
右上のボタンを押下します
※アクティベートを忘れないようにしてください。1分程度で有効化されます
Elasticsearch Serviceを選択し、チュートリアルで作成した ES Domainを選択してください
index nameはES内に確保される領域ですが、今回はtestを作成します
マテビュー実体化
Elasticsearch Serviceの確認
約7万件作成されるまでに1分程度
マテビューでフィルター
record_timeでフィルターをかけ、Elasticsearch Serviceに期待する件数のみ連携されるか、確認します
※今回は200件を期待
※文字列をダブルクォーテーションで括ると上手く動作しませんでした。
約1時間後に全件連携された。どこがボトルネックになっているかわからず。
余談
取得元のDynamoDBのテーブルには約500万件のデータがありましたが、Elasticsearch Service側のパフォーマンスの限界に達していました。このあたりは運用に合わせてチューニングが必要になると思われます
まとめ
PartiQLを上手く利用できれば、ESのボリュームサイズも配慮しながら連携できそうです
コスト面で許容できそうなら、プロダクションにも採用していきたいと思います