

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon OpenSearch Service のクロスクラスター検索
<a name="cross-cluster-search"></a>

Amazon OpenSearch Service でのクラスター間検索では、接続された複数のドメインにまたがってクエリと集計を実行できます。さまざまなタイプのワークロードを実行している場合には特に、単一の大きなドメインではなく、複数の小さなドメインを使用する方が合理的です。

ワークロード固有のドメインを使用すると、次のタスクを実行できます。
+ 特定のワークロードのインスタンスタイプを選択することにより、各ドメインを最適化する。
+ ワークロード間で障害分離の境界を確立する。これは、ワークロードの 1 つに障害が発生しても、その障害はその特定のドメイン内で食い止められ、他のワークロードに影響しないことを意味します。
+ ドメイン間でより簡単にスケーリングできる。

クラスター間検索では OpenSearch Dashboards がサポートされているため、すべてのドメインで視覚化とダッシュボード作成を行うことができます。ドメイン間で転送された検索結果には、[標準の AWS データ転送料金](https://aws.amazon.com/opensearch-service/pricing/)がかかります。

**注記**  
オープンソースの OpenSearch には、クラスター間検索に関する[ドキュメント](https://opensearch.org/docs/latest/search-plugins/cross-cluster-search/)もあります。オープンソースクラスターの設定は、マネージド Amazon OpenSearch Service ドメインとは大きく異なります。特に、OpenSearch Service では、cURL AWS マネジメントコンソール ではなく を使用してクラスター間接続を設定します。さらに、 マネージドサービスは、きめ細かなアクセスコントロールに加えて、クラスター間認証に AWS Identity and Access Management (IAM) を使用します。したがって、オープンソースの OpenSearch ドキュメントではなく、このドキュメントを使用してドメインのクラスター間検索を設定することをお勧めします。

**Topics**
+ [制限事項](#cross-cluster-search-limitations)
+ [クラスター間検索の前提条件](#cross-cluster-search-pp)
+ [クラスター間検索の料金](#cross-cluster-search-pricing)
+ [接続のセットアップ](#cross-cluster-search-set-up-connection)
+ [接続の削除](#cross-cluster-search-remove-connection)
+ [セキュリティのセットアップとサンプルチュートリアル](#cross-cluster-search-walkthrough)
+ [OpenSearch Dashboards](#cross-cluster-search-dashboards)

## 制限事項
<a name="cross-cluster-search-limitations"></a>

クラスター間検索には、以下に示す重要な制限事項があります。
+ Elasticsearch ドメインを OpenSearch ドメインに接続することはできません。
+ セルフマネージド OpenSearch/Elasticsearch クラスターに接続することはできません。
+ リージョン間でドメインを接続するには、両方のドメインが Elasticsearch 7.10 以降または OpenSearch 上にある必要があります。
+ ドメインでは、最大 20 の送信接続が可能です。同様に、ドメインでは最大 20 の着信接続が可能です。つまり、1 つのドメインは、最大 20 の他のドメインに接続できます。
+ ソースドメインは、宛先ドメインと同じかそれ以降のバージョンである必要があります。2 つのドメイン間で双方向接続を設定し、その一方または両方をアップグレードする場合は、まず接続の 1 つを削除する必要があります。
+ クラスター間検索で、カスタム辞書や SQL を使用することはできません。
+ を使用してドメイン CloudFormation を接続することはできません。
+ M3 インスタンスとバースト可能 (T2 および T3) インスタンスではクラスター間検索は使用できません。

## クラスター間検索の前提条件
<a name="cross-cluster-search-pp"></a>

クラスター間検索をセットアップする前に、ドメインが次の要件を満たしていることを確認してください。
+ 2 つの OpenSearch ドメイン、またはバージョン 6.7 以降の Elasticsearch ドメイン
+ Fine-grained access controlが有効
+ ノード間暗号化が有効
+ いずれかのドメインが VPC 内にある場合、ドメインは VPC ピアリングまたは Transit Gateway を介して接続する必要があり、セキュリティグループはそれらの間のトラフィックを許可する必要があります。

## クラスター間検索の料金
<a name="cross-cluster-search-pricing"></a>

ドメインをまたがって検索する場合も、追加料金はかかりません。

## 接続のセットアップ
<a name="cross-cluster-search-set-up-connection"></a>

"ソース" ドメインは、クラスター間検索リクエストが発生したドメインを指します。つまり、ソースドメインは、ユーザーからの最初の検索リクエストの送信先です。

"ターゲット" ドメインは、ソースドメインから照会するドメインです。

クラスター間の接続は、ソースからターゲットドメインへの単方向のみです。つまり、ターゲットドメインからソースドメインを照会することはできません。ただし、反対方向で別の接続をセットアップすることは可能です。

![\[クラスター間検索の承認フロー\]](http://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/images/ccs.png)


ソースドメインは、ターゲットドメインへの "アウトバウンド" 接続を作成します。ターゲットドメインは、ソースドメインから "インバウンド" 接続リクエストを受信します。

**接続をセットアップするには**

1. ドメインダッシュボードで、ドメインを選択し、[**接続**] タブに進みます。

1. [**アウトバウンド接続**] セクションで、[**リクエスト**] を選択します。

1. [**接続のエイリアス**] に接続の名前を入力します。

1.  AWS アカウント と リージョンのドメインに接続するか、別のアカウントまたはリージョンに接続するかを選択します。
   +  AWS アカウント と リージョンのクラスターに接続するには、ドロップダウンメニューからドメインを選択し、**リクエスト**を選択します。
   + 別の AWS アカウント またはリージョンのクラスターに接続するには、リモートドメインの ARN を選択し、**リクエスト**を選択します。リージョン間でドメインを接続するには、両方のドメインで Elasticsearch バージョン 7.10 以降または OpenSearch が実行されている必要があります。

1. クラスタークエリで使用できないクラスターをスキップするには、**［使用できないものをスキップ]** を選択します。この設定を行うと、1 つまたは複数のリモートクラスターで障害が発生しても、クラスター間のクエリで部分的な結果が返されるようになります。

1. クラスター間検索では、まず接続リクエストを検証することで、前提条件が満たされているか確認が行われます。ドメインに互換性がないことがわかった場合、接続リクエストは `Validation failed` の状態になります。

1. 接続要求が正常に検証されると、接続リクエストはターゲットドメインに送信され、承認を受けます。この承認が行われるまで、接続は `Pending acceptance` の状態のままです。接続要求がターゲットドメインで承諾されると、状態が `Active` に変わり、ターゲットドメインをクエリに使用できるようになります。
   + ドメインページには、ターゲットドメインについて、ドメインの全体的な正常性とインスタンスの正常性に関する詳細が表示されます。ドメインとの間の接続を柔軟に作成、表示、削除、モニタリングできるのは、ドメイン所有者のみです。

接続が確立されると、接続されたドメインのノード間で流れるトラフィックはすべて暗号化されます。VPC ドメインを非 VPC ドメインに接続し、非 VPC ドメインがインターネットからのトラフィックを受信できるパブリックエンドポイントである場合も、ドメイン間のクラスター間トラフィックは暗号化され安全です。

## 接続の削除
<a name="cross-cluster-search-remove-connection"></a>

接続を削除すると、インデックスに対するクラスター間のオペレーションがすべて停止します。

1. ドメインダッシュボードで、[**接続**] タブに移動します。

1. 削除するドメイン接続を選択し、[**削除**] を選択したら、削除を確定します。

接続を削除するには、ソースドメインまたはターゲットドメインのいずれかでこれらの手順を実行できます。削除した接続は 15 日間 `Deleted` ステータスで表示されます。

アクティブなクラスター間接続のあるドメインは削除できません。ドメインを削除するには、まずそのドメインからすべての受信接続と送信接続を削除します。この操作は、ドメインを削除する前にクラスター間ドメインのユーザーを考慮するために行います。

## セキュリティのセットアップとサンプルチュートリアル
<a name="cross-cluster-search-walkthrough"></a>

1. クラスター間検索リクエストをソースドメインに送信します。

1. ソースドメインでは、ドメインアクセスポリシーに照らし合わせてリクエストを評価します。クラスター間検索にはきめ細かなアクセス制御が必要になるため、ソースドメインでオープンアクセスポリシーを使用することをお勧めします。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": [
             "*"
           ]
         },
         "Action": [
           "es:ESHttp*"
         ],
         "Resource": "arn:aws:es:us-east-1:111122223333:domain/src-domain/*"
       }
     ]
   }
   ```

------
**注記**  
パスにリモートインデックスを含める場合は、ドメイン ARN で URI を URL エンコードする必要があります。例えば、`arn:aws:es:us-east-1:123456789012:domain/my-domain/local_index,dst:remote_index` ではなく `arn:aws:es:us-east-1:123456789012:domain/my-domain/local_index,dst%3Aremote_index` を使用します。

   きめ細かなアクセス制御に加えて制限付きアクセスポリシーを使用する場合は、ポリシーでは最低限でも `es:ESHttpGet` へのアクセスを許可する必要があります。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": [
             "arn:aws:iam::111122223333:user/test-user"
           ]
         },
         "Action": "es:ESHttpGet",
         "Resource": "arn:aws:es:us-east-1:111122223333:domain/src-domain/*"
       }
     ]
   }
   ```

------

1. ソースドメインに対する[きめ細かなアクセス制御](fgac.md)では、要求が次のように評価されます。
   + リクエストが、有効な IAM または HTTP 基本認証情報で署名されているか。
   + その場合、検索を実行し、データにアクセスするためのアクセス許可がユーザーにあるか。

   要求がターゲットドメインのデータのみを検索する場合 (例: `dest-alias:dest-index/_search`)、ターゲットドメインに対するアクセス許可のみが必要になります。

   両方のドメインを対象にしたデータ検索のリクエストの場合 (例: `source-index,dest-alias:dest-index/_search`)、両方のドメインに対するアクセス許可が必要です。

   きめ細かいアクセス制御を使用する場合、ユーザーには、関連するインデックスに対して標準の `read` または `search` アクセス許可に加えて `indices:admin/shards/search_shards` アクセス許可も必要になります。

1. ソースドメインは、ターゲットドメインにリクエストを渡します。ターゲットドメインでは、このリクエストをドメインアクセスポリシーに照らし合わせて評価します。ターゲットドメインに対する `es:ESCrossClusterGet` アクセス許可も含める必要があります。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": "*"
         },
         "Action": "es:ESCrossClusterGet",
         "Resource": "arn:aws:es:us-east-1:111122223333:domain/dst-domain"
       }
     ]
   }
   ```

------

   `es:ESCrossClusterGet` アクセス許可が `/dst-domain/*` ではなく `/dst-domain` に適用されていることを確認してください。

   ただし、この最小ポリシーでは、クラスター間検索のみが許可されます。ドキュメントのインデックス作成や標準検索の実行など、他のオペレーションを実行するには、追加のアクセス許可が必要です。ターゲットドメインでは、以下のポリシーの使用をお勧めします。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": [
             "*"
           ]
         },
         "Action": [
           "es:ESHttp*"
         ],
         "Resource": "arn:aws:es:us-east-1:111122223333:domain/dst-domain/*"
       },
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": "*"
         },
         "Action": "es:ESCrossClusterGet",
         "Resource": "arn:aws:es:us-east-1:111122223333:domain/dst-domain"
       }
     ]
   }
   ```

------
**注記**  
ドメイン間のクラスター間検索リクエストはすべて、ノード間の暗号化の一環としてデフォルトで転送中に暗号化されます。

1. ターゲットドメインで検索が実行され、結果がソースドメインに返されます。

1. ソースドメインにより、独自の結果 (存在する場合) とターゲットドメインの結果を組み合わせたものが返されます。

1. テストリクエストには、[Postman](https://www.postman.com/) の使用をお勧めします。
   + ターゲットドメインで、ドキュメントのインデックスを作成します。

     ```
     POST https://dst-domain.us-east-1.es.amazonaws.com/books/_doc/1
     
     {
       "Dracula": "Bram Stoker"
     }
     ```
   + ソースドメインからこのインデックスを照会するには、クエリ内にターゲットドメインの接続エイリアスを含めます。

     ```
     GET https://src-domain.us-east-1.es.amazonaws.com/<connection_alias>:books/_search
     
     {
         ...
       "hits": [
         {
           "_index": "source-destination:books",
           "_type": "_doc",
           "_id": "1",
           "_score": 1,
           "_source": {
             "Dracula": "Bram Stoker"
           }
         }
       ]
     }
     ```

     接続エイリアスは、ドメインダッシュボードの [**接続**] タブで確認できます。
   + `domain-a -> domain-b` の接続を接続エイリアス `cluster_b` でセットアップし、`domain-a -> domain-c` 接続を接続エイリアス `cluster_c` でセットアップする場合は、次のように `domain-a`、`domain-b`、および `domain-c` を検索します。

     ```
     GET https://src-domain.us-east-1.es.amazonaws.com/local_index,cluster_b:b_index,cluster_c:c_index/_search
     {
       "query": {
         "match": {
           "user": "domino"
         }
       }
     }
     ```

     **レスポンス**

     ```
     {
       "took": 150,
       "timed_out": false,
       "_shards": {
         "total": 3,
         "successful": 3,
         "failed": 0,
         "skipped": 0
       },
       "_clusters": {
         "total": 3,
         "successful": 3,
         "skipped": 0
       },
       "hits": {
         "total": 3,
         "max_score": 1,
         "hits": [
           {
             "_index": "local_index",
             "_type": "_doc",
             "_id": "0",
             "_score": 1,
             "_source": {
               "user": "domino",
               "message": "This is message 1",
               "likes": 0
             }
           },
           {
             "_index": "cluster_b:b_index",
             "_type": "_doc",
             "_id": "0",
             "_score": 2,
             "_source": {
               "user": "domino",
               "message": "This is message 2",
               "likes": 0
             }
           },
           {
             "_index": "cluster_c:c_index",
             "_type": "_doc",
             "_id": "0",
             "_score": 3,
             "_source": {
               "user": "domino",
               "message": "This is message 3",
               "likes": 0
             }
           }
         ]
       }
     }
     ```

     接続のセットアップで使用できないクラスターをスキップしなかった場合、検索リクエストを正常に実行するには、検索するすべての宛先クラスターが使用可能である必要があります。そうでない場合は、リクエスト全体が失敗します ドメインのうち、いずれか 1 つだけが使用できない場合でも、検索結果は返されません。

## OpenSearch Dashboards
<a name="cross-cluster-search-dashboards"></a>

接続された複数ドメインのデータは、単一のドメインの場合と同じ方法で可視化できますが、`connection-alias:index` を使用してリモートインデックスにアクセスする必要があります。インデックスパターンは `connection-alias:index` に一致する必要があります。