どうも、「病院なび」の開発チームメンバー甘利です。
毎日ワクワクしながら、業務に携わっています。前回に引き続きAWS Opensearch の導入について書いていこうと思います。
今回はOpensearchのAliasについて書こうと思います。
概要
前回の「自社サービス「病院なび」へ AWS Opensearch を導入したい」 の続きになります。
前回はIndexを作るRakeタスクを作りましたが今回はそのIndexにAliasを付与するRakeタスクを作っていきたいと思います。
なぜAliasを利用するのか
Aliasがなぜ必要かを説明するために、Opensearchをどのように利用するかについて説明します。
現在、ざっくりと以下みたいな構成を考えています。SQLのを永続化のために利用し、検索用のDBとしてOpensearchを利用します。
上記の図ではアプリケーションサーバーから直接Indexを指定していますが、
Alias利用すると、アプリケーションサーバーからIndexに直接接続せず、Aliasを介してIndexにアクセスできるようになります。
このAliasをうまく使って運用方法を考えたいと思っています。
運用時のIndexのマッピング(ドキュメントの構造)変更について
運用時におけるIndexの定義の変更を以下のようにする予定です。
- Opensearchindex が稼働している状態で、SQL Databaseから新しい Opensearchindex'を作成する。
- Aliasを Opensearchindex から Opensearchindex'に張り替える。
このようにする理由として、Opensearchではマッピングを変更してもデータ自体の変更はそのデータが次に更新されたタイミングになるためです。データが全て更新されている状態にするには結局一度アクセス(更新)する必要があります。
そうなると、一つのインデックスを更新しながら使うよりも永続化DBであるSQLデータベースから、都度INDEXを作り直し、Aliasの変更によって差し替えた方が色々とリスクが少なくなると考えました。(なんか他にいい方法があればご教示いただければと思います)
用意するタスク
オペレーションとしては Alias を Opensearchindex から Opensearchindex' へ張り替えるタスクだけで事足りるのですが、必ず張り替えともかぎらず、個々に追加、削除も行うケースが考えられますので以下の3つを用意しました。
rake db:open_search:add_alias[alias,index] # エーリアスの設定
rake db:open_search:change_alias[alias,index,index_dest] # エーリアスの付け替え
rake db:open_search:remove_alias[alias,index] # エーリアスの削除
まとめ
今回は運用を考慮してAliasの操作タスクを作っていきました。
今後はどのようにデータをコピーしていくか、といったところをを記事にしていければと思います。
少しでも面白いと思っていただけたら LGTM お願いします
また、続きが気になるようでしたらフォローいただけると幸いです。