기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon OpenSearch Service의 교차 클러스터 검색
Amazon OpenSearch Service의 클러스터 간 검색을 사용하면 연결된 여러 도메인에서 쿼리 및 집계를 수행할 수 있습니다. 특히 여러 유형의 워크로드를 실행하는 경우 큰 단일 도메인 대신 여러 개의 작은 도메인을 사용하는 것이 더 좋습니다.
워크로드별 도메인을 사용하면 다음 작업을 수행할 수 있습니다.
-
특정 워크로드에 대한 인스턴스 유형을 선택하여 각 도메인을 최적화합니다.
-
워크로드 전반에 걸쳐 결함 격리 경계를 설정합니다. 즉, 워크로드 중 하나가 실패하면 해당 특정 도메인 내에 결함이 포함되며 다른 워크로드에 영향을 주지 않습니다.
-
여러 도메인에서 더욱 쉽게 조정
클러스터 간 검색은 OpenSearch Dashboards를 지원하므로 모든 도메인에서 시각화 및 대시보드를 생성할 수 있습니다. 도메인 간에 전송된 검색 결과에 대한 표준 AWS 데이터 전송 요금
참고
오픈 소스 OpenSearch에는 클러스터 간 검색을 위한 설명서
제한 사항
클러스터 간 검색에는 몇 가지 중요한 제한 사항이 있습니다.
-
Elasticsearch 도메인을 OpenSearch 도메인과 연결할 수 없습니다.
-
자체 관리형 OpenSearch/Elasticsearch 클러스터에는 연결할 수 없습니다.
-
리전 간에 도메인을 연결하려면 두 도메인 모두 Elasticsearch 7.10 이상이거나 OpenSearch를 사용해야 합니다.
-
도메인에는 최대 20개의 발신 연결이 있을 수 있습니다. 마찬가지로 도메인에는 최대 20개의 수신 연결이 있을 수 있습니다. 즉, 한 도메인은 최대 20개의 다른 도메인에 연결할 수 있습니다.
-
원본 도메인은 대상 도메인과 같거나 상위 버전에 있어야 합니다. 두 도메인 간에 양방향 연결을 설정하고 둘 중 하나 또는 둘 다 업그레이드하려는 경우 먼저 연결 중 하나를 삭제해야 합니다.
-
클러스터 간 검색에는 사용자 지정 사전이나 SQL을 사용할 수 없습니다.
-
AWS CloudFormation을 사용하여 도메인을 연결할 수 없습니다.
-
M3 또는 버스트 가능(T2 및 T3) 인스턴스에서는 클러스터 간 검색을 사용할 수 없습니다.
클러스터 간 검색 전제 조건
클러스터 간 검색을 설정하기 전에 도메인이 다음 요구 사항을 충족하는지 확인하십시오.
-
버전 6.7 이상의 OpenSearch 도메인 또는 Elasticsearch 도메인 2개
-
세분화된 액세스 제어를 사용하도록 설정됨
-
노드 간 암호화를 사용하도록 설정됨
클러스터 간 검색 요금
도메인 간 검색에는 추가 요금이 부과되지 않습니다.
연결 설정
“소스” 도메인은 클러스터 간 검색 요청이 시작된 도메인을 나타냅니다. 즉, 소스 도메인은 초기 검색 요청을 보내는 도메인입니다.
“대상” 도메인은 소스 도메인이 쿼리하는 도메인입니다.
클러스터 간 연결은 소스 도메인에서 대상 도메인으로 단방향입니다. 즉, 대상 도메인이 소스 도메인을 쿼리할 수 없습니다. 그러나 반대 방향으로 다른 연결을 설정할 수 있습니다.
소스 도메인은 대상 도메인에 대한 "아웃바운드" 연결을 생성합니다. 대상 도메인은 소스 도메인에서 “인바운드” 연결 요청을 받습니다.
연결을 설정하려면
-
도메인 대시보드에서 도메인을 선택하고 연결(Connections) 탭을 선택합니다.
-
[아웃바운드 연결(Outbound connections)] 섹션에서 [요청(Request)]을 선택합니다.
-
[연결 별칭(Connection alias)]에 연결 이름을 입력합니다.
-
AWS 계정 및 리전 또는 다른 계정 또는 리전의 도메인 연결 중에서 선택합니다.
-
AWS 계정 및 리전의 클러스터에 연결하려면 드롭다운 메뉴에서 도메인을 선택하고 [요청(Request)]을 선택합니다.
-
다른 AWS 계정 또는 리전의 클러스터에 연결하려면 원격 도메인의 ARN을 선택하고 [요청(Request)]을 선택합니다. 리전 간에 도메인을 연결하려면 두 도메인 모두 Elasticsearch 버전 7.10 이상이거나 OpenSearch를 실행해야 합니다.
-
-
클러스터 쿼리에 사용할 수 없는 클러스터를 건너뛰려면 사용할 수 없는 클러스터 건너뛰기를 선택합니다. 이 설정을 사용하면 하나 이상의 원격 클러스터에서 오류가 발생하더라도 클러스터 간 쿼리가 일부 결과를 반환할 수 있습니다.
-
클러스터 간 검색은 먼저 연결 요청을 검증하여 전제 조건이 충족되는지 확인합니다. 도메인이 호환되지 않는 것으로 확인되면 연결 요청이
Validation failed
상태로 들어갑니다. -
연결 요청이 성공적으로 검증되면 대상 도메인으로 전송되어 승인을 받아야 합니다. 이 승인이 이루어질 때까지 연결은
Pending acceptance
상태로 유지됩니다. 대상 도메인에서 연결 요청이 수락되면 상태가Active
으로 변경되고 대상 도메인을 쿼리에 사용할 수 있게 됩니다.-
도메인 페이지에는 대상 도메인의 전체 도메인 상태 및 인스턴스 상태 세부 정보가 표시됩니다. 도메인 소유자만 도메인과의 연결을 유연하게 생성하고 보고 제거하고 모니터링할 수 있습니다.
-
연결이 설정되면 연결된 도메인의 노드 간에 흐르는 모든 트래픽이 암호화됩니다. VPC 도메인을 VPC가 아닌 도메인에 연결하고 VPC가 아닌 도메인이 인터넷에서 트래픽을 수신할 수 있는 퍼블릭 엔드포인트인 경우, 도메인 간의 클러스터 간 트래픽은 여전히 암호화되고 안전합니다.
연결 제거
연결을 제거하면 인덱스에 대한 교차 클러스터 작업이 중지됩니다.
-
도메인 대시보드에서 [연결(Connections)] 탭으로 이동합니다.
-
제거할 도메인 연결을 선택하고 삭제(Delete)를 선택한 다음 삭제를 확인합니다.
소스 도메인이나 대상 도메인에서 이러한 단계를 수행하여 연결을 제거할 수 있습니다. 연결을 제거한 후에도 15일 동안 Deleted
상태로 계속 표시됩니다.
활성 클러스터 간 연결이 있는 도메인은 삭제할 수 없습니다. 도메인을 삭제하려면 먼저 해당 도메인과의 수신 연결과 발신 연결을 모두 제거합니다. 그러면 도메인을 삭제하기 전에 클러스터 간 도메인 사용자를 고려할 수 있습니다.
보안 설정 및 샘플 시연
-
소스 도메인에 클러스터 간 검색 요청을 보냅니다.
-
소스 도메인은 해당 도메인 액세스 정책을 기준으로 해당 요청을 평가합니다. 클러스터 간 검색에는 세분화된 액세스 제어가 필요하므로 소스 도메인에서 오픈 액세스 정책을 사용하는 것이 좋습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:region:account: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
에 대한 액세스를 허용해야 합니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::123456789012:user/test-user" ] }, "Action": "es:ESHttpGet", "Resource": "arn:aws:es:region:account:domain/src-domain/*" } ] }
-
소스 도메인에 대한 세분화된 액세스 제어가 요청을 평가합니다.
-
요청이 유효한 IAM 또는 HTTP 기본 자격 증명으로 서명되었습니까?
-
그렇다면 사용자에게 검색을 수행하고 데이터에 액세스할 수 있는 권한이 있습니까?
요청이 대상 도메인(예:
dest-alias:dest-index/_search
)의 데이터만 검색하는 경우 대상 도메인에 대한 사용 권한만 필요합니다.요청이 두 도메인(예:
source-index,dest-alias:dest-index/_search
)에서 데이터를 검색하는 경우 두 도메인에 대한 사용 권한이 필요합니다.세분화된 액세스 제어에서 사용자는 관련 인덱스에 대한 표준
read
또는search
권한 외에indices:admin/shards/search_shards
권한도 있어야 합니다. -
-
소스 도메인은 요청을 대상 도메인에 전달합니다. 대상 도메인은 해당 도메인 액세스 정책을 기준으로 이 요청을 평가합니다. 대상 도메인에 대한
es:ESCrossClusterGet
권한을 포함해야 합니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESCrossClusterGet", "Resource": "arn:aws:es:region:account:domain/dst-domain" } ] }
es:ESCrossClusterGet
권한이/dst-domain/*
이 아닌/dst-domain
에 적용되었는지 확인합니다.그러나 이 최소 정책은 클러스터 간 검색만 허용합니다. 문서 인덱싱 및 표준 검색 수행과 같은 다른 작업을 수행하려면 추가 권한이 필요합니다. 대상 도메인에서 다음 정책을 사용하는 것이 좋습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:region:account:domain/dst-domain/*" }, { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESCrossClusterGet", "Resource": "arn:aws:es:region:account:domain/dst-domain" } ] }
참고
도메인 간의 모든 클러스터 간 검색 요청은 기본적으로 노드 간 암호화의 일부로 전송 중에 암호화됩니다.
-
대상 도메인은 검색을 수행하고 결과를 소스 도메인에 반환합니다.
-
소스 도메인은 자체 결과(있는 경우)를 대상 도메인의 결과와 결합하여 반환합니다.
-
테스트 요청을 위해 Postman
을 사용하는 것이 좋습니다. -
대상 도메인에서 문서를 인덱싱합니다.
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" } } ] }
도메인 대시보드의 연결(Connections) 탭에서 연결 별칭을 찾을 수 있습니다.
-
연결 별칭이
cluster_b
인domain-a -> domain-b
와 연결 별칭이cluster_c
인domain-a -> domain-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": "Lets unite the new mutants", "likes": 0 } }, { "_index": "cluster_b:b_index", "_type": "_doc", "_id": "0", "_score": 2, "_source": { "user": "domino", "message": "I'm different", "likes": 0 } }, { "_index": "cluster_c:c_index", "_type": "_doc", "_id": "0", "_score": 3, "_source": { "user": "domino", "message": "So am I", "likes": 0 } } ] } }
연결 설정에서 사용할 수 없는 클러스터를 건너뛰도록 선택하지 않은 경우 검색 요청이 성공적으로 실행되려면 검색하는 모든 대상 클러스터를 사용할 수 있어야 합니다. 그렇지 않으면 전체 요청이 실패합니다. 도메인 중 하나를 사용할 수 없더라도 검색 결과가 반환되지 않습니다.
-
OpenSearch Dashboards
connection-alias:index
을(를) 사용하여 원격 인덱스에 액세스해야 한다는 점을 제외하면 연결된 여러 도메인의 데이터를 단일 도메인과 동일한 방식으로 시각화할 수 있습니다. 따라서 인덱스 패턴이 connection-alias:index
와 일치해야 합니다.