概要
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で作業するのは
- テーブル作成及び有効化
- ビューの作成及びPartiQLの定義
- マテビューの有効化(ES or S3)で、データが連携される
テーブル作成
コンソールから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のボリュームサイズも配慮しながら連携できそうです
コスト面で許容できそうなら、プロダクションにも採用していきたいと思います