カスタムパッケージを使ったリージョン間のOpenSearch CCRでは、レプリケーションプラグインのAPI呼び出し時に設定を再定義する必要があります。
課題
インデックス設定でカスタムパッケージを使い、それを別リージョンのドメインへレプリケーションしようとすると問題が起こります。パッケージをドメインに関連付けるには、まずクラスターと同じリージョンのS3バケットへパッケージをアップロードし、その後インポートしてドメインに関連付けます。このときAWSはリージョン固有の参照パスを自動的に割り当てます。そのままクロスクラスター接続を作成してレプリケーションを実行すると、フォロワードメイン側に該当する参照パスが存在しないため、502エラーとなります。
解決策
リーダーインデックスを作成する際にupdateableフラグをtrueに設定します。そのうえでレプリケーションを開始する際、フォロワー側の参照パスで設定を再定義します。
PoC
セットアップの前提条件
- リーダードメイン
- フォロワードメイン
- リーダーとフォロワー間の接続
- 各リージョンのS3バケットに配置したカスタムパッケージ
加えて、AWSが定めるリーダー/フォロワードメインの要件があります [1]
前述のとおり、パッケージをドメインに関連付けるには、まず該当ドメインのリージョンのS3バケットにパッケージをアップロードし、OpenSearchのサイドバーにあるpackagesからインポートする必要があります。
パッケージのインポート
こちらはUS-east-1にある基本的なリーダードメインです。AWSの要件として、きめ細かなアクセス制御(FGAC)を有効化し、フォロワードメインに対してes*アクションを許可するセキュリティポリシーを設定しています。
packagesを見ると、AWSが割り当てた参照パスanalyzers/F111929843を持つwordlistパッケージが関連付けられているのが分かります。
リーダードメイン
こちらは基本的なフォロワードメインです。セキュリティポリシーの変更がない点を除き、構成はリーダードメインと同じです。packagesを見ると、こちらでも(該当リージョンのS3パスへアップロードしたうえで)wordlistファイルを関連付けており、AWSが割り当てた参照パスはanalyzers/F194925348と、リーダードメインのパスとは異なっています。
CCRを利用するには、フォロワードメインからリモートデータ接続のリクエストを発行し、それをリーダードメイン側で承認する必要があります。
パッケージを関連付けた2つのドメインとデータ接続が揃えば、レプリケーションを開始できます。
リーダー側でインデックスをセットアップする例は次のとおりです。
インデックス設定はおおむね以下のような形になります。特にフィルターパスとupdateableパラメータに注目してください。
リーダーでのインデックス作成
レプリケーション開始時には、設定を改めて指定し、今度はフォロワー側の参照パスを含めます。
フォロワーへのレプリケーション開始
レプリケーションを検証するため、リーダーに次のようにデータを追加しました。
インデックスへのデータ追加
こちらはフォロワー側でデータを検索した結果です。クエリが正常に実行され、レプリケーションが機能していることを確認できました。
フォロワーでのデータクエリ
フォロワーでのクエリ結果
まとめると、カスタムパッケージを伴うAWS OpenSearchのリージョン間CCRを実現するには、レプリケーションプラグインAPIの呼び出し時に設定を再定義することがポイントです。
参考
[1]https://docs.aws.amazon.com/opensearch-service/latest/developerguide/replication.html
ぜひDoiTまでお問い合わせください。私たちは、クラウドを活用したビジネス成長を支援する高度なクラウドコンサルティングおよびアーキテクチャ設計サービスを提供しています。