Amazon Elasticsearch Service 개발자 가이드
Amazon Elasticsearch Service: 개발자 가이드 Copyright 2019 Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's, in any manner that is likely to cause confusion among customers, or in any manner that disparages or discredits Amazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may not be affiliated with, connected to, or sponsored by Amazon.
Table of Contents Amazon Elasticsearch Service란?... 1 Amazon Elasticsearch Service의 기능... 1 지원되는 Elasticsearch 버전... 2 Amazon ES 가격... 2 Amazon Elasticsearch Service 시작하기... 3 관련 서비스... 3 Amazon ES 도메인 시작하기... 5 1단계: Amazon ES 도메인 생성... 5 2단계: 인덱싱을 위해 데이터 업로드... 7 3단계: Amazon ES 도메인에서 문서 검색... 8 4단계: Amazon ES 도메인 삭제... 9 Amazon ES 도메인 생성 및 구성... 10 Amazon ES 도메인 생성... 10 Amazon ES 도메인 생성(콘솔)... 10 Amazon ES 도메인 생성(AWS CLI)... 13 Amazon ES 도메인 생성(AWS SDK)... 14 Amazon ES 도메인 구성... 14 Amazon ES 도메인 구성(콘솔)... 14 Amazon ES 도메인 구성(AWS CLI)... 15 Amazon ES 도메인 구성(AWS SDK)... 15 EBS 기반 스토리지 구성... 16 EBS 기반 스토리지 구성(콘솔)... 16 EBS 기반 스토리지 구성(AWS CLI)... 17 EBS 기반 스토리지 구성(AWS SDK)... 18 VPC 액세스 구성 수정... 18 VPC 액세스 구성(콘솔)... 18 Kibana에 대한 Amazon Cognito 인증 구성... 18 액세스 정책 구성... 18 액세스 정책 구성(콘솔)... 19 액세스 정책 구성(AWS CLI)... 19 액세스 정책 구성(AWS SDK)... 20 고급 옵션 구성... 20 고급 옵션 구성(콘솔)... 21 고급 옵션 구성(AWS CLI)... 21 고급 옵션 구성(AWS SDK)... 21 로그 구성... 21 로그 게시 활성화(콘솔)... 22 로그 게시 활성화(AWS CLI)... 23 로그 게시 활성화(AWS SDK)... 24 느린 로그에 대한 Elasticsearch 로깅 임계값 설정... 24 로그 보기... 25 Amazon ES 도메인 관리... 26 구성 변경 정보... 26 구성 변경 비용... 27 서비스 소프트웨어 업데이트... 28 다중 AZ 도메인 구성... 29 샤드 배포... 29 전용 마스터 노드 분산... 31 가용 영역 중단... 32 상태 대시보드 해석... 33 Amazon CloudWatch를 사용하여 클러스터 지표 및 통계 모니터링(콘솔)... 34 클러스터 지표... 34 전용 마스터 노드 지표... 37 EBS 볼륨 지표... 38 iii
인스턴스 지표... Amazon Elasticsearch Service 도메인 태그 지정... 태그 작업(콘솔)... 태그 작업(AWS CLI)... 태그 작업(AWS SDK)... 보안... 데이터 보호... 저장 데이터 암호화... 노드 간 암호화... 자격 증명 및 액세스 관리... 정책 유형... Amazon ES 요청 서명 및 인증... 정책 충돌 시... 정책 요소 참조... 고급 옵션 및 API 고려 사항... 액세스 정책 구성... 추가 샘플 정책... 로깅 및 모니터링... CloudTrail의 Amazon Elasticsearch Service 정보... Amazon Elasticsearch Service 로그 파일 항목 이해... 규정 준수 확인... 복원성... 인프라 보안... 데이터 인덱싱... 인덱싱 소개... 인덱스에 대한 이름 지정 제약 조건... 응답 크기 감소... HTTP 요청에 서명... Java... Python... Ruby... Node... Go... Amazon ES로 스트리밍 데이터 로드... Amazon S3에서 Amazon ES로 스트리밍 데이터 로드... 사전 조건... Lambda 배포 패키지 만들기... Lambda 함수 생성... Lambda 함수 테스트... Amazon Kinesis Data Streams에서 Amazon ES로 스트리밍 데이터 로드... 사전 조건... Lambda 함수 생성... Lambda 함수 테스트... Amazon DynamoDB에서 Amazon ES로 스트리밍 데이터 로드... 사전 조건... Lambda 함수 생성... Lambda 함수 테스트... Amazon Kinesis Data Firehose에서 Amazon ES로 스트리밍 데이터 로드... Amazon CloudWatch에서 Amazon ES로 스트리밍 데이터 로드... AWS IoT에서 Amazon ES로 데이터 로드... 데이터 검색... URI 검색... 요청 본문 검색... 필드 부스팅... 검색 결과 페이지 매김... 검색 결과 강조 표시... Count API... iv 38 41 42 43 44 45 45 46 48 48 48 52 53 53 58 60 60 61 61 61 63 64 64 65 65 66 67 69 69 71 73 75 76 78 78 78 79 80 82 83 83 84 85 85 85 86 87 88 88 88 89 89 90 91 91 91 93
인덱스 스냅샷 작업... 94 수동 스냅샷 필수 조건... 95 수동 스냅샷 리포지토리 등록... 96 샘플 Python 클라이언트... 97 수동 스냅샷 생성... 98 스냅샷 복원... 99 Elasticsearch 업데이트... 101 업그레이드 문제 해결... 102 업그레이드 시작... 103 스냅샷을 사용하여 데이터를 마이그레이션... 104 Kibana 및 Logstash... 106 Kibana... 106 Kibana에 대한 액세스 제어... 106 WMS 맵 서버를 사용하도록 Kibana 구성... 109 Amazon ES에 로컬 Kibana 서버 연결... 109 Logstash 플러그인을 사용하여 대량 데이터 로드... 109 Kibana에 대한 인증... 111 사전 조건... 111 사용자 풀 소개... 112 자격 증명 풀 소개... 112 IAM 역할 소개... 112 Amazon ES 도메인 구성... 113 Amazon Cognito 인증 구성(콘솔)... 113 Amazon Cognito 인증 구성(AWS CLI)... 114 Amazon Cognito 인증 구성(AWS SDK)... 115 인증된 역할 허용... 115 자격 증명 공급자 구성... 115 (선택 사항) 세분화된 액세스 구성... 117 사용자 그룹과 토큰... 118 규칙... 119 (선택 사항) 로그인 페이지 사용자 지정... 119 (선택 사항) 어드밴스 보안 구성... 119 테스트... 119 제한 사항... 119 일반적인 구성 문제... 120 Kibana에 대한 Amazon Cognito 인증 비활성화... 122 Kibana에 Amazon Cognito 인증을 사용하는 도메인 삭제... 122 알림... 123 차이... 123 Amazon SNS 지원... 123 알림 설정... 124 SQL 지원... 125 샘플 호출... 125 참고 사항 및 차이점... 125 JDBC 드라이버... 125 VPC 지원... 126 제한... 128 VPC 도메인 액세스 정책에 대하여... 128 VPC 도메인 테스트... 129 사전 조건... 130 VPC 만들기... 130 VPC 서브넷에서 IP 주소 예약... 131 VPC 액세스를 위한 서비스 연결 역할... 132 퍼블릭 액세스에서 VPC 액세스로 마이그레이션... 132 Amazon VPC 문서... 133 모범 사례... 134 Amazon ES 도메인 크기 조정... 134 v
스토리지 요구 사항 계산... 샤드 수 선택... 인스턴스 유형 선택 및 테스트... 전용 마스터 노드... 권장되는 CloudWatch 경보... 페타바이트 규모... Curator를 사용하여 데이터 회전... 샘플 코드... 기본 설정... 트리거... 권한... 문제 해결... Kibana에 액세스할 수 없습니다.... VPC 도메인에 액세스할 수 없습니다.... 읽기 전용 상태의 클러스터... 빨간색 클러스터 상태... 지속적으로 과도한 처리 로드에서 복구... 노란색 클러스터 상태... ClusterBlockException... 사용 가능한 스토리지 공간 부족... 메모리 부족으로 인한 디스크 차단... JVM OutOfMemoryError... 실패한 클러스터 노드... 인덱스를 닫을 수 없습니다.... 노드에 SSH할 수 없습니다.... "객체 스토리지 클래스의 경우 유효하지 않음" 오류... 잘못된 호스트 헤더... 업그레이드 후에는 다운그레이드할 수 없음... 모든 리전의 도메인에 대한 요약 필요... Kibana를 사용하려 할 때 브라우저 오류... VPC 액세스를 선택한 후 허용되지 않은 작업... VPC 도메인 생성 후 로딩 단계에서 멈춤... SDK를 사용할 때 인증서 오류... 일반 참조... 지원되는 인스턴스 유형... 지원되는 Elasticsearch 작업... 주요 API 차이점... 버전 7.1... 버전 6.8... 버전 6.7... 버전 6.5... 버전 6.4... 버전 6.3... 버전 6.2... 버전 6.0... 버전 5.6... 버전 5.5... 버전 5.3... 버전 5.1... 버전 2.3... 버전 1.5... 지원되는 플러그인... 출력 플러그인... 지원되는 기타 리소스... AWS SDK 사용... Java... Amazon ES 구성 API 참조... vi 135 136 136 137 140 142 144 144 147 147 147 149 149 149 149 150 151 152 152 152 152 153 153 154 154 154 154 154 155 155 155 156 156 158 158 159 159 160 161 162 163 164 165 165 166 167 168 169 169 170 171 171 175 176 177 177 181
작업... AddTags... CreateElasticsearchDomain... DeleteElasticsearchDomain... DeleteElasticsearchServiceRole... DescribeElasticsearchDomain... DescribeElasticsearchDomainConfig... DescribeElasticsearchDomains... DescribeElasticsearchInstanceTypeLimits... DescribeReservedElasticsearchInstanceOfferings... DescribeReservedElasticsearchInstances... GetCompatibleElasticsearchVersions... GetUpgradeHistory... GetUpgradeStatus... ListDomainNames... ListElasticsearchInstanceTypeDetails... ListElasticsearchInstanceTypes (지원 중단)... ListElasticsearchVersions... ListTags... PurchaseReservedElasticsearchInstance... RemoveTags... StartElasticsearchServiceSoftwareUpdate... StopElasticsearchServiceSoftwareUpdate... UpdateElasticsearchDomainConfig... UpgradeElasticsearchDomain... 데이터 형식... AdvancedOptions... AdvancedOptionsStatus... ARN... CognitoOptions... CognitoOptionsStatus... CreateElasticsearchDomainRequest... DomainID... DomainName... DomainNameList... EBSOptions... ElasticsearchClusterConfig... ElasticsearchDomainConfig... ElasticsearchDomainStatus... ElasticsearchDomainStatusList... EncryptionAtRestOptions... EncryptionAtRestOptionsStatus... EndpointsMap... LogPublishingOptions... LogPublishingOptionsStatus... NodeToNodeEncryptionOptions... NodeToNodeEncryptionOptionsStatus... OptionState... OptionStatus... ServiceSoftwareOptions... ServiceURL... SnapshotOptions... SnapshotOptionsStatus... 태그... TagKey... TagList... TagValue... vii 181 182 183 188 190 191 193 196 198 201 203 204 206 208 209 210 212 214 215 216 218 219 220 221 225 227 227 227 228 228 228 228 229 229 230 230 230 231 231 233 233 234 234 234 235 235 235 235 236 236 237 237 237 237 238 238 238
VPCDerivedInfo... VPCDerivedInfoStatus... VPCOptions... VPCOptionsStatus... ZoneAwarenessConfig... 오류... 제한... 클러스터 및 인스턴스 제한... EBS 볼륨 크기 제한... 네트워크 제한... Java 프로세스 제한... 도메인 정책 제한... 예약 인스턴스... 예약 인스턴스 구입(콘솔)... 예약 인스턴스 구입(AWS CLI)... 예약 인스턴스 구입(AWS SDK)... 비용 검사... 자습서: 검색 애플리케이션 생성... 1단계: 샘플 데이터 인덱싱... 2단계: API 생성... 3단계: Lambda 함수 생성... 4단계: 도메인 액세스 정책 수정... 5단계: 웹 애플리케이션 테스트... 다음 단계... 자습서: 지원 통화 시각화... 1단계: 사전 조건 구성... 2단계: 샘플 코드 복사... (선택 사항) 3단계: 샘플 데이터 추가... 4단계: 데이터 분석 및 시각화... 5단계: 리소스 정리 및 다음 단계... 서비스 연결 역할 사용... Amazon ES에 대한 서비스 연결 역할 권한... Amazon ES에 대한 서비스 연결 역할 생성... Amazon ES에 대한 서비스 연결 역할 편집... Amazon ES에 대한 서비스 연결 역할 삭제... 서비스 연결 역할 정리... 서비스 연결 역할 수동 삭제... 문서 기록... 출시 정보... 이전 업데이트... AWS Glossary... viii 238 238 239 239 239 239 241 241 241 243 245 245 246 246 247 248 249 250 250 251 252 253 253 255 256 257 257 260 261 265 266 266 266 267 267 267 267 268 268 271 273
Amazon Elasticsearch Service의 기능 Amazon Elasticsearch Service란? Amazon Elasticsearch Service(Amazon ES)는 AWS 클라우드에서 Elasticsearch 클러스터를 쉽게 배포, 운 영 및 조정할 수 있는 관리형 서비스입니다. Elasticsearch는 로그 분석, 실시간 애플리케이션 모니터링, 클릭 스트림 분석 같은 사용 사례를 위한 인기 있는 오픈 소스 검색 및 분석 엔진입니다. Amazon ES를 사용하면 Elasticsearch API에 바로 액세스해 기존 코드 및 애플리케이션을 서비스를 통해 원활하게 사용할 수 있습니 다. Amazon ES는 Elasticsearch 클러스터의 리소스를 모두 프로비저닝하고 클러스터를 시작합니다. 또한 실패 한 Elasticsearch 노드를 자동으로 감지한 다음 교체해 자체 관리형 인프라와 관련된 오버헤드를 줄입니다. API를 한 번만 호출하거나 콘솔에서 몇 번만 클릭하여 클러스터를 조정할 수 있습니다. Amazon ES 사용을 시작하려면 도메인을 만듭니다. Amazon ES 도메인은 Elasticsearch 클러스터와 동의어 입니다. 도메인은 설정, 인스턴스 유형, 인스턴스 수, 스토리지 리소스를 지정한 설정입니다. Amazon ES 콘솔을 사용하여 몇 분 만에 도메인을 설정 및 구성할 수 있습니다. 프로그래밍 방식 액세스를 선호하는 경우 AWS CLI 또는 AWS SDK를 사용할 수 있습니다. 주제 Amazon Elasticsearch Service의 기능 (p. 1) 지원되는 Elasticsearch 버전 (p. 2) Amazon Elasticsearch Service 가격 (p. 2) Amazon Elasticsearch Service 시작하기 (p. 3) 관련 서비스 (p. 3) Amazon Elasticsearch Service의 기능 Amazon ES의 특징은 다음과 같습니다. 크기 조정 다양한 CPU, 메모리 및 스토리지 용량 구성(인스턴스 유형이라고 함) 최대 3PB의 인스턴스 스토리지 Amazon EBS 스토리지 볼륨 보안 AWS Identity and Access Management(IAM) 액세스 제어 Amazon VPC 및 VPC 보안 그룹을 사용하는 쉬운 통합 저장 중 데이터 암호화 및 노드 간 암호화 Kibana에 대한 Amazon Cognito 인증 안정성 리소스를 위한 여러 지리적 위치(리전 및 가용 영역이라고 함) 동일한 리전의 가용 영역 두 개 또는 세 개에 노드 할당(다중 AZ) 클러스터 관리 작업 부담을 줄여주는 전용 마스터 노드 자동 스냅샷으로 Amazon ES 도메인 백업 및 복원 유명 서비스와의 통합 1
지원되는 Elasticsearch 버전 Kibana를 사용하는 데이터 시각화 Amazon ES 도메인 지표 및 설정 경보 모니터링을 위한 Amazon CloudWatch와의 통합 Amazon ES 도메인에 대한 구성 API 호출 감사를 위한 AWS CloudTrail과의 통합 Amazon ES로 스트리밍 데이터 로드를 위한 Amazon S3, Amazon Kinesis 및 Amazon DynamoDB와의 통 합 지원되는 Elasticsearch 버전 Amazon ES에서는 현재 다음과 같은 Elasticsearch 버전을 지원합니다. 7.1 6.8, 6.7, 6.5, 6.4, 6.3, 6.2, 6.0 5.6, 5.5, 5.3, 5.1 2.3 1.5 Note Amazon Kinesis Data Firehose는 현재 Amazon ES 7.x 도메인을 지원하지 않습니다. Elasticsearch의 이전 버전에 비해 7.x 및 6.x 버전은 보다 빠르고 안전하며 손쉽게 사용할 수 있는 강력한 기 능을 제공합니다. 몇 가지 주요 내용은 다음과 같습니다. 인덱스 분할 인덱스가 원래 샤드 수보다 많아지는 경우 _split API를 사용하여 각각의 기본 샤드를 새 로운 인덱스에 두 개 이상의 샤드로 분할할 수 있습니다. Vega 가상화 Kibana 6.2는 Vega 가상화 언어를 지원합니다. 이를 통해 컨텍스트 인식 Elasticsearch 쿼 리를 만들고, 여러 데이터 소스를 하나의 그래프에 통합하며, 사용자 상호 작용을 그래프에 추가하는 등의 작업을 할 수 있습니다. Java 상위 수준 REST 클라이언트 이 클라이언트는 하위 수준 클라이언트와 비교하여 개발 환경을 단순 화하고 많은 Elasticsearch API를 지원합니다. 코드 샘플은 HTTP 요청 서명 (p. 69)을 참조하십시오. 가중 평균 이 집계 기능을 사용하여 문서에 가중치를 할당하고 해당 가중치를 주어진 값의 평균에 포함 시킬 수 있습니다. 향상된 인덱싱 성능 최신 버전의 Elasticsearch는 인덱싱 기능이 우수해서 데이터 업데이트 처리량이 크 게 늘었습니다. 보호 조치 개선 새 버전의 Elasticsearch는 향상된 클러스터 조정 기능을 제공하며 지나치게 광범위하거 나 복잡한 쿼리가 성능과 안정성에 부정적인 영향을 주지 않도록 설계된 많은 보호 조치 기능을 제공합니 다. Amazon ES에서 지원하는 API 및 Elasticsearch 버전 간 차이에 대한 자세한 내용은 the section called 지원 되는 Elasticsearch 작업 (p. 159) 단원을 참조하십시오. Elasticsearch 프로젝트를 새로 시작하는 경우에는 지원되는 최신 버전의 Elasticsearch를 선택하는 것이 좋 습니다. Elasticsearch 구 버전을 사용하는 기존 도메인이 있으면 그 도메인을 유지하거나 데이터를 마이그레 이션할 수 있습니다. 자세한 내용은 Elasticsearch 업데이트 (p. 101) 단원을 참조하십시오. Amazon Elasticsearch Service 가격 AWS에서는 사용한 만큼만 지불하면 됩니다. Amazon ES에서는 EC2 인스턴스의 사용 시간과 인스턴스에 연결된 EBS 스토리지 볼륨의 누적 크기에 대해 요금을 지불합니다. 이때 표준 AWS 데이터 전송 요금도 적 용됩니다. 2
Amazon Elasticsearch Service 시작하기 하지만 알아둘 만한 데이터 전송 예외가 존재합니다. 도메인에서 다중 가용 영역 (p. 29)을 사용하는 경우, Amazon ES는 도메인이 속하는 두 가용 영역 간의 트래픽에 대해 요금을 청구하지 않습니다. 또한 샤드 할당 및 재분배 과정에서는 도메인 내부에서 상당한 데이터 전송이 발생합니다. 이때 일어나는 트래픽에 대해서도 Amazon ES는 측정하거나 요금을 청구하지 않습니다. 전체 요금 내역은 Amazon Elasticsearch Service 요금을 참조하십시오. 구성 변경 도중 발생하는 변경 사항 에 대한 자세한 내용은 the section called 구성 변경 비용 (p. 27) 단원을 참조하십시오. Amazon Elasticsearch Service 시작하기 AWS 계정이 아직 없는 경우 시작하려면 계정에 가입해야 합니다. 계정을 설정하면 Amazon Elasticsearch Service에 대한 시작하기 (p. 5) 자습서를 완료합니다. 이 서비스에 대해 알아보는 중 추가 정보가 필요한 경우 다음 소개 주제를 참조하십시오. 도메인 생성 (p. 10) 도메인 크기를 적절히 조정 (p. 134) 도메인 액세스 제어 (p. 48) 수동으로 (p. 65) 또는 다른 서비스 (p. 78)로부터 데이터 인덱싱 Kibana (p. 106)를 사용하여 데이터 검색 관련 서비스 Amazon ES는 일반적으로 다음 서비스와 함께 사용됩니다. Amazon CloudWatch Amazon ES 도메인은 CloudWatch에 지표를 자동으로 보내므로 도메인 상태 및 성능을 모니터링할 수 있습니다. 자세한 내용은 Amazon CloudWatch를 사용하여 클러스터 지표 및 통계 모니터링(콘 솔) (p. 34) 단원을 참조하십시오. CloudWatch Logs가 다른 방향으로 진행될 수도 있습니다. 분석을 위해 데이터를 Amazon ES로 스 트리밍하도록 CloudWatch Logs를 구성할 수도 있습니다. 자세한 내용은 the section called Amazon CloudWatch에서 Amazon ES로 스트리밍 데이터 로드 (p. 88) 단원을 참조하십시오. AWS CloudTrail AWS CloudTrail을 사용하면 계정의 Amazon ES 구성 API 호출 및 관련 이벤트 내역을 확인할 수 있습니 다. 자세한 내용은 Amazon Elasticsearch Service의 로깅 및 모니터링 (p. 61) 단원을 참조하십시오. Amazon Kinesis Kinesis는 방대한 규모의 스트리밍 데이터를 실시간으로 처리하는 관리형 서비스입니다. 자세한 내용은 the section called Amazon Kinesis Data Streams에서 Amazon ES로 스트리밍 데이터 로 드 (p. 83) 및 the section called Amazon Kinesis Data Firehose에서 Amazon ES로 스트리밍 데이터 로드 (p. 88) 단원을 참조하십시오. Amazon S3 Amazon Simple Storage Service(Amazon S3)는 인터넷용 스토리지를 제공합니다. 이 가이드에서는 Amazon S3 통합을 위한 Lambda 샘플 코드를 제공합니다. 자세한 내용은 the section called Amazon S3에서 Amazon ES로 스트리밍 데이터 로드 (p. 78) 단원을 참조하십시오. AWS IAM AWS Identity and Access Management(IAM)는 Amazon ES 도메인에 대한 액세스 관리를 위해 사용할 수 있는 웹 서비스입니다. 자세한 내용은 the section called 자격 증명 및 액세스 관리 (p. 48) 단원을 참조하십시오. 3
관련 서비스 AWS Lambda AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비 스입니다. 이 가이드는 DynamoDB, Amazon S3 및 Kinesis의 데이터를 스트리밍하기 위한 Lambda 샘 플 코드를 제공합니다. 자세한 내용은 Amazon ES로 스트리밍 데이터 로드 (p. 78) 단원을 참조하십 시오. Amazon DynamoDB Amazon DynamoDB는 완벽하게 관리되는 NoSQL 데이터베이스 서비스로, 원활한 확장성과 함께 빠르 고 예측 가능한 성능을 제공합니다. Amazon ES에 데이터를 스트리밍하는 데 대한 자세한 내용은 the section called Amazon DynamoDB에서 Amazon ES로 스트리밍 데이터 로드 (p. 85) 단원을 참조하 십시오. 4
1단계: Amazon ES 도메인 생성 Amazon Elasticsearch Service 시작하 기 이 자습서에서는 Amazon Elasticsearch Service(Amazon ES)를 사용하여 테스트 도메인을 만들고 구성하는 방법을 보여줍니다. Amazon ES 도메인은 Elasticsearch 클러스터와 동의어입니다. 도메인은 설정, 인스턴스 유형, 인스턴스 수, 스토리지 리소스를 지정한 설정입니다. 이 자습서는 도메인을 빠르게 실행하기 위한 기본 단계를 안내합니다. 자세한 정보는 이 설명서의 Amazon ES 도메인 생성 및 구성 (p. 10) 및 기타 주제 단원을 참조하십시오. Amazon ES 콘솔, AWS CLI 또는 AWS SDK를 사용하여 다음 단계를 완료할 수 있습니다. 1. Amazon ES 도메인 생성 (p. 5) 2. 인덱싱을 위해 Amazon ES 도메인에 데이터 업로드 (p. 7) 3. Amazon ES 도메인에서 문서 검색 (p. 8) 4. Amazon ES 도메인 삭제 (p. 9) AWS CLI 설치 및 설정에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서 단원을 참조하십 시오. 1단계: Amazon ES 도메인 생성 Important 이 프로세스는 테스트 도메인을 구성하기 위한 약식 자습서입니다. 프로덕션 도메인을 만드는 데 사 용하면 안 됩니다. 동일한 프로세스의 전체 버전은 Amazon ES 도메인 생성 및 구성 (p. 10) 단원 을 참조하십시오. Amazon ES 도메인은 Elasticsearch 클러스터와 동의어입니다. 도메인은 설정, 인스턴스 유형, 인스턴스 수, 스토리지 리소스를 지정한 설정입니다. 콘솔, AWS CLI 또는 AWS SDK를 사용하여 Amazon ES 도메인을 만 들 수 있습니다. Amazon ES 도메인을 만들려면(콘솔) 1. 2. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. Analytics에서 Elasticsearch 서비스를 선택합니다. 3. [Define domain] 페이지에서 [Elasticsearch domain name]에 도메인 이름을 입력합니다. 이 시작하기 자 습서에서는 이후에 다룰 movies를 예제 도메인 이름으로 사용합니다. 버전에서 해당 도메인의 Elasticsearch 버전을 선택합니다. 지원되는 최신 버전을 선택하는 것이 좋습니 다. 자세한 내용은 the section called 지원되는 Elasticsearch 버전 (p. 2) 단원을 참조하십시오. [Next]를 선택합니다. 인스턴스 수에 원하는 인스턴스 수를 입력합니다. 이 자습서에서는 기본값 1을 사용할 수 있습니다. 인스턴스 유형에서 Amazon ES 도메인의 인스턴스 유형을 선택합니다. 이 자습서에는 테스트 목적에 적 합한 소용량의 경제적인 인스턴스 유형 t2.small.elasticsearch를 사용하는 것이 좋습니다. 지금은 Enable dedicated master(전용 마스터 활성화) 및 Enable zone awareness(영역 인식 활성화) 확 인란은 무시할 수 있습니다. 두 확인란에 대한 자세한 내용은 전용 마스터 노드 정보 (p. 137) 및 영역 인식 활성화 (p. 29) 단원을 참조하십시오. 스토리지 유형에서 EBS를 선택합니다. 4. 5. 6. 7. 8. 9. 5
1단계: Amazon ES 도메인 생성 a. EBS volume type(ebs 볼륨 유형)에 일반용(SSD)을 선택합니다. 자세한 내용은 Amazon EBS 볼륨 유형을 참조하십시오. b. EBS volume size(ebs 볼륨 크기)에 각 데이터 노드용 외부 스토리지의 크기를 GiB 단위로 입력합 니다. 이 자습서에서는 기본값 10을 사용할 수 있습니다. 10. 현재 저장된 암호화 활성을 무시할 수 있습니다. 기능에 대한 자세한 내용은 the section called 저장 데 이터 암호화 (p. 46) 단원을 참조하십시오. 11. [Next]를 선택합니다. 12. 이 자습서에서는 간단한 설명을 위해 IP 기반의 액세스 정책을 권장합니다. Set up access(액세스 설정) 페이지의 Network configuration(네크워크 구성) 섹션에서 퍼블릭 액세스를 선택합니다. 13. 현재 Kibana 인증을 무시할 수 있습니다. 기능에 대한 자세한 내용은 Kibana에 대한 인증 (p. 111) 단 원을 참조하십시오. 14. Set the domain access policy to(도메인 액세스 정책을 다음으로 설정)에 Allow access to the domain from specific IP(s)(특정 IP로부터 도메인에 대한 액세스를 허용)를 선택하고 퍼블릭 IP 주소를 입력합니 다. 이 주소는 대부분의 검색 엔진에서 "What is my IP?"를 입력하여 찾을 수 있습니다. 그 다음에 [OK]를 선택합니다. 퍼블릭 액세스, VPC 액세스 및 액세스 정책에 대한 일반적인 사항을 자세히 알아보려면 the section called 자격 증명 및 액세스 관리 (p. 48) 및 VPC 지원 (p. 126) 단원을 참조하십시오. 15. [Next]를 선택합니다. 16. 복습 페이지에서 도메인 구성을 검토한 다음 확인을 선택합니다. Note 새 도메인을 초기화하는 데는 약 10분이 걸립니다. 도메인을 초기화한 후에는 데이터를 업로드 하고 도메인을 변경할 수 있습니다. Amazon ES 도메인을 만들려면(AWS CLI) 다음 명령을 실행하여 Amazon ES 도메인을 만듭니다. 이 명령은 Elasticsearch 버전 6.0을 사용하여 movies라는 도메인을 생성합니다. t2.small.elasticsearch 인스턴스 유형의 인스턴스가 1개 지정됩니다. 이 인스턴스 유형에는 EBS 스토리지가 필요하기 때문에 10GiB 볼륨이 지정됩니다. 마지막으로 이 명령은 도메인 액세스를 하나의 IP 주소로 제한하는 IP 기반 액세스 정책을 지정합니다. 명령에서 your_ip_address를 사용자의 퍼블릭 IP 주소를 바꿔야 합니다. 이 주소는 Google에서 "What is my IP?"를 입력하여 찾을 수 있습니다. aws es create-elasticsearch-domain --domain-name movies --elasticsearch-version 6.0 --elasticsearch-cluster-config InstanceType=t2.small.elasticsearch,InstanceCount=1 --ebs-options EBSEnabled=true,VolumeType=standard,VolumeSize=10 --accesspolicies '"Version":"2012-10-17","Statement":["Effect":"Allow","Principal": "AWS":"*""Action":["es:*"],"Condition":"IpAddress":"aws:SourceIp": ["your_ip_address"]]' Note 새 도메인을 초기화하는 데는 약 10분이 걸립니다. 도메인을 초기화한 후에는 데이터를 업로드하고 도메인을 변경할 수 있습니다. 다음 명령을 사용하여 새 도메인의 상태를 쿼리합니다. aws es describe-elasticsearch-domain --domain movies 6
2단계: 인덱싱을 위해 데이터 업로드 Amazon ES 도메인을 만들려면(AWS SDK) AWS SDK(Android 및 ios SDK 제외)는 CreateElasticsearchDomain 작업을 비롯하여 Amazon ES 구성 API 참조 (p. 181)에 정의된 모든 작업을 지원합니다. AWS SDK 설치 및 사용에 대한 자세한 내용은 AWS 소프트웨어 개발 키트를 참조하십시오. 2단계: 인덱싱을 위해 Amazon ES 도메인에 데이터 업로드 Important 이 프로세스는 소량의 테스트 데이터를 업로드하기 위한 약식 자습서입니다. 자세한 내용은 데이터 인덱싱 (p. 65) 단원을 참조하십시오. 명령줄에서 데이터를 Amazon Elasticsearch Service 도메인에 업로드하고 Elasticsearch 인덱스 및 대량 API 를 사용하여 인덱싱할 수 있습니다. 인덱스 API를 사용하여 Elasticsearch 문서 하나를 추가 또는 업데이트할 수 있습니다. 대량 API를 사용하면 동일한 JSON 파일로 기술된 여러 Elasticsearch 문서를 추가 또는 업데이트할 수 있 습니다. 다음 예제의 요청에서는 편의상 간단히 일반적인 HTTP 클라이언트인 curl을 사용합니다. 액세스 정책에서 IAM 사용자 또는 역할을 지정한 경우 curl 같은 클라이언트에서는 필요한 요청 서명을 실행할 수 없습니다. 이 단계의 지침을 제대로 수행하려면 1단계 (p. 5)에서 구성한 것과 같이 미인증 액세스를 허용하는 IP 주소 기반의 액세스 정책을 사용해야 합니다. Windows에 curl을 설치하고 명령 프롬프트에서 이를 사용할 수 있지만, Cygwin 같은 도구나 Linux용 Windows 하위 시스템을 권장합니다. macos 및 대부분의 Linux 배포판은 curl이 사전 설치된 상태로 제공됩 니다. Amazon ES 도메인에 문서 하나를 업로드하려면 다음 명령을 실행하여 movies 도메인에 문서 하나를 추가합니다. curl -XPUT elasticsearch_domain_endpoint/movies/_doc/1 -d '"director": "Burton, Tim", "genre": ["Comedy","Sci-Fi"], "year": 1996, "actor": ["Jack Nicholson","Pierce Brosnan","Sarah Jessica Parker"], "title": "Mars Attacks!"' -H 'Content-Type: application/json' 이 명령에 대한 자세한 설명과 Amazon ES에 대한 서명된 요청을 작성하는 방법은 데이터 인덱싱 (p. 65) 단원을 참조하십시오. 문서 여러 개가 포함된 JSON 파일을 Amazon ES 도메인에 업로드하려면 1. bulk_movies.json이라는 파일을 생성합니다. 다음 내용을 복사하여 붙여 넣고, 후행 줄바꿈을 추가 합니다. "index" : "_index": "movies", "_type" : "_doc", "_id" : "2" "director": "Frankenheimer, John", "genre": ["Drama", "Mystery", "Thriller"], "year": 1962, "actor": ["Lansbury, Angela", "Sinatra, Frank", "Leigh, Janet", "Harvey, Laurence", "Silva, Henry", "Frees, Paul", "Gregory, James", "Bissell, Whit", "McGiver, John", "Parrish, Leslie", "Edwards, James", "Flowers, Bess", "Dhiegh, Khigh", "Payne, Julie", "Kleeb, Helen", "Gray, Joe", "Nalder, Reggie", "Stevens, Bert", "Masters, Michael", "Lowell, Tom"], "title": "The Manchurian Candidate" 7
3단계: Amazon ES 도메인에서 문서 검색 "index" : "_index": "movies", "_type" : "_doc", "_id" : "3" "director": "Baird, Stuart", "genre": ["Action", "Crime", "Thriller"], "year": 1998, "actor": ["Downey Jr., Robert", "Jones, Tommy Lee", "Snipes, Wesley", "Pantoliano, Joe", "Jacob, Ir\u00e8ne", "Nelligan, Kate", "Roebuck, Daniel", "Malahide, Patrick", "Richardson, LaTanya", "Wood, Tom", "Kosik, Thomas", "Stellate, Nick", "Minkoff, Robert", "Brown, Spitfire", "Foster, Reese", "Spielbauer, Bruce", "Mukherji, Kevin", "Cray, Ed", "Fordham, David", "Jett, Charlie"], "title": "U.S. Marshals" "index" : "_index": "movies", "_type" : "_doc", "_id" : "4" "director": "Ray, Nicholas", "genre": ["Drama", "Romance"], "year": 1955, "actor": ["Hopper, Dennis", "Wood, Natalie", "Dean, James", "Mineo, Sal", "Backus, Jim", "Platt, Edward", "Ray, Nicholas", "Hopper, William", "Allen, Corey", "Birch, Paul", "Hudson, Rochelle", "Doran, Ann", "Hicks, Chuck", "Leigh, Nelson", "Williams, Robert", "Wessel, Dick", "Bryar, Paul", "Sessions, Almira", "McMahon, David", "Peters Jr., House"], "title": "Rebel Without a Cause" 2. 다음 명령을 실행하여 movies 도메인에 파일을 업로드합니다. curl -XPOST elasticsearch_domain_endpoint/_bulk --data-binary @bulk_movies.json -H 'Content-Type: application/json' 벌크 파일 형식에 대한 자세한 내용은 데이터 인덱싱 (p. 65)을 참조하십시오. Note Amazon ES는 Amazon ES 및 자체 관리형 Elasticsearch 클러스터 둘 다에서 생성한 수동 스냅샷으 로부터 데이터를 마이그레이션할 수 있습니다. 자체 관리형 Elasticsearch 클러스터에서 스냅샷을 복원하는 것은 Amazon ES로 데이터를 마이그레이션하는 일반적인 방법입니다. 자세한 내용은 the section called 스냅샷 복원 (p. 99)단원을 참조하십시오. 3단계: Amazon ES 도메인에서 문서 검색 Amazon Elasticsearch Service 도메인에서 문서를 검색하려면 Elasticsearch 검색 API를 사용합니다. 그 밖 에 Kibana (p. 106)를 사용하여 도메인의 문서를 검색할 수도 있습니다. 명령줄에서 문서를 검색하려면 다음 명령을 실행하여 movies 도메인에서 mars를 검색합니다. curl -XGET 'elasticsearch_domain_endpoint/movies/_search?q=mars' 이전 페이지에서 대량 데이터를 사용한 경우, 대신에 rebel을 검색해 보십시오. Kibana를 사용하여 Amazon ES 도메인에서 문서를 검색하려면 1. 브라우저에서 Amazon ES 도메인의 Kibana 플러그인을 지정합니다. Amazon ES 콘솔에서 도메인 대시 보드의 Kibana 엔드포인트를 찾을 수 있습니다. URL은 다음 형식을 따릅니다. https://domain.region.es.amazonaws.com/_plugin/kibana/ 2. Kibana를 사용하려면 인덱스 패턴을 1개 이상 구성해야 합니다. Kibana는 이러한 패턴을 사용하여 분석 할 인덱스를 식별하기 때문입니다. 이번 자습서에서는 movies를 입력한 후 [Create]를 선택합니다. 3. [Index Patterns] 화면에 actor, director 등 다양한 문서 필드가 표시됩니다. 그런 다음 [Discover]를 선택하여 데이터를 검색합니다. 4. 검색 창에 mars를 입력한 후 Enter를 누릅니다. mars attacks을 검색할 경우 유사성 점수(_score)가 어 떻게 증가하는지 살펴보십시오. 8
4단계: Amazon ES 도메인 삭제 4단계: Amazon ES 도메인 삭제 자습서의 movies 도메인은 테스트용이므로, 시험 사용을 완료하면 비용 발생을 방지하기 위해 도메인을 삭 제해야 합니다. Amazon ES 도메인을 삭제하려면(콘솔) 1. 2. Amazon Elasticsearch Service 콘솔에 로그인합니다. 탐색 창의 My domains(내 도메인)에서 movies 도메인을 선택합니다. 3. Elasticsearch 도메인 삭제를 선택합니다. 4. 5. 도메인 삭제를 선택합니다. 도메인 삭제 확인란을 선택한 다음 삭제를 선택합니다. Amazon ES 도메인을 삭제하려면(AWS CLI) 다음 명령을 실행하여 movies 도메인을 삭제합니다. aws es delete-elasticsearch-domain --domain-name movies Note 도메인을 삭제하면 청구 가능한 Amazon ES 리소스가 모두 삭제됩니다. 그러나 사용자가 만든 도메 인의 수동 스냅샷은 삭제되지 않습니다. 이후에 Amazon ES 도메인을 다시 만들어야 할 수 있는 경 우 스냅샷을 저장해 두십시오. 도메인을 다시 만들 계획이 없는 경우 수동으로 만든 스냅샷을 모두 안전하게 삭제할 수 있습니다. Amazon ES 도메인을 삭제하려면(AWS SDK) AWS SDK(Android 및 ios SDK 제외)는 DeleteElasticsearchDomain 작업을 비롯하여 Amazon ES 구성 API 참조 (p. 181)에 정의된 모든 작업을 지원합니다. AWS SDK 설치 및 사용에 대한 자세한 내용은 AWS 소프트웨어 개발 키트를 참조하십시오. 9
Amazon ES 도메인 생성 Amazon Elasticsearch Service 도메인 생성 및 구성 이 장에서는 Amazon Elasticsearch Service(Amazon ES) 도메인을 만들고 구성하는 방법에 대해 설명합니 다. Amazon ES 도메인은 Elasticsearch 클러스터와 동의어입니다. 도메인은 설정, 인스턴스 유형, 인스턴스 수, 스토리지 리소스를 지정한 설정입니다. 시작하기 (p. 5) 자습서의 간단한 지침과 달리 이 장에서는 모든 옵션에 대해 설명하고 관련 참조 정보를 제공 합니다. Amazon ES 콘솔, AWS Command Line Interface(AWS CLI) 또는 AWS SDK에 대한 지침에 따라 각 절차를 완료할 수 있습니다. 주제 Amazon ES 도메인 생성 (p. 10) Amazon ES 도메인 구성 (p. 14) EBS 기반 스토리지 구성 (p. 16) VPC 액세스 구성 수정 (p. 18) Kibana에 대한 Amazon Cognito 인증 구성 (p. 18) 액세스 정책 구성 (p. 18) 고급 옵션 구성 (p. 20) 로그 구성 (p. 21) Amazon ES 도메인 생성 이 단원에서는 Amazon ES 콘솔을 사용하거나 AWS CLI에서 create-elasticsearch-domain 명령을 사용하여 Amazon ES 도메인을 만드는 방법에 대해 설명합니다. AWS CLI에서 수행할 절차에는 구문 및 예 가 포함됩니다. Amazon ES 도메인 생성(콘솔) 콘솔에서 다음 절차에 따라 Amazon ES 도메인을 만듭니다. Amazon ES 도메인을 만들려면(콘솔) 1. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. 2. Analytics에서 Elasticsearch 서비스를 선택합니다. 3. Create a new domain(새 도메인 생성)을 선택합니다. 또는 이것이 AWS 리전에서 첫 번째 Amazon ES 도메인인 경우 시작하기를 선택합니다. 4. 배포 유형 선택에서 도메인 목적에 가장 적합한 옵션을 선택합니다. 프로덕션 도메인은 높은 가용성을 위해 다중 AZ와 전용 마스터 노드를 사용합니다. 개발 및 테스트 도메인은 단일 가용 영역을 사용합니다. 10
Amazon ES 도메인 생성(콘솔) 사용자 지정 도메인을 사용하면 모든 구성 옵션에서 선택할 수 있습니다. Important 배포 유형이 다르면 다음 화면에 표시되는 옵션도 다릅니다. 포괄적으로 설명하기 위해 이 단계 에서는 모든 옵션(사용자 지정 배포 옵션)을 설명합니다. 5. Elasticsearch 버전에서 최신 버전을 선택하는 것이 좋습니다. 자세한 내용은 the section called 지원되 는 Elasticsearch 버전 (p. 2) 단원을 참조하십시오. 6. [Next]를 선택합니다. 7. Elasticsearch 도메인 이름에 도메인 이름을 입력합니다. 이름은 다음 조건을 충족해야 합니다. 해당 계정 및 리전에서 고유할 것 소문자로 시작할 것 3~28자 사이일 것 소문자 a~z, 숫자 0~9 및 하이픈(-)만 포함할 것 8. 가용 영역에서 1-AZ, 2-AZ 또는 3-AZ를 선택합니다. 자세한 내용은 the section called 다중 AZ 도메인 구성 (p. 29) 단원을 참조하십시오. 9. 인스턴스 유형에서 데이터 노드의 인스턴스 유형을 선택합니다. 자세한 내용은 지원되는 인스턴스 유 형 (p. 158)을 참조하십시오. Note 모든 가용 영역에서 모든 인스턴스 유형이 지원되는 것은 아닙니다. 3-AZ를 선택할 경우 R4 또 는 I3 등과 같은 최신 세대 인스턴스 유형을 선택할 것을 권장합니다. 10. 인스턴스 수에서 데이터 노드 수를 선택합니다. 최대값은the section called 클러스터 및 인스턴스 제한 (p. 241) 단원을 참조하십시오. 단일 노드 클 러스터는 개발 및 테스트 용도로 적합할 뿐 프로덕션 워크로드에 사용해서는 안 됩니다. 자세한 지침은 the section called Amazon ES 도메인 크기 조정 (p. 134) 및 the section called 다중 AZ 도메인 구 성 (p. 29) 단원을 참조하십시오. 11. (선택 사항) 전용 마스터 노드 (p. 137) 활성화하거나 비활성화합니다. 전용 마스터 노드는 클러스터 안 정성을 높이고 인스턴스 개수가 10개보다 많은 도메인에 필요합니다. 프로덕션 도메인의 경우 3개의 전 용 마스터 노드를 권장합니다. Note 전용 마스터 노드와 데이터 노드에 대해 다른 인스턴스 유형을 선택할 수 있습니다. 예를 들면 데이터 노드의 일반 목적 또는 스토리지 최적화 인스턴스를 선택할 수 있지만 전용 마스터 노드 의 컴퓨팅에 최적화된 인스턴스는 선택할 수 없습니다. 12. 스토리지 유형에서 인스턴스(기본값) 또는 EBS를 선택합니다. 인덱스가 크거나 인덱스 수가 매우 많은 도메인은 스토리지 용량이 큰 EBS 볼륨을 사용하는 것이 유리 할 때가 많습니다. 매우 큰 도메인을 생성하기 위한 지침은 페타바이트 규모 (p. 142) 단원을 참조하십 시오. EBS를 선택하면 다음 옵션이 나타납니다. a. EBS volume type(ebs 볼륨 유형)에서 EBS 볼륨 유형을 선택합니다. EBS 볼륨 유형으로 프로비저닝된 IOPS(SSD)를 선택하는 경우, 프로비저닝된 IOPS에 대해 원하는 기준 IOPS 성능을 입력합니다. 자세한 내용은 Amazon EC2 설명서의 Amazon EBS 볼륨을 참조하 십시오. b. EBS volume size(ebs 볼륨 크기)에 각 데이터 노드에 연결할 EBS 볼륨 스토리지의 크기를 입력합 니다. EBS volume size(ebs 볼륨 크기)는 노드당 크기입니다. 데이터 노드 수에 EBS 볼륨 크기를 곱하여 Amazon ES 도메인의 총 클러스터 크기를 계산할 수 있습니다. EBS 볼륨의 최소 크기 및 최대 크기 11
Amazon ES 도메인 생성(콘솔) 는 지정된 EBS 볼륨 유형과 볼륨이 연결된 인스턴스 유형에 따라 달라집니다. 자세한 내용은 EBS 볼륨 크기 제한 (p. 241)을 참조하십시오. 13. (선택 사항) 노드 간 암호화를 사용하려면 노드 간 암호화 확인란을 선택합니다. 자세한 내용은 the section called 노드 간 암호화 (p. 48) 단원을 참조하십시오. 14. (선택 사항) 저장 시 데이터 암호화를 활성화하려면 유휴 시 데이터 암호화 활성화 확인란을 선택합니다. Amazon ES에서 사용자를 대신하여 KMS 암호화 키를 생성하도록 하려면(또는 이미 생성된 것을 사용 함) (기본값) aws/es를 선택하십시오. 그렇지 않으면 KMS 마스터 키 메뉴에서 KMS 마스터 키를 선택하 십시오. 자세한 내용은 the section called 저장 데이터 암호화 (p. 46) 단원을 참조하십시오. 15. (선택 사항) Elasticsearch 5.3 이상을 실행하는 도메인의 경우 자동 스냅샷 시작 시간은 아무 효과도 없 습니다. 자동 스냅샷에 대한 자세한 내용은 인덱스 스냅샷 작업 (p. 94) 단원을 참조하십시오. 16. (선택 사항) 고급 옵션을 선택합니다. 옵션 요약은 the section called 고급 옵션 구성 (p. 20) 단원을 참조하십시오. 17. [Next]를 선택합니다. 18. 액세스 설정 페이지의 네트워크 구성 섹션에서 퍼블릭 액세스 또는 VPC 액세스를 선택합니다. 퍼블릭 액세스를 선택한 경우, 다음 단계로 건너뜁니다. VPC access(vpc 액세스)를 선택한 경우, 사전 요구 사 항 (p. 130)이 충족되었는지 확인한 후 다음 작업을 수행합니다. a. VPC에서 사용하려는 VPC의 ID를 선택합니다. Note VPC 및 도메인은 동일한 AWS 리전에 있어야 하며 기본값으로 설정된 테넌시를 사용하여 VPC를 선택해야 합니다. Amazon ES는 아직 전용 테넌시를 사용하는 VPC를 지원하지 않 습니다. b. 서브넷에서 서브넷을 선택합니다. 다중 영역을 활성화한 경우, 서브넷을 2개 또는 3개 선택해야 합 니다. Amazon ES는 서브넷에 VPC 엔드포인트와 탄력적 네트워크 인터페이스(ENI)를 배치합니다. Note 서브넷(들)에서 네트워크 인터페이스용 IP 주소를 충분히 예약해야 합니다. 자세한 내용은 VPC 서브넷에서 IP 주소 예약 (p. 131) 단원을 참조하십시오. c. 보안 그룹에서 Amazon ES 도메인에 대한 액세스 권한이 필요한 VPC 보안 그룹을 선택합니다. 자 세한 내용은 VPC 지원 (p. 126) 단원을 참조하십시오. d. IAM 역할에서는 기본 역할을 유지합니다. Amazon ES가 이 사전 정의된 역할(서비스 연결 역할이 라고도 함)을 사용하여 VPC에 액세스하고 VPC의 서브넷에 IAM 엔드포인트와 네트워크 인터페이 스를 배치합니다. 자세한 내용은 VPC 액세스를 위한 서비스 연결 역할 (p. 132) 단원을 참조하십 시오. 19. (선택 사항) 로그인 페이지로 Kibana를 보호하려면 Enable Amazon Cognito for authentication를 선택하 십시오. Kibana 인증을 사용하려는 Amazon Cognito 사용자 풀과 자격 증명 풀을 선택하십시오. 이러한 리 소스를 만드는 방법은 Kibana에 대한 인증 (p. 111) 단원을 참조하십시오. 20. Set the domain access policy to(도메인 액세스 정책을 다음과 같이 설정합니다.)에서 Select a template(템플릿 선택) 드롭다운 목록의 사전 구성된 정책을 선택하고 해당 도메인의 필요에 맞게 편집 합니다. 아니면 [Add or edit the access policy] 상자에 자격 증명 및 액세스 관리(IAM) 정책 문을 하나 이 상 추가해도 됩니다. 자세한 내용은 the section called 자격 증명 및 액세스 관리 (p. 48), the section called 액세스 정책 구성 (p. 18), the section called VPC 도메인 액세스 정책에 대하여 (p. 128) 단원을 참조하십시오. Note 16단계에서 [VPC access]를 선택한 경우에는 IP 기반 정책 템플릿이 드롭다운 목록에 나타나 지 않기 때문에 IP 기반 정책을 수동으로 구성할 수 없습니다. 대신에 보안 그룹을 사용하여 어느 IP 주소가 도메인에 액세스할 수 있는지 제어할 수 있습니다. 자세한 내용은 the section called VPC 도메인 액세스 정책에 대하여 (p. 128) 단원을 참조하십시오. 12
Amazon ES 도메인 생성(AWS CLI) 21. [Next]를 선택합니다. 22. 복습 페이지에서 도메인 구성을 검토한 다음 확인을 선택합니다. Amazon ES 도메인 생성(AWS CLI) 콘솔을 사용하여 Amazon ES 도메인을 만드는 대신 AWS CLI를 사용할 수 있습니다. 다음 구문을 사용하여 Amazon ES 도메인을 만듭니다. 구문은 AWS CLI 명령 참조에서 Amazon Elasticsearch Service를 참조하십 시오. 예시 명령 이 첫 번째 예에서는 다음 Amazon ES 도메인 구성을 보여줍니다. Elasticsearch 버전 5.5에서 mylogs라는 Amazon ES 도메인을 만듭니다. 인스턴스 유형이 m4.large.elasticsearch인 인스턴스 2개를 사용하여 도메인을 채웁니다. 각 데이터 노드의 저장에 100GiB 자기 디스크 EBS 볼륨을 사용합니다. 단일 IP 주소(192.0.2.0/32)의 익명 액세스만 허용합니다. aws es create-elasticsearch-domain --domain-name mylogs --elasticsearch-version 5.5 -melasticsearch-cluster-config InstanceType=m4.large.elasticsearch,InstanceCount=2 --ebsoptions EBSEnabled=true,VolumeType=standard,VolumeSize=100 --access-policies '"Version": "2012-10-17", "Statement": ["Action": "es:*", "Principal":"*","Effect": "Allow", "Condition": "IpAddress":"aws:SourceIp":["192.0.2.0/32"]]' 다음 예에서는 아래 Amazon ES 도메인 구성을 보여줍니다. Elasticsearch 버전 5.5에서 mylogs라는 Amazon ES 도메인을 만듭니다. 인스턴스 유형이 m4.large.elasticsearch인 인스턴스 6개를 사용하여 도메인을 채웁니다. 각 데이터 노드의 저장에 100GiB 범용(SSD) EBS 볼륨을 사용합니다. 사용자 AWS 계정 ID가 555555555555인 단일 사용자로 서비스에 대한 액세스를 제한합니다. 가용 영역 세 개에 인스턴스 분산 aws es create-elasticsearch-domain --domain-name mylogs -elasticsearch-version 5.5 --elasticsearch-cluster-config InstanceType=m4.large.elasticsearch,InstanceCount=6,ZoneAwarenessEnabled=true,ZoneAwarenessConfig=Ava --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=100 --access-policies '"Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "AWS": "arn:aws:iam::555555555555:root" "Action":"es:*", "Resource": "arn:aws:es:useast-1:555555555555:domain/mylogs/*" ] ' 다음 예에서는 아래 Amazon ES 도메인 구성을 보여줍니다. Elasticsearch 버전 5.5에서 mylogs라는 Amazon ES 도메인을 만듭니다. 인스턴스 유형이 m4.xlarge.elasticsearch인 인스턴스 10개를 사용하여 도메인을 채웁니다. 전용 마스터 노드의 역할을 위해 인스턴스 유형이 m4.large.elasticsearch인 인스턴스 세 개를 사용 하여 도메인을 채웁니다. 각 데이터 노드에 대해 1000 IOPS의 기본 성능으로 구성된 100GiB 프로비저닝된 IOPS EBS 볼륨을 저장 에 사용합니다. 사용자 한 명과 하위 리소스 하나(_search API)만 액세스할 수 있도록 제한합니다. 13
Amazon ES 도메인 생성(AWS SDK) aws es create-elasticsearch-domain --domain-name mylogs -elasticsearch-version 5.5 --elasticsearch-cluster-config InstanceType=m4.xlarge.elasticsearch,InstanceCount=10,DedicatedMasterEnabled=true,DedicatedMasterType= --ebs-options EBSEnabled=true,VolumeType=io1,VolumeSize=100,Iops=1000 --access-policies '"Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "AWS": "arn:aws:iam::555555555555:root" "Action": "es:*", "Resource": "arn:aws:es:useast-1:555555555555:domain/mylogs/_search" ] ' Note Amazon ES 도메인을 만들려고 하는데 같은 이름의 도메인이 이미 존재하는 경우, CLI에 오류가 표 시되지 않습니다. 그 대신 기존 도메인에 대한 세부 정보가 표시됩니다. Amazon ES 도메인 생성(AWS SDK) AWS SDK(Android 및 ios SDK 제외)에서는 CreateElasticsearchDomain을 비롯하여 Amazon ES 구성 API 참조 (p. 181)에 정의된 모든 작업을 지원합니다. 샘플 코드에 대한 내용은 AWS SDK 사 용 (p. 177) 단원을 참조하십시오. AWS SDK 설치 및 사용에 대한 자세한 내용은 AWS 소프트웨어 개발 키 트를 참조하십시오. Amazon ES 도메인 구성 증가한 트래픽 및 데이터 수요를 충족하기 위해 다음 변경 사항으로 Amazon ES 도메인 구성을 업데이트할 수 있습니다. 인스턴스 수 변경 인스턴스 유형 변경 전용 마스터 노드 활성화 또는 비활성화 다중 AZ 활성화 또는 비활성화 스토리지 구성을 구성 VPC 서브넷 및 보안 그룹 변경 고급 옵션 구성 Note 저장에 EBS 볼륨을 사용하도록 도메인 구성에 대한 자세한 내용은 EBS 기반 스토리지 구 성 (p. 16)을 참조하십시오. Amazon ES 도메인 구성(콘솔) 다음 절차에 따라 콘솔을 사용하여 Amazon ES 구성을 업데이트합니다. Amazon ES 도메인을 구성하려면(콘솔) 1. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. 2. Analytics에서 Elasticsearch 서비스를 선택합니다. 3. 탐색 창의 My domains(내 도메인)에서 업데이트할 도메인을 선택합니다. 4. Configure cluster(클러스터 구성)를 선택합니다. 5. Configure cluster(클러스터 구성) 페이지에서 도메인 구성을 업데이트합니다. a. 데이터 노드의 인스턴스 유형을 변경하려면 [Instance type]에서 새 인스턴스 유형을 선택합니다. 14
Amazon ES 도메인 구성(AWS CLI) Amazon ES에서 지원하는 인스턴스 유형 목록은 지원되는 인스턴스 유형 (p. 158)을 참조하십시 오. b. 인스턴스 수를 변경하려면 인스턴스 수에서 1 40 사이의 정수를 선택합니다. 도메인당 최대 200개 의 인스턴스까지 한도 증가를 요청하려면 AWS Support Center에서 요청을 생성합니다. c. 클러스터의 안정성을 높이고 싶거나 도메인의 인스턴스 수가 10개를 넘는다면 클러스터에 전용 마 스터 노드를 사용하십시오. 자세한 내용은 the section called 전용 마스터 노드 (p. 137) 단원을 참조하십시오. i. 전용 마스터 인스턴스 확인란을 선택합니다. ii. 전용 마스터 인스턴스 유형에서 전용 마스터 노드의 인스턴스 유형을 선택합니다. iii. 전용 마스터 인스턴스 수에서 인스턴스 수를 선택합니다. d. 다중 AZ를 활성화하거나 비활성화하려면 1-AZ, 2-AZ 또는 3-AZ를 선택합니다. 자세한 내용은 the section called 다중 AZ 도메인 구성 (p. 29) 단원을 참조하십시오. e. 도메인을 만들 때 VPC 액세스를 활성화하지 않은 경우 7단계로 건너뜁니다. VPC 액세스를 활성화 한 경우, VPC 엔드포인트가 배치된 서브넷을 변경하고 보안 그룹을 변경할 수 있습니다. f. g. i. 서브넷에서 서브넷을 선택합니다. 서브넷에 네트워크 인터페이스용으로 예약된 IP 주소가 충 분해야 합니다. 다중 AZ를 활성화한 경우, 서브넷을 두 개 또는 세 개 선택해야 합니다. 서브넷 은 동일한 리전의 서로 다른 가용 영역에 있어야 합니다. 자세한 내용은 VPC 지원 (p. 126) 단 원을 참조하십시오. ii. 보안 그룹에서 도메인에 대한 액세스 권한이 필요한 보안 그룹을 추가합니다. (선택 사항) 고급 옵션을 선택합니다. 옵션 요약은 the section called 고급 옵션 구성 (p. 20) 단 원을 참조하십시오. 제출을 선택합니다. Amazon ES 도메인 구성(AWS CLI) elasticsearch-cluster-config 옵션을 사용하여 AWS CLI에서 Amazon ES 클러스터를 구성합니다. 구문은 AWS CLI 명령 참조에서 Amazon Elasticsearch Service를 참조하십시오. 예시 명령 다음 예제에서는 Elasticsearch 버전 5.5를 사용하여 세 개의 가용 영역에 분산된 m4.large.elasticsearch 인스턴스 유형의 인스턴스 두 개를 포함하는 mylogs라는 Amazon ES 도메인 을 만듭니다. aws es create-elasticsearch-domain --domain-name mylogs -elasticsearch-version 5.5 --elasticsearch-cluster-config InstanceType=m4.large.elasticsearch,InstanceCount=2,DedicatedMasterEnabled=false,ZoneAwarenessEnabled= 그러나 네트워크 트래픽이 증가하고, 문서의 개수 및 크기가 늘어남에 따라 새 Amazon ES 도메인을 재구성 하려고 할 수 있습니다. 예를 들어, 더 큰 인스턴스 유형과 더 많은 인스턴스를 사용하고, 전용 마스터 노드를 활성화하도록 결정할 수 있습니다. 다음 예에서는 이러한 변경 사항으로 도메인 구성을 업데이트합니다. aws es update-elasticsearch-domain-config --domain-name mylogs --elasticsearch-clusterconfig InstanceType=m4.xlarge.elasticsearch,InstanceCount=3,DedicatedMasterEnabled=true,DedicatedMasterType=m Amazon ES 도메인 구성(AWS SDK) AWS SDK(Android 및 ios SDK 제외)에서는 UpdateElasticsearchDomainConfig을 비롯하여 Amazon ES 구성 API 참조 (p. 181)에 정의된 모든 작업을 지원합니다. 샘플 코드에 대한 내용은 AWS SDK 사 15
EBS 기반 스토리지 구성 용 (p. 177) 단원을 참조하십시오. AWS SDK 설치 및 사용에 대한 자세한 내용은 AWS 소프트웨어 개발 키 트를 참조하십시오. EBS 기반 스토리지 구성 Amazon EBS 볼륨은 블록 수준 스토리지 디바이스를 제공하여 단일 인스턴스를 연결하는 것이 가능합니 다. EBS 볼륨은 Amazon ES 도메인의 스토리지 리소스를 컴퓨팅 리소스와 독립적으로 확장할 수 있게 해 줍니다. EBS 볼륨은 데이터 세트는 대규모이지만 대용량 컴퓨팅 리소스는 필요하지 않은 도메인에 매우 유 용합니다. EBS 볼륨은 인스턴스에서 제공하는 기본 스토리지보다 훨씬 더 큽니다. Amazon Elasticsearch Service는 다음 EBS 볼륨 유형을 지원합니다. 범용(SSD) 프로비저닝된 IOPS(SSD) Magnetic Note EBS 볼륨 유형을 프로비저닝된 IOPS에서 프로비저닝되지 않은 EBS 볼륨 유형으로 변경하는 경우 IOPS 값을 0으로 설정합니다. Warning 현재, EBS 볼륨에 연결된 데이터 노드에서 실패하면 EBS 볼륨에서도 실패합니다. EBS 기반 스토리지 구성(콘솔) 다음 절차에 따라 콘솔을 사용하여 EBS 기반 스토리지를 활성화합니다. EBS 기반 스토리지를 활성화하려면(콘솔) 1. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. 2. Analytics에서 Elasticsearch 서비스를 선택합니다. 3. 탐색 창의 My domains(내 도메인)에서 구성할 도메인을 선택합니다. 4. Configure cluster(클러스터 구성)를 선택합니다. 5. 스토리지 유형에서 EBS를 선택합니다. 6. EBS volume type(ebs 볼륨 유형)에서 EBS 볼륨 유형을 선택합니다. EBS 볼륨 유형으로 프로비저닝된 IOPS(SSD)를 선택하는 경우, 프로비저닝된 IOPS에 대해 원하는 기 준 IOPS 성능을 입력합니다. 7. EBS volume size(ebs 볼륨 크기)에 원하는 EBS 볼륨 크기를 입력합니다. EBS volume size(ebs 볼륨 크기)는 노드당 크기입니다. (데이터 노드 수) * (EBS 볼륨 크기) 공식을 사 용하여 Amazon ES 도메인의 총 스토리지 크기를 계산할 수 있습니다. EBS 볼륨의 최소 크기 및 최대 크기는 지정된 EBS 볼륨 유형과 볼륨이 연결된 인스턴스 유형에 따라 달라집니다. 자세한 내용은 EBS 볼륨 크기 제한 (p. 241)을 참조하십시오. 8. 제출을 선택합니다. Note 프로비저닝된 IOPS EBS 볼륨의 IOPS 값을 볼륨의 최대 스토리지의 30배 미만으로 설정합니다. 예 를 들어 볼륨의 최대 크기가 100GiB이면 이 볼륨의 IOPS 값에 3000보다 큰 값은 할당할 수 없습니 다. 16
EBS 기반 스토리지 구성(AWS CLI) 자세한 내용은 Amazon EC2 설명서의 Amazon EBS 볼륨을 참조하십시오. EBS 기반 스토리지 구성(AWS CLI) --ebs-options 옵션을 사용하여 AWS CLI에서 EBS 기반 스토리지를 구성합니다. 다음 구문은 createelasticsearch-domain 및 update-elasticsearch-domain-config 명령 둘 다에서 사용됩니다. 구문 --ebs-options EBSEnabled=<value>,VolumeType=<value>,VolumeSize=<value>,IOPS=<value> 파라미터 유효한 값 설명 EBSEnabled true 또는 false 인스턴스에서 제공하는 스토리지가 아니라 스토리지 에 EBS 볼륨을 사용할지 여부를 지정합니다. 기본 값은 false입니다. VolumeType 다음을 수행하십시오. Amazon ES 도메인에서 사용할 EBS 볼륨 유형입니다. gp2 (범용 SSD) io1 (프로비저닝된 IOPS SSD) standard(마그네틱) VolumeSize 정수 GiB의 각 데이터 노드마다 EBS 볼륨 크기를 지정합니다. EBS 볼륨의 최소 크기 및 최대 크기는 지정된 EBS 볼륨 유 형과 볼륨이 연결된 인스턴스 유형에 따라 달라집니다. 각 인스턴스 유형에 대한 최소 및 최대 EBS 유형을 보여주는 표를 보려면 서비스 제한을 참조하십시오. IOPS 정수 EBS 볼륨에 대한 기본 I/O 성능을 지정합니다. 이 파라미터 는 프로비저닝된 IOPS(SSD) 볼륨에서만 사용됩니다. 최소 값은 1000입니다. 최대값은 16000입니다. Note 프로비저닝된 IOPS EBS 볼륨의 IOPS 값은 볼륨의 최대 스토리지의 30배 미만으로 설정하는 것 이 좋습니다. 예를 들어 볼륨의 최대 크기가 100GiB이면 이 볼륨의 IOPS 값에 3000보다 큰 값을 할 당하면 안 됩니다. 각 볼륨 유형에 대한 사용 사례를 비롯한 자세한 정보는 Amazon EC2 설명서의 Amazon EBS 볼륨 유형을 참조하십시오. 예시 다음 예제에서는 Elasticsearch 버전 5.5를 사용하여 10GiB 범용 EBS 볼륨 1개를 포함하는 도메인 mylogs를 생성합니다. aws es create-elasticsearch-domain --domain-name=mylogs --elasticsearch-version 5.5 --ebsoptions EBSEnabled=true,VolumeType=gp2,VolumeSize=10 그러나 검색 인덱스의 크기가 증가함에 따라 더 큰 EBS 볼륨이 필요할 수 있습니다. 예를 들어, 기본 I/O 성능 이 3000 IOPS인 100GiB의 프로비저닝된 IOPS 볼륨을 사용할 수 있습니다. 다음 예에서는 이러한 변경 사항 으로 도메인 구성을 업데이트합니다. aws es update-elasticsearch-domain-config --domain-name=mylogs --ebs-options EBSEnabled=true,VolumeType=io1,VolumeSize=100,IOPS=3000 17
EBS 기반 스토리지 구성(AWS SDK) EBS 기반 스토리지 구성(AWS SDK) AWS SDK(Android 및 ios SDK 제외)는 UpdateElasticsearchDomainConfig에 대한 --ebsoptions 파라미터를 비롯하여 Amazon ES 구성 API 참조 (p. 181)에 정의된 모든 작업을 지원합니다. AWS SDK 설치 및 사용에 대한 자세한 내용은 AWS 소프트웨어 개발 키트를 참조하십시오. VPC 액세스 구성 수정 도메인을 VPC에 상주하도록 구성한 경우, Amazon ES 콘솔을 사용하여 구성을 수정할 수 있습니다. 퍼블릭 도메인을 VPC 도메인으로 마이그레이션하려면 the section called 퍼블릭 액세스에서 VPC 액세스로 마이 그레이션 (p. 132) 단원을 참조하십시오. VPC 액세스 구성(콘솔) 콘솔에서 다음 절차를 사용하여 VPC 액세스를 구성합니다. VPC 액세스(콘솔)을 구성하려면 1. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. 2. Analytics에서 Elasticsearch 서비스를 선택합니다. 3. 탐색 창의 My domains(내 도메인)에서 구성할 도메인을 선택합니다. 4. Configure cluster(클러스터 구성)를 선택합니다. 5. Network configuration(네트워크 구성) 섹션의 서브넷에서 서브넷을 선택합니다. 다중 AZ를 활성화한 경 우, 서브넷을 두 개 또는 세 개 선택해야 합니다. 서브넷은 동일한 리전의 서로 다른 가용 영역에 있어야 합니다. 자세한 내용은 VPC 지원 (p. 126) 단원을 참조하십시오. Note 서브넷(들)에서 네트워크 인터페이스용 IP 주소를 충분히 예약해야 합니다. 자세한 내용은 the section called VPC 서브넷에서 IP 주소 예약 (p. 131) 단원을 참조하십시오. 6. 보안 그룹에서 도메인에 대한 액세스 권한이 필요한 보안 그룹을 추가합니다. 7. 제출을 선택합니다. Kibana에 대한 Amazon Cognito 인증 구성 Kibana에 대한 인증 (p. 111) 단원을 참조하십시오. 액세스 정책 구성 Amazon Elasticsearch Service는 Amazon ES 도메인에 대한 액세스를 구성하는 여러 가지 방법을 제공합니 다. 자세한 내용은 the section called 자격 증명 및 액세스 관리 (p. 48) 단원을 참조하십시오. 콘솔이 사용자가 도메인의 필요에 따라 사용자 지정할 수 있는 사전 구성된 액세스 정책을 제공합니다. 사용 자가 다른 Amazon ES 도메인의 액세스 정책을 가져올 수도 있습니다. 이러한 액세스 정책이 VPC 액세스와 상호 작용하는 방식의 자세한 내용은 the section called VPC 도메인 액세스 정책에 대하여 (p. 128) 단원 을 참조하십시오. 18
액세스 정책 구성(콘솔) 액세스 정책 구성(콘솔) 콘솔에서 다음 절차에 따라 액세스 정책을 구성합니다. 액세스 정책을 구성하려면(콘솔) 1. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. 2. Analytics에서 Elasticsearch 서비스를 선택합니다. 3. 탐색 창의 My domains(내 도메인)에서 업데이트할 도메인을 선택합니다. 4. Modify access policy(액세스 정책 수정)를 선택합니다. 5. 액세스 정책을 편집합니다. 아니면 템플릿 선택 드롭다운 목록에서 정책 템플릿을 하나 선택한 다음, 해당 도메인의 필요에 맞게 편 집합니다. 사전 구성된 액세스 정책 설명 하나 이상의 AWS 계정 또는 IAM 사용 자에 대한 액세스를 허용 또는 거부 하나 이상의 AWS 계정, IAM 사용자 또는 역할에 대한 액세 스를 허용 또는 거부합니다. Allow access to the domain from specific IP(s)(특정 IP로부터 도메인에 대한 액세스를 허용) 이 정책을 사용하여 특정 IP 주소 또는 IP 주소 범위에 대한 익명 액세스를 제한할 수 있습니다. Note 도메인에서 VPC 액세스를 활성화한 경우, 이 사 전 구성된 정책은 사용할 수 없습니다. 대신에 보 안 그룹을 사용하여 어느 IP 주소가 도메인에 액세 스할 수 있는지 제어할 수 있습니다. 자세한 내용은 the section called VPC 도메인 액세스 정책에 대 하여 (p. 128) 단원을 참조하십시오. 6. Deny access to the domain(도메인에 대한 액세스를 거부) 이 정책은 Amazon ES 콘솔을 통한 액세스 또는 도메인을 생성한 AWS 계정 소유자의 액세스만 허용합니다. 다른 도메인에서 액세스 정책을 복사 이 템플릿은 다른 도메인에서 기존 액세스 정책을 가져오는 편리한 방법입니다. 도메인에 대한 개방 액세스를 허용 도메인에 퍼블릭 엔드포인트가 포함되어 있을 경우 이 정책 은 권장하지 않습니다. 누구나 도메인의 인덱스를 삭제하거 나, 수정하거나, 액세스할 수 있기 때문입니다. 이 정책은 단 지 테스트 시 편의를 위한 것입니다. 따라서 이 설정을 사용 하는 도메인에는 민감한 데이터를 로드하지 마십시오. 제출을 선택합니다. 액세스 정책 구성(AWS CLI) --access-policies 옵션을 사용하여 AWS CLI에서 액세스 정책을 구성합니다. 다음 구문은 createelasticsearch-domain 및 update-elasticsearch-domain-config 명령 둘 다에서 사용됩니다. 구문 --access-policies=<value> 19
액세스 정책 구성(AWS SDK) 파라미터 유효한 값 설명 --accesspolicies JSON Amazon ES 도메인에 대한 액세스 정책을 지정합니다. 예 리소스 기반 액세스 정책의 다음 예제에서는 Principal 정책 요소에서 서비스에 대한 액세스를 사용자 AWS 계정 ID가 555555555555인 단일 사용자에게로 제한합니다. 이 사용자는 index1에 대한 액세스는 가 능하지만 이 도메인의 다른 인덱스에는 액세스할 수 없습니다. aws es update-elasticsearch-domain-config --domain-name mylogs --access-policies '"Version": "2012-10-17", "Statement": [ "Effect": "Allow","Principal": "AWS": "arn:aws:iam::123456789012:root" "Action":"es:*","Resource":"arn:aws:es:useast-1:555555555555:domain/index1/*" ] ' Tip AWS CLI를 사용하여 액세스 정책을 구성하는 경우에는 여러 온라인 도구 중 하나를 사용하여 JSON 정책 문을 줄일 수 있습니다. 액세스 정책 구성(AWS SDK) AWS SDK(Android 및 ios SDK 제외)는 UpdateElasticsearchDomainConfig에 대한 --accesspolicies 파라미터를 비롯하여 Amazon ES 구성 API 참조 (p. 181)에 정의된 모든 작업을 지원합니다. AWS SDK 설치 및 사용에 대한 자세한 내용은 AWS 소프트웨어 개발 키트를 참조하십시오. 고급 옵션 구성 고급 옵션을 사용하여 다음을 구성합니다. rest.action.multi.allow_explicit_index HTTP 요청의 본문에서 인덱스에 대한 명시적 참조를 허용할지 여부를 지정합니다. 이 속성을 false로 설 정하면 사용자가 하위 리소스에 대한 액세스 제어를 우회하는 것을 방지할 수 있습니다. 기본값은 true입 니다. 자세한 내용은 the section called 고급 옵션 및 API 고려 사항 (p. 58) 단원을 참조하십시오. indices.fielddata.cache.size 필드 데이터에 할당되는 Java 힙 공간의 백분율을 지정합니다. 기본적으로 이 설정은 무한입니다. Note 많은 고객이 일일 인덱스 교체를 문의합니다. 이와 같은 대부분의 경우 JVM 힙의 40%로 구성 된 indices.fielddata.cache.size를 사용하여 벤치마크 테스트를 시작하는 것이 좋습니 다. 그러나 인덱스가 매우 큰 경우 큰 필드 데이터 캐시가 필요할 수 있습니다. indices.query.bool.max_clause_count Lucene 부울 쿼리 하나에 허용되는 최대 절 수를 지정합니다. 기본값은 1024입니다. 절 수가 허용되는 개수 이상인 쿼리는 TooManyClauses 오류를 일으킵니다. 자세한 내용은 Lucene documentation을 참 조하십시오. 20
고급 옵션 구성(콘솔) 고급 옵션 구성(콘솔) 고급 옵션을 구성하려면(콘솔) 1. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. 2. Analytics에서 Elasticsearch 서비스를 선택합니다. 3. 탐색 창의 My domains(내 도메인)에서 업데이트할 도메인을 선택합니다. 4. Configure cluster(클러스터 구성)를 선택합니다. 5. 고급 옵션을 선택합니다. 6. 원하는 옵션을 지정한 후 제출을 선택합니다. 고급 옵션 구성(AWS CLI) --advanced-options 옵션에 다음 구문을 사용합니다. 옵션에 대한 구문은 create-elasticsearchdomain 및 update-elasticsearch-domain-config 명령 둘 다에서 동일합니다. 구문 --advanced-options rest.action.multi.allow_explicit_index=<true false>, indices.fielddata.cache.size=<percentage_heap>, indices.query.bool.max_clause_count=<int> 파라미터 유효한 값 --advanced-options rest.action.multi.allow_explicit_index=<true false> indices.fielddata.cache.size=<percentage_heap> indices.query.bool.max_clause_count=<int> 예 다음은 HTTP 요청 본문에서 인덱스에 대한 명시적 참조를 비활성화하는 예제입니다. 또한 필드 데이터 캐시 를 총 Java 힙 공간의 40%로 제한합니다. aws es update-elasticsearch-domain-config --domain-name mylogs --region us-east-1 --advanced-options rest.action.multi.allow_explicit_index=false, indices.fielddata.cache.size=40 고급 옵션 구성(AWS SDK) AWS SDK(Android 및 ios SDK 제외)는 UpdateElasticsearchDomainConfig에 대한 --advancedoptions 파라미터를 비롯하여 Amazon ES 구성 API 참조 (p. 181)에 정의된 모든 작업을 지원합니다. AWS SDK 설치 및 사용에 대한 자세한 내용은 AWS 소프트웨어 개발 키트를 참조하십시오. 로그 구성 Amazon ES는 Amazon CloudWatch Logs를 통해 오류 로그, 검색 느린 로그, 인덱스 느린 로그와 같은 세 가 지 Elasticsearch 로그를 공개합니다. 이러한 로그는 성능 및 안정성 문제 해결에 유용하지만 기본적으로 비 활성화되어 있습니다. 활성화되면, 표준 CloudWatch 요금이 적용됩니다. 21
로그 게시 활성화(콘솔) Note 오류 로그는 Elasticsearch 버전 5.1 이상에서만 사용 가능합니다. 느린 로그는 모든 Elasticsearch 버전에서 사용 가능합니다. Elasticsearch는 로그에 대해 Apache Log4j 2 및 TRACE, DEBUG, INFO, WARN, ERROR, FATAL의 내장형 로그 수준(최저~최고 수준의 심각도)을 사용합니다. 사용자가 오류 로그를 활성화하면 Amazon ES에서는 WARN, ERROR 및 FATAL의 로그 줄을 CloudWatch에 게시합니다. 또한 Amazon ES는 DEBUG 수준에서 여러 제외 항목을 게시합니다. org.elasticsearch.index.mapper.mapperparsingexception org.elasticsearch.index.query.queryshardexception org.elasticsearch.action.search.searchphaseexecutionexception org.elasticsearch.common.util.concurrent.esrejectedexecutionexception java.lang.illegalargumentexception 오류 로그는 다음과 같은 많은 상황에서 문제를 해결하는 데 도움이 될 수 있습니다. Painless 스크립트 컴파일 문제 잘못된 쿼리 인덱싱 문제 스냅샷 실패 로그 게시 활성화(콘솔) Amazon ES 콘솔은 CloudWatch에 대한 로그 게시를 활성화하는 가장 간편한 방법입니다. CloudWatch에 대한 로그 게시를 활성화하려면(콘솔) 1. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. 2. 3. Analytics에서 Elasticsearch Service를 선택합니다. 탐색 창의 My domains(내 도메인)에서 업데이트할 도메인을 선택합니다. 4. 5. 로그 탭에서 원하는 로그에 대해 활성화를 선택합니다. CloudWatch 로그 그룹을 생성하거나 기존 로그 그룹을 선택합니다. Note 여러 로그를 활성화하려는 경우 자체 로그 그룹에 각각 게시하는 것이 좋습니다. 이렇게 분리하 면 로그를 더 쉽게 검사할 수 있습니다. 6. 적절한 사용 권한이 포함된 액세스 정책을 선택하거나 콘솔에서 제공하는 JSON을 사용하여 정책을 만 듭니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "Service": "es.amazonaws.com" "Action": [ "logs:putlogevents", "logs:createlogstream" ], 22
로그 게시 활성화(AWS CLI) ] "Resource": "cw_log_group_arn" Important CloudWatch Logs는 리전당 10개의 리소스 정책을 지원합니다. 여러 Amazon ES 도메인에 대 해 로그를 사용하도록 설정하려는 경우, 이 제한에 도달하지 않도록 하려면 여러 로그 그룹을 포함하는 더 광범위한 정책을 생성하여 재사용해야 합니다. 7. [Enable]을 선택합니다. 도메인 상태가 Active에서 Processing으로 바뀝니다. 상태가 다시 Active로 돌아온 다음에 로그 게시를 활성화해야 합니다. 이 프로세스에는 최대 30분이 걸릴 수 있습니다. 느린 로그 중 하나를 활성화한 경우 the section called 느린 로그에 대한 Elasticsearch 로깅 임계값 설 정 (p. 24) 단원을 참조하십시오. 오류 로그만 활성화한 경우 추가 구성 단계를 수행할 필요가 없습니다. 로그 게시 활성화(AWS CLI) 로그 게시를 활성화하려면 CloudWatch 로그 그룹이 필요합니다. 아직 없는 경우 다음 명령을 사용하여 생성 할 수 있습니다. aws logs create-log-group --log-group-name my-log-group 다음 명령을 입력하여 로그 그룹의 ARN을 찾은 다음 이를 기록해 둡니다. aws logs describe-log-groups --log-group-name my-log-group 이제 Amazon ES에게 로그 그룹에 작성할 수 있는 권한을 부여할 수 있습니다. 명령의 끝 부분에 로그 그룹 의 ARN을 제공해야 합니다. aws logs put-resource-policy --policy-name my-policy --policy-document ' "Version": "2012-10-17", "Statement": [ "Sid": "", "Effect": "Allow", "Principal": "Service": "es.amazonaws.com" "Action":[ "logs:putlogevents"," logs:putlogeventsbatch","logs:createlogstream"],"resource": "cw_log_group_arn"]' Important CloudWatch Logs는 리전당 10개의 리소스 정책을 지원합니다. 여러 Amazon ES 도메인에 대해 느 린 로그를 사용하도록 설정하려는 경우, 이 제한에 도달하지 않도록 하려면 여러 로그 그룹을 포함 하는 더 광범위한 정책을 생성하여 재사용해야 합니다. 마지막으로, --log-publishing-options 옵션을 사용하여 게시를 활성화할 수 있습니다. 옵션에 대한 구문은 create-elasticsearch-domain 및 update-elasticsearch-domain-config 명령 둘 다에 서 동일합니다. 파라미터 유효한 값 --log-publishingoptions SEARCH_SLOW_LOGS=CloudWatchLogsLogGroupArn=cw_log_group_arn,Enab false INDEX_SLOW_LOGS=CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabl false 23
로그 게시 활성화(AWS SDK) 파라미터 유효한 값 ES_APPLICATION_LOGS=CloudWatchLogsLogGroupArn=cw_log_group_arn,E false Note 여러 로그를 활성화하려는 경우 자체 로그 그룹에 각각 게시하는 것이 좋습니다. 이렇게 분리하면 로그를 더 쉽게 검사할 수 있습니다. 예 다음 예제는 지정된 도메인에 대한 검색 및 인덱스 느린 로그의 게시를 활성화합니다. aws es update-elasticsearch-domain-config --domain-name my-domain --log-publishing-options "SEARCH_SLOW_LOGS=CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:loggroup:my-loggroup,Enabled=trueINDEX_SLOW_LOGS=CloudWatchLogsLogGroupArn=arn:aws:logs:useast-1:123456789012:log-group:my-other-log-group,Enabled=true" CloudWatch에 대한 게시를 비활성화하려면 Enabled=false를 통해 동일한 명령을 실행합니다. 느린 로그 중 하나를 활성화한 경우 the section called 느린 로그에 대한 Elasticsearch 로깅 임계값 설 정 (p. 24) 단원을 참조하십시오. 오류 로그만 활성화한 경우 추가 구성 단계를 수행할 필요가 없습니다. 로그 게시 활성화(AWS SDK) 로그 게시를 활성화하려면 먼저 CloudWatch 로그 그룹을 생성하고, ARN을 얻고, Amazon ES에게 작성할 수 있는 권한을 부여해야 합니다. 관련 작업은 Amazon CloudWatch Logs API Reference에 문서화되어 있습 니다. CreateLogGroup DescribeLogGroup PutResourcePolicy AWS SDK를 사용하여 이 작업에 액세스할 수 있습니다. AWS SDK(Android 및 ios SDK 제외)는 CreateElasticsearchDomain 및 UpdateElasticsearchDomainConfig에 대해 --log-publishing-options 옵션을 비롯하여 Amazon ES 구성 API 참조 (p. 181)에 정의된 모든 작업을 지원합니다. 느린 로그 중 하나를 활성화한 경우 the section called 느린 로그에 대한 Elasticsearch 로깅 임계값 설 정 (p. 24) 단원을 참조하십시오. 오류 로그만 활성화한 경우 추가 구성 단계를 수행할 필요가 없습니다. 느린 로그에 대한 Elasticsearch 로깅 임계값 설정 Elasticsearch는 기본적으로 느린 로그를 비활성화합니다. CloudWatch에 대해 느린 로그 게시를 활성화한 후에도 여전히 각 Elasticsearch 인덱스에 대해 로깅 임계값을 지정해야 합니다. 이러한 임계값은 정확하게 기록할 내용과 로그 수준을 정의합니다. Elasticsearch REST API를 통해 이러한 설정을 지정할 수 있습니다. PUT elasticsearch_domain_endpoint/index/_settings "index.search.slowlog.threshold.query.warn": "5s", 24
로그 보기 "index.search.slowlog.threshold.query.info": "2s" 느린 로그가 성공적으로 게시되고 있는지 테스트하려면 아주 낮은 값으로 시작하여 로그가 CloudWatch에 나타나는지 확인한 다음 임계값을 더 유용한 수준으로 늘립니다. 로그가 나타나지 않는 경우 다음 정보를 확인합니다. CloudWatch 로그 그룹이 있습니까? CloudWatch 콘솔을 확인합니다. 이제 Amazon ES에게 로그 그룹에 작성할 수 있는 권한이 있습니까? Amazon ES 콘솔을 확인합니다. Amazon ES 도메인이 로그 그룹에 게시되도록 구성되었습니까? Amazon ES 콘솔을 확인하고, AWS CLI describe-elasticsearch-domain-config 옵션을 사용하거나 SDK 중 하나를 사용하여 DescribeElasticsearchDomainConfig를 호출합니다. 요청이 해당 값을 초과할 만큼 Elasticsearch 로깅 임계값이 낮습니까? 인덱스에 대한 임계값을 검토하려 면 다음 명령을 사용합니다. GET elasticsearch_domain_endpoint/index/_settings?pretty 인덱스에 대해 느린 로그를 사용하지 않으려면 변경한 임계값을 -1의 기본값으로 되돌립니다. Amazon ES 콘솔 또는 AWS CLI를 사용하여 CloudWatch에 대한 게시를 비활성화해도 Elasticsearch의 로그 생성이 중지되지 않으며, 해당 로그에 대한 게시만 중지됩니다. 느린 로그가 더 이상 필요하지 않으면 인덱스 설정을 확인합니다. 로그 보기 CloudWatch에서 애플리케이션 및 느린 로그를 보는 것은 다른 CloudWatch 로그를 보는 것과 같습니다. 자 세한 내용은 Amazon CloudWatch Logs User Guide의 로그 데이터 보기 단원을 참조하십시오. 다음은 로그를 볼 때 고려해야 할 몇 가지 사항입니다. Amazon ES는 각 줄에 있는 처음 255,000개 문자만 CloudWatch에 게시합니다. 남아 있는 모든 콘텐츠는 잘리게 됩니다. CloudWatch에서 로그 스트림 이름에는 콘텐츠를 식별하는 데 도움이 되는 -index-slow-logs, search-slow-logs 및 -es-application-logs 접미사가 있습니다. 25
구성 변경 정보 Amazon Elasticsearch Service 도메인 관리 Amazon Elasticsearch Service(Amazon ES) 도메인의 문서 크기와 수가 늘어나고 네트워크 트래픽이 증가 함에 따라 Elasticsearch 클러스터의 구성을 업데이트해야 할 수 있습니다. 도메인을 재구성할 시점을 파악 하기 위해서는 도메인 지표를 모니터링해야 합니다. 또한 도메인에 대한 데이터 관련 API 호출을 감사하거나 도메인에 태그를 지정해야 할 수도 있습니다. 이 단원에서는 다음 작업 및 도메인 관리와 관련된 작업을 수행 하는 방법을 설명합니다. 주제 구성 변경 정보 (p. 26) 구성 변경 비용 (p. 27) 서비스 소프트웨어 업데이트 (p. 28) 다중 AZ 도메인 구성 (p. 29) 상태 대시보드 해석 (p. 33) Amazon CloudWatch를 사용하여 클러스터 지표 및 통계 모니터링(콘솔) (p. 34) Amazon Elasticsearch Service 도메인 태그 지정 (p. 41) 구성 변경 정보 Amazon ES는 도메인을 업데이트할 때 블루/그린 배포 프로세스를 사용합니다. 블루/그린에서는 일반적으로 실시간 하나와 유휴 하나, 두 개의 프로덕션 환경을 실행하며, 소프트웨어를 변경하는 동안 양쪽 사이를 전환 합니다. Amazon ES의 경우에는 도메인 업데이트용으로 새 환경을 만들고 업데이트가 완료되면 사용자를 새 환경으로 라우팅하는 관행에 따릅니다. 이렇게 하면 가동 중지가 최소화되고, 새로운 환경에 배포하는 데 실 패하더라도 원래의 환경이 유지됩니다. 다음 작업에서는 블루/그린 배포가 사용됩니다. 인스턴스 유형 변경 도메인에 전용 마스터 노드가 없는 경우 데이터 인스턴스 개수 변경 전용 마스터 노드 활성화 또는 비활성화 전용 마스터 노드 수 변경 다중 AZ 활성화 또는 비활성화 스토리지 유형, 볼륨 유형 또는 볼륨 크기 변경 다른 VPC 서브넷 선택 VPC 보안 그룹 추가 또는 제거 Kibana에 대한 Amazon Cognito 인증 활성화 또는 비활성화 다른 Amazon Cognito 사용자 풀 또는 자격 증명 풀 선택 고급 설정 수정 CloudWatch에 대한 오류 로그 또는 느린 로그 게시 활성화 또는 비활성화 26
구성 변경 비용 새 Elasticsearch 버전으로 업그레이드 대부분의 경우 다음 작업에서는 블루/그린 배포가 사용되지 않습니다. 액세스 정책 변경 자동 스냅샷 시간 변경 도메인에 전용 마스터 노드가 있는 경우 데이터 인스턴스 개수 변경 예외가 있습니다. 예를 들어 세 가지 가용 영역 지원을 시작한 이후 도메인을 다시 구성하지 않은 경우 Amazon ES에서 가용 영역 간에 전용 마스터 노드를 다시 배포하는 일회성 블루/그린 배포를 수행할 수도 있 습니다. 구성 변경을 시작하면 도메인 상태가 처리 중으로 바뀝니다. 특정 서비스 소프트웨어 업데이트 (p. 28) 동 안 활성 상태가 유지됩니다. 두 경우 모두 클러스터 상태와 Amazon CloudWatch 지표를 검토하여 도메인 업 데이트가 이루어지는 동안 클러스터의 노드 수가 일시적으로 증가(때로는 두 배)하는 것을 확인할 수 있습니 다. 다음 그림에 구성 변경 중 노드 수가 11개에서 22개로 두 배가 되었다가 업데이트가 완료되면 11개로 돌 아가는 과정이 나와 있습니다. 이렇게 일시적인 증가로 인해 갑자기 관리해야 할 노드가 늘어난 클러스터의 전용 마스터 노드 (p. 137)는 부담을 받게 됩니다. 그러므로 블루/그린 배포에 따르는 오버헤드를 처리할 수 있을 만큼 전용 마스터 노드에 충분한 용량을 유지해야 합니다. Important 구성 변경 및 서비스 유지 관리 중 추가로 발생하는 비용은 없습니다. 클러스터에 대해 요청한 노드 개수에 대해서만 비용이 청구됩니다. 구체적인 내용은 the section called 구성 변경 비 용 (p. 27) 단원을 참조하십시오. 전용 마스터 노드의 오버로딩을 방지하기 위해, Amazon CloudWatch 지표를 통해 사용량을 모니터 링 (p. 34)할 수 있습니다. 권장 최대값은the section called 권장되는 CloudWatch 경보 (p. 140) 단원을 참조하십시오. 구성 변경 비용 도메인에 대한 구성을 변경하는 경우 Amazon ES는 the section called 구성 변경 정보 (p. 26)에 설명된 대로 새 클러스터를 생성합니다. 새 클러스터로 이전 클러스터를 마이그레이션하는 중 다음 비용이 발생합니 다. 인스턴스 유형을 변경하면 처음에는 이전 및 새 클러스터 둘 다에 대한 비용이 청구됩니다. 그 이후에는 새 클러스터에 대한 비용만 청구됩니다. 예: m3.xlarge 인스턴스 세 개에서 m4.large 인스턴스 네 개로 구성을 변경합니다. 이때 처음 한 시간 동안은 두 클러스터(3 * m3.xlarge + 4 * m4.large)에 대한 요금이 부과됩니다. 그 이후에는 새 클러스 터(4 * m4.large)에 대한 비용만 청구됩니다. 인스턴스 유형을 변경하지 않으면 처음에는 가장 큰 클러스터에 대한 비용만 청구됩니다. 그 이후에는 새 클러스터에 대한 비용만 청구됩니다. 27
서비스 소프트웨어 업데이트 예: m3.xlarge 인스턴스 여섯 개에서 m3.xlarge 인스턴스 세 개로 구성을 변경합니다. 처음 한 시 간 동안은 가장 큰 클러스터(6 * m3.xlarge)에 대해 비용이 청구됩니다. 그 이후에는 새 클러스터(3 * m3.xlarge)에 대한 비용만 청구됩니다. 서비스 소프트웨어 업데이트 Note 서비스 소프트웨어 업데이트는 Elasticsearch 버전 업그레이드와 다릅니다. Elasticsearch의 최신 버 전 업그레이드에 대한 자세한 내용은 Elasticsearch 업데이트 (p. 101) 단원을 참조하십시오. Amazon ES는 기능을 추가하거나 도메인을 개선하는 시스템 소프트웨어 업데이트를 정기적으로 릴리스합 니다. 콘솔은 업데이트 가능 여부를 가장 쉽게 확인할 수 있는 방법입니다. 서비스 소프트웨어 업데이트 내역 의 경우 the section called 출시 정보 (p. 268) 단원을 참조하십시오. 새로운 서비스 소프트웨어를 사용할 수 있게 되면 도메인에 대한 업데이트를 요청하고 새로운 기능을 즉시 활용할 수 있습니다. 트래픽이 적은 시간에 업데이트를 시작하고자 할 수도 있습니다. 일부 업데이트는 필수이며 다른 업데이트는 선택 사항입니다. 필수 업데이트에 대한 작업을 수행하지 않으면 특정 기간(일반적으로 2주) 후에도 서비스 소프트웨어가 자동으로 업데이트됩니다. 도메인은 다음 표에 표시 된 상태에 있는 서비스 소프트웨어 업데이트에 적합하지 않을 수 있습니다. State 설명 처리 중 상태의 도메인 도메인이 구성 변경 도중에 있습니다. 작업이 완료된 후 업데이트 자격을 확인 하십시오. 빨간색 클러스터 상태 클러스터에서 하나 이상의 인덱스가 빨간색입니다. 문제 해결 단계는 the section called 빨간색 클러스터 상태 (p. 150) 단원을 참조하십시오. 높은 오류율 Elasticsearch 클러스터가 요청을 처리하려고 시도할 때 다수의 5xx 오류를 반 환합니다. 이 문제는 일반적으로 너무 많은 동시 읽기 또는 쓰기 요청의 결과입 니다. 클러스터로 가는 트래픽을 줄이거나 도메인을 확장할 것을 고려하십시오. 브레인 분할 브레인 분할은 Elasticsearch 클러스터가 여러 개의 마스터 노드를 가지고 자 체적으로는 절대로 다시 조인되지 않는 2개의 클러스터로 분할되어 있다는 의 미입니다. 권장 수의 전용 마스터 노드 (p. 137)를 사용하면 브레인 분할을 방 지할 수 있습니다. 브레인 분할로부터 복구하기 위해 도움이 필요하면 AWS Support에 문의하십시오. Amazon Cognito 통합 문제 도메인은 Kibana에 대한 인증 (p. 111)을 사용하며, Amazon ES는 하나 이 상의 Amazon Cognito 리소스를 찾을 수 없습니다. 이 문제는 보통 Amazon Cognito 사용자 풀이 없는 경우에 발생합니다. 문제를 수정하려면 누락된 리소 스를 다시 생성하고 이를 사용하도록 Amazon ES 도메인을 구성합니다. 기타 Amazon ES 서비스 문제 Amazon ES 자체에 문제가 있을 경우 도메인이 업데이트 자격이 없는 것으로 표시될 수 있습니다. 도메인에 이전 조건이 하나도 적용되지 않지만 문제가 하 루를 넘게 지속될 경우 AWS Support에 문의하십시오. 서비스 소프트웨어 업데이트를 요청하려면(콘솔) 1. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. 2. Analytics에서 Elasticsearch Service를 선택합니다. 28
다중 AZ 도메인 구성 3. 탐색 창의 My domains(내 도메인)에서 업데이트할 도메인을 선택합니다. 4. Service software release(서비스 소프트웨어 릴리스)의 경우 설명서 링크를 사용하여 현재 버전과 최신 버전을 비교합니다. 그런 다음 업데이트를 선택합니다. 서비스 소프트웨어 업데이트를 요청하려면(AWS CLI 및 AWS SDK) 다음 명령을 사용하여 업데이트를 사용할 수 있는지 여부 및 업그레이드 자격을 확인하고 업데이트를 요청할 수 있습니다. describe-elasticsearch-domain(describeelasticsearchdomain) start-elasticsearch-service-software-update (StartElasticsearchServiceSoftwareUpdate) 자세한 내용은 AWS CLI Command Reference 및 Amazon ES 구성 API 참조 (p. 181) 단원을 참조하십시 오. Tip 업데이트를 요청한 후에는 취소할 수 있는 기간 범위가 줄어들 수 있 습니다. 콘솔 또는 stop-elasticsearch-service-softwareupdate(stopelasticsearchservicesoftwareupdate) 명령을 사용합니다. 다중 AZ 도메인 구성 각 AWS 리전은 지리적 개별 영역이며, 가용 영역이라고 알려진 여러 개의 격리된 위치가 있습니다. 서비스 중단 발생 시 데이터 손실을 방지하고 클러스터 가동 중지 시간을 최소화하기 위해 동일한 리전에 있는 두 개 또는 세 개의 가용 영역에 노드를 분산할 수 있습니다. 이를 다중 AZ 구성이라고 합니다. 프로덕션 워크로드를 실행하는 도메인의 경우 다음 구성을 권장합니다. Amazon ES를 통해 세 개의 가용 영역을 지원하는 리전을 선택합니다. 미국 동부(오하이오 북부 버지니아) 미국 서부(오리건) EU(프랑크푸르트, 아일랜드, 런던, 파리) 아시아 태평양(싱가포르, 시드니, 도쿄) 중국(닝샤) 세 개 영역에 도메인을 배포합니다. 전용 마스터 노드와 데이터 노드에 대해 최신 세대 인스턴스 유형을 선택합니다. 세 개의 전용 마스터 노드와 최소 세 개의 데이터 노드를 사용합니다. 클러스터의 인덱스당 복제본을 한 개 이상 생성합니다. 이 단원의 나머지 부분에서는 이러한 권장 사항에 대한 설명과 전후 관계를 제공합니다. 샤드 배포 다중 AZ를 활성화하는 경우, 클러스터의 인덱스당 복제본을 한 개 이상 생성해야 합니다. 복제본이 없으 면 Amazon ES가 다른 가용 영역에 데이터 사본을 배포할 수 없으며 이렇게 되면 다중 AZ의 목적을 달성할 수 없습니다. 다행히 모든 인덱스의 기본 구성은 복제본 1개입니다. 다음 다이어그램에 나와 있는 것처럼 Amazon ES는 복제본 샤드가 기본 샤드와 동일 영역에 있지 않도록 기본 샤드와 복제본 샤드를 분산시킵니 다. 29
샤드 배포 가용 영역별로 통해 샤드를 분산시키는 것 외에도 Amazon ES는 샤드를 노드별로 분산시킵니다. 그러나 특 정 도메인 구성은 샤드 수가 불균형해질 수 있습니다. 다음 도메인을 생각해 보십시오. 데이터 노드 5개 기본 샤드 5개 복제본 2개 가용 영역 3개 이 경우, Amazon ES는 다음 다이어그램과 같이 기본 샤드와 복제본 샤드를 영역에 분산시키기 위해 한 개의 노드를 오버로드해야 합니다. 30
전용 마스터 노드 분산 개별 노드의 부하를 늘리고 성능을 저하시킬 수 있는 이러한 상황을 피하려면, 인덱스당 두 개 이상의 복제본 을 사용하려는 경우 인스턴스 수를 3의 배수로 선택하는 것이 좋습니다. 전용 마스터 노드 분산 도메인을 구성할 때 가용 영역을 두 개 선택하더라도 Amazon ES는 전용 마스터 노드 (p. 137)를 세 개의 가용 영역에 자동으로 분산시킵니다. 이러한 분산은 영역에 서비스 중단이 발생할 경우 클러스터 가동 중지 를 방지합니다. 권장되는 세 개의 전용 마스터 노드를 사용하면 하나의 가용 영역이 중단되더라도 클러스터 가 여전히 전용 마스터 노드의 쿼럼(2)을 유지하므로 새 마스터를 선택할 수 있습니다. 다음 다이어그램은 이 구성을 보여 줍니다. 31
가용 영역 중단 이 자동 분산에는 몇 가지 주요 예외가 있습니다. 세 개의 가용 영역에서 사용할 수 없는 전 세대 인스턴스 유형을 선택하는 경우 다음 시나리오가 적용됩니 다. 도메인에 가용 영역을 세 개 선택하면 Amazon ES가 오류를 반환합니다. 다른 인스턴스 유형을 선택하 고 다시 시도하십시오. 도메인에 가용 영역을 두 개 선택하면 Amazon ES가 두 개의 영역에 전용 마스터 노드를 분산시킵니다. 모든 AWS 리전에 세 개의 가용 영역이 있는 것은 아닙니다. 이러한 리전에서는 두 개의 영역만 사용하도 록 도메인을 구성할 수 있으며, Amazon ES는 두 개 영역에만 전용 마스터 노드를 분산시킬 수 있습니다. 세 개의 가용 영역을 지원하는 리전 목록을 보려면 the section called 다중 AZ 도메인 구성 (p. 29) 단 원을 참조하십시오. 가용 영역 중단 가용 영역 중단은 드문 경우지만 발생할 수 있습니다. 다음 표에는 중단 시 다양한 다중 AZ 구성과 동작이 나 와 있습니다. 리전의 가용 영 역수 선택한 가용 영 역수 전용 마스터 노드 수 한 개의 가용 영역에 중단이 발생할 경우의 동작 2 이상 2 0 가동 중지. 클러스터에서 데이터 노드의 절반이 손 실되고 마스터를 선택하기 전에 가용 영역에서 하나 이상의 노드를 교체해야 합니다. 2 2 3 50/50의 가동 중지 확률. Amazon ES는 하나의 가용 영역에 두 개의 전용 마스터 노드를 분산시키고 하 나를 다른 영역에 분산시킵니다. 하나의 전용 마스터 노드가 있는 가용 영역에 장 애가 발생하면 나머지 가용 영역에 있는 두 개의 전용 마스터 노드가 마스터로 선택될 수 있습니 다. 32
상태 대시보드 해석 리전의 가용 영 역수 선택한 가용 영 역수 전용 마스터 노드 수 한 개의 가용 영역에 중단이 발생할 경우의 동작 두 개의 전용 마스터 노드가 있는 가용 영역에 장 애가 발생하면 나머지 가용 영역에서 하나의 전용 마스터 노드를 추가하고 마스터로 선택될 수 있을 때까지 클러스터를 사용할 수 없습니다. 3 이상 2 3 가동 중지 없음. Amazon ES는 세 개의 가용 영역에 전용 마스터 노드를 자동으로 분산시키므로 나머지 두 개의 전용 마스터 노드가 마스터로 선택될 수 있 습니다. 3 이상 3 0 가동 중지 없음. 약 3분의 2의 데이터 노드가 여전히 마스터로 선택될 수 있습니다. 3 이상 3 3 가동 중지 없음. 나머지 두 개의 전용 마스터 노드가 마스터로 선택될 수 있습니다. 모든 구성에서 원인과 상관없이 노드 장애는 클러스터의 나머지 데이터 노드에서 일정 기간 동안 부하 증가 를 유발하며, Amazon ES는 현재 누락된 노드를 교체하도록 새 노드를 자동으로 구성할 수 있습니다. 예를 들어, 3개 영역 구성에서 가용 영역 장애가 발생하는 경우 데이터 노드의 최대 2/3가 클러스터에 대한 요청을 최대한 많이 처리해야 합니다. 이에 따라 나머지 노드들도 온라인 상태가 될 때 새 노드에 샤드를 복 제하므로 성능에 더 큰 영향을 미칠 수 있습니다. 워크로드에 가용성이 중요한 경우 이 문제를 최소화하기 위 해 클러스터에 리소스를 추가하는 것을 고려하십시오. 상태 대시보드 해석 Amazon ES 콘솔의 인스턴스 상태 탭에서는 상자 차트를 사용하여 각 Elasticsearch 노드의 상태를 한 눈에 볼 수 있습니다. 각 색 상자는 지정된 기간 동안 노드의 값 범위를 보여 줍니다. 파란색 상자는 다른 노드와 일관적인 값을 나타냅니다. 빨간색 상자는 이상값을 나타냅니다 각 상자 내의 흰색 선은 노드의 현재 값을 보여 줍니다. 각 상자의 양쪽에 있는 수염 은 일정 기간 동안 모든 노드의 최소값과 최대값을 보여 줍니다. 33
Amazon CloudWatch를 사용하여 클 러스터 지표 및 통계 모니터링(콘솔) Amazon CloudWatch를 사용하여 클러스터 지표 및 통계 모니터링(콘솔) Amazon ES 도메인은 1분마다 성능 지표를 Amazon CloudWatch로 전송합니다. 범용 또는 마그네틱 EBS 볼륨을 사용하는 경우에는 EBS 볼륨 지표만 5분마다 업데이트됩니다. 이러한 지표를 보려면 Amazon Elasticsearch Service 콘솔의 Cluster health(클러스터 상태) 및 Instance health(인스턴스 상태) 탭을 사용합 니다. 이러한 지표는 추가 요금 없이 제공됩니다. 도메인의 구성을 변경하는 경우 클러스터 상태 및 인스턴스 상태 탭의 개별 인스턴스 목록이 정확한 수로 반 환되기 전에 짧은 기간 동안 두 배의 크기로 증가하곤 합니다. 이 동작에 대한 설명은 the section called 구성 변경 정보 (p. 26) 단원을 참조하십시오. Amazon ES 지표는 다음 범주로 구분됩니다. the section called 클러스터 지표 (p. 34) the section called 전용 마스터 노드 지표 (p. 37) the section called EBS 볼륨 지표 (p. 38) the section called 인스턴스 지표 (p. 38) Note 지표는 2주 동안 보관된 후 삭제됩니다. 클러스터 지표 AWS/ES 네임스페이스에는 다음 클러스터 지표가 포함되어 있습니다. 지표 설명 ClusterStatus.green 클러스터의 노드에 모든 인덱스 샤드가 할당되었는지 나타냅니다. 관련 통계: Minimum, Maximum ClusterStatus.yellow 모든 인덱스의 기본 샤드가 클러스터의 노드에 할당되어 있지만 하나 이 상의 인덱스에 대해 복제본 샤드가 할당되어 있지 않음을 나타냅니다. 단 일 노드 클러스터는 복제본을 할당할 수 있는 두 번째 노드가 없기 때문 에 항상 노란색 클러스터 상태로 초기화됩니다. 노드 수를 늘려 녹색 클 러스터 상태를 획득하거나 Elasticsearch API를 사용하여 인덱스에 대한 number_of_replicas 설정을 0으로 지정할 수 있습니다. 자세한 정보 는 Amazon Elasticsearch Service 도메인 구성을 참조하십시오. 관련 통계: Minimum, Maximum ClusterStatus.red 인덱스 하나 이상의 기본 및 복제본 샤드가 클러스터의 노드에 할당되지 않았음을 나타냅니다. 복구하려면 인덱스를 삭제하거나 스냅샷을 복원 한 다음 EBS 기반 스토리지를 추가하거나, 더 큰 인스턴스 유형을 사용 하거나, 인스턴스를 추가해야 합니다. 자세한 정보는 빨간색 클러스터 상 태 단원을 참조하십시오. 관련 통계: Minimum, Maximum Nodes 전용 마스터 노드를 포함하여 Amazon ES 클러스터에 포함된 노드 수. 관련 통계: Minimum, Maximum, Average 34
클러스터 지표 지표 설명 SearchableDocuments 클러스터의 모든 인덱스에서 검색 가능한 총 문서 수 관련 통계: Minimum, Maximum, Average DeletedDocuments 클러스터의 모든 인덱스에서 삭제 표시된 총 문서 수. 이들 문서는 더 이 상 검색 결과에 나타나지 않지만, Elasticsearch은 세그먼트 병합 시에만 삭제된 문서를 디스크에서 제거합니다. 이 지표는 삭제 요청 후 증가하고 세그먼트 병합 후 감소합니다. 관련 통계: Minimum, Maximum, Average CPUUtilization 클러스터의 데이터 노드에 사용된 CPU 리소스의 최대 비율 관련 통계: Maximum, Average FreeStorageSpace 클러스터에서 사용할 수 있는 노드 공간(GiB). Sum은 클러스터의 사용 가능한 전체 공간을 표시하지만, 정확한 값을 얻으려면 이 기간을 1분으 로 두어야 합니다. Minimum, Maximum, Average는 개별 노드의 사용 가능한 공간을 각각 표시합니다. 이 지표가 0에 이르면 Amazon ES는 ClusterBlockException을 내보냅니다. 복구하려면 인덱스를 삭제 하거나, 더 큰 인스턴스를 추가하거나 기존 인스턴스에 EBS 기반 스토리 지를 추가해야 합니다. 자세한 정보는 여유 스토리지 공간 부족에서 복구 단원을 참조하십시오. Note FreeStorageSpace는 Elasticsearch _cluster/stats API 가 제공하는 값보다 항상 적습니다. Amazon ES는 내부 작업을 위해 각 인스턴스에 스토리지 공간의 일정 비율을 예약합니다. 관련 통계: Minimum, Maximum, Average, Sum ClusterUsedSpace 클러스터의 총 사용 공간(GiB). 이 지표는 Amazon CloudWatch 콘솔이 아닌 Amazon ES 콘솔에서 볼 수 있습니다. 정확한 값을 얻으려면 이 기 간을 1분으로 두어야 합니다. 관련 통계: Minimum, Maximum ClusterIndexWritesBlocked수신되는 쓰기 요청에 대한 클러스터의 허용 또는 차단 여부를 나타냅니 다. 값이 0이면 클러스터가 요청을 허용하고 있다는 것을 의미합니다. 값 이 1이면 클러스터가 요청을 차단하고 있다는 것을 의미합니다. 클러스터가 요청을 차단하는 요인은 매우 다양할 수 있습니다. 몇 가 지 공통적인 요인을 꼽자면 FreeStorageSpace가 너무 낮은 경우, JVMMemoryPressure가 너무 높은 경우, 또는 CPUUtilization이 너 무 높은 경우가 있습니다. 이러한 문제를 줄이려면 디스크 공간을 추가하 거나 클러스터를 확장하는 것이 좋습니다. 관련 통계: Maximum Note 이 지표는 Amazon CloudWatch 콘솔이 아닌 Amazon ES 콘솔 에서 볼 수 있습니다. JVMMemoryPressure 클러스터의 모든 데이터 노드에 사용된 Java 힙의 최대 비율 관련 통계: Maximum 35
클러스터 지표 지표 설명 AutomatedSnapshotFailure 클러스터에 대해 실패한 자동 스냅샷 수. 값 1은 지난 36시간 동안 도메인 에 대해 생성된 자동 스냅샷이 없음을 나타냅니다. 관련 통계: Minimum, Maximum CPUCreditBalance 클러스터의 데이터 노드에 사용할 수 있는 잔여 CPU 크레딧. CPU 크레딧은 1분 동안 CPU 코어의 전체 성능을 제공합니다. 자세한 정 보는 Amazon EC2 개발자 안내서의 CPU 크레딧을 참조하십시오. 이 지표를 사용할 수 있는 인스턴스 유형은 t2.micro.elasticsearch, t2.small.elasticsearch, 및 t2.medium.elasticsearch로 제한됩니다. 관련 통계: Minimum KibanaHealthyNodes Kibana 상태 확인. 값이 1이면 정상적인 동작 상태를 나타냅니다. 값이 0 이면 Kibana에 액세스할 수 없다는 것을 나타냅니다. 대부분 경우 Kibana 상태가 클러스터 상태를 그대로 반영합니다. 관련 통계: Minimum Note 이 지표는 Amazon CloudWatch 콘솔이 아닌 Amazon ES 콘솔 에서 볼 수 있습니다. KMSKeyError 값 1은 저장 데이터를 암호화하는 데 사용된 KMS 고객 마스터 키가 비활 성화된 것을 나타냅니다. 도메인을 정상 작동으로 복원하려면 키를 다시 활성화해야 합니다. 콘솔에는 저장 데이터를 암호화하는 도메인에 대해 서만 이 지표가 표시됩니다. 관련 통계: Minimum, Maximum KMSKeyInaccessible 값 1은 유휴 데이터를 암호화하는 데 사용된 KMS 고객 마스터 키가 삭제 되었거나 Amazon ES에 대한 권한 부여가 취소되었음을 나타냅니다. 이 상태의 도메인은 복원할 수 없습니다. 하지만 수동 스냅샷이 있는 경우 해당 스냅샷을 사용하여 도메인의 데이터를 새 도메인으로 마이그레이션 할 수 있습니다. 콘솔에는 저장 데이터를 암호화하는 도메인에 대해서만 이 지표가 표시됩니다. 관련 통계: Minimum, Maximum InvalidHostHeaderRequests잘못된(또는 누락된) 호스트 헤더를 포함하여 Elasticsearch 클러스터에 수행된 HTTP 요청 수입니다. 유효 요청은 호스트 헤더 값으로 도메인 호 스트 이름을 포함합니다. Amazon ES 는 제한적인 액세스 정책이 없는 퍼블릭 액세스 도메인에 대한 잘못된 요청을 거부합니다. 모든 도메인에 제한적인 액세스 정책을 적용하는 것을 권장합니다. 이 지표에 대한 값이 클 경우, 사용자의 Elasticsearch 클라이언트가 요청 에 도메인 호스트 이름이(예를 들어, IP 주소 아님) 포함되었는지 확인합 니다. 관련 통계: Sum ElasticsearchRequests Elasticsearch 클러스터에 수행된 요청 수입니다. 관련 통계: Sum 36
전용 마스터 노드 지표 지표 설명 RequestCount 각 요청에 대한 도메인 및 HTTP 응답 코드(2xx, 3xx, 4xx, 5xx)에 대한 요 청 건수입니다. 관련 통계: Sum 전용 마스터 노드 지표 AWS/ES 네임스페이스에는 다음과 같이 전용 마스터 노드의 지표가 포함되어 있습니다. 지표 설명 MasterCPUUtilization 전용 마스터 노드에서 사용하는 최대 CPU 리소스 비율. 이 지표가 60% 에 도달하면 인스턴스 유형의 크기를 늘리는 것이 좋습니다. 관련 통계: Average MasterFreeStorageSpace 이 지표는 관련이 없으므로 무시해도 좋습니다. 이 서비스에서는 마스터 노드를 데이터 노드로 사용하지 않습니다. MasterJVMMemoryPressure 클러스터의 모든 전용 마스터 노드에 사용되는 Java 힙의 최대 비율. 이 지표가 85%에 도달하면 더 큰 인스턴스 유형으로 이전하는 것이 좋습니 다. 관련 통계: Maximum MasterCPUCreditBalance 클러스터의 전용 마스터 노드에 사용할 수 있는 잔여 CPU 크레 딧. CPU 크레딧은 1분 동안 CPU 코어의 전체 성능을 제공합니 다. 자세한 정보는 Linux 인스턴스용 Amazon EC2 사용 설명서에 서 CPU Credits를 참조하십시오. 이 지표를 사용할 수 있는 인 스턴스 유형은 t2.micro.elasticsearch, t2.small.elasticsearch, 및 t2.medium.elasticsearch로 제한됩니다. 관련 통계: Minimum MasterReachableFromNode MasterNotDiscovered 예외 상태. 값이 1이면 정상적인 동작 상태를 나타냅니다. 값이 0이면 /_cluster/health/가 오류를 일으킨 것을 나 타냅니다. 여기에서 오류란 마스터 노드가 중단되었거나, 도달할 수 없다는 것을 의 미합니다. 이러한 오류가 발생하는 이유는 대부분 네트워크 연결 문제 또 는 AWS 종속성 문제에서 기인합니다. 관련 통계: Minimum Note 이 지표는 Amazon CloudWatch 콘솔이 아닌 Amazon ES 콘솔 에서 볼 수 있습니다. MasterSysMemoryUtilization 사용 중인 마스터 노드 메모리의 비율입니다. 관련 통계: Maximum 37
EBS 볼륨 지표 EBS 볼륨 지표 AWS/ES 네임스페이스에는 EBS 볼륨에 대한 다음 지표가 포함되어 있습니다. 지표 설명 ReadLatency EBS 볼륨에 대한 읽기 작업의 지연 시간(초) 관련 통계: Minimum, Maximum, Average WriteLatency EBS 볼륨에 대한 쓰기 작업의 지연 시간(초) 관련 통계: Minimum, Maximum, Average ReadThroughput EBS 볼륨에 대한 읽기 작업의 처리량(바이트/초) 관련 통계: Minimum, Maximum, Average WriteThroughput EBS 볼륨에 대한 쓰기 작업의 처리량(바이트/초) 관련 통계: Minimum, Maximum, Average DiskQueueDepth EBS 볼륨에 대해 대기 중인 I/O 요청 수 관련 통계: Minimum, Maximum, Average ReadIOPS EBS 볼륨에 대한 읽기 작업의 초당 I/O 작업 수 관련 통계: Minimum, Maximum, Average WriteIOPS EBS 볼륨에 대한 쓰기 작업의 초당 I/O 작업 수 관련 통계: Minimum, Maximum, Average 인스턴스 지표 AWS/ES 네임스페이스는 도메인의 각 인스턴스에 대해 다음과 같은 지표를 포함합니다. 또는 Amazon ES는 이러한 인스턴스 지표를 집계하여 전체 클러스터 상태에 대한 통찰을 제공합니다. 콘솔의 데이터 샘플 통계 를 이용하여 이 동작을 확인할 수 있습니다. 다음 표의 각 지표는 노드 및 클러스터 관련 통계를 포함합니다. Important 다양한 버전의 Elasticsearch은 서로 다른 스레드 풀을 사용하여 _index API에 대한 호출을 처리합 니다. Elasticsearch 1.5 및 2.3은 인덱스 스레드 풀을 사용합니다. Elasticsearch 5.x, 6.0, 6.2는 벌크 스레드 풀을 사용합니다. 6.3 이상은 쓰기 스레드 풀을 사용합니다. 현재 Amazon ES는 벌크 및 쓰 기 스레드 풀에 대한 지표를 제공하지 않습니다. 지표 설명 IndexingLatency 샤드 1개가 인덱싱 작업을 완료하는 데 걸리는 평균 시간(밀리초)입니다. 관련 노드 통계: Average 관련 클러스터 통계: Average, Maximum IndexingRate 분당 인덱싱 작업 수입니다. 2개의 문서를 추가하고 2개를 4개 작업으로 업데이 트하는 _bulk API에 대한 하나의 호출입니다. 이것은 하나 이상의 노드에 분산 될 수 있습니다. 인덱스에 하나 이상의 복제본이 있는 경우 클러스터의 다른 노 38
인스턴스 지표 지표 설명 드 역시 총 4개의 인덱싱 작업을 기록합니다. 문서 삭제는 이 지표에 포함되지 않습니다. 관련 노드 통계: Average 관련 클러스터 통계: Average, Maximum, Sum SearchLatency 샤드 1개가 검색 작업을 완료하는 데 걸리는 평균 시간(밀리초)입니다. 관련 노드 통계: Average 관련 클러스터 통계: Average, Maximum SearchRate 한 노드의 모든 샤드에 대한 분당 검색 요청의 총 수입니다. _search API에 대 한 단일 호출은 많은 샤드로부터 결과를 반환할 수 있습니다. 이러한 샤드 중 5 개가 한 노드에 있는 경우, 클라이언트가 단 한 개만 요청했더라도 노드는 이 지 표에 대해 5를 보고할 것입니다. 관련 노드 통계: Average 관련 클러스터 통계: Average, Maximum, Sum SysMemoryUtilization사용 중인 인스턴스 메모리의 비율(%)입니다. 관련 노드 통계: Minimum, Maximum, Average 관련 클러스터 통계: Minimum, Maximum, Average JVMGCYoungCollectionCount "신세대" 가비지 수집이 실행된 횟수입니다. 클러스터 작업은 일반적으로 실행 수가 계속 증가하여 커집니다. 관련 노드 통계: Maximum 관련 클러스터 통계: Sum, Maximum, Average JVMGCYoungCollectionTime 클러스터가 "신세대"가비지 수집을 수행하는 데 소비 한 시간(밀리 초)입니다. 관련 노드 통계: Maximum 관련 클러스터 통계: Sum, Maximum, Average JVMGCOldCollectionCount "구세대"가비지 수집이 실행된 횟수입니다. 리소스가 충분한 클러스터에서는 이 수가 작게 유지되고 자주 증가하지 않습니다. 관련 노드 통계: Maximum 관련 클러스터 통계: Sum, Maximum, Average JVMGCOldCollectionTime 클러스터가 "구세대"가비지 수집을 수행하는 데 소비 한 시간 (밀리 초)입니다. 관련 노드 통계: Maximum 관련 클러스터 통계: Sum, Maximum, Average ThreadpoolForce_mergeQueue 강제 병합 스레드 풀에서 대기 중인 작업의 수입니다. 대기열 크기가 지속적으 로 높으면 클러스터 확장을 고려하십시오. 관련 노드 통계: Maximum 관련 클러스터 통계: Sum, Maximum, Average 39
인스턴스 지표 지표 설명 ThreadpoolForce_mergeRejected 강제 병합 스레드 풀에서 거부된 작업의 수입니다. 이 수가 계속 증가하면 클러 스터 확장을 고려하십시오. 관련 노드 통계: Maximum 관련 클러스터 통계: Sum ThreadpoolForce_mergeThreads 강제 병합 스레드 풀의 크기입니다. 관련 노드 통계: Maximum 관련 클러스터 통계: Average, Sum ThreadpoolIndexQueue인덱스 스레드 풀에서 대기 중인 작업의 수입니다. 대기열 크기가 지속적으로 높으면 클러스터 확장을 고려하십시오. 인덱스 대기열의 최대 크기는 200입니 다. 관련 노드 통계: Maximum 관련 클러스터 통계: Sum, Maximum, Average ThreadpoolIndexRejected 인덱스 스레드 풀에서 거부된 작업의 수입니다. 이 수가 계속 증가하면 클러스 터 확장을 고려하십시오. 관련 노드 통계: Maximum 관련 클러스터 통계: Sum ThreadpoolIndexThreads 인덱스 스레드 풀의 크기입니다. 관련 노드 통계: Maximum 관련 클러스터 통계: Average, Sum ThreadpoolSearchQueue 검색 스레드 풀에서 대기 중인 작업의 수입니다. 대기열 크기가 지속적으로 높 으면 클러스터 확장을 고려하십시오. 검색 대기열의 최대 크기는 1,000입니다. 관련 노드 통계: Maximum 관련 클러스터 통계: Sum, Maximum, Average ThreadpoolSearchRejected 검색 스레드 풀에서 거부된 작업의 수입니다. 이 수가 계속 증가하면 클러스터 확장을 고려하십시오. 관련 노드 통계: Maximum 관련 클러스터 통계: Sum ThreadpoolSearchThreads 검색 스레드 풀의 크기입니다. 관련 노드 통계: Maximum 관련 클러스터 통계: Average, Sum 40
Amazon Elasticsearch Service 도메인 태그 지정 지표 설명 ThreadpoolBulkQueue 벌크 스레드 풀에서 대기 중인 작업의 수입니다. 대기열 크기가 지속적으로 높 으면 클러스터 확장을 고려하십시오. 관련 노드 통계: Maximum 관련 클러스터 통계: Sum, Maximum, Average ThreadpoolBulkRejected 벌크 스레드 풀에서 거부된 작업의 수입니다. 이 수가 계속 증가하면 클러스터 확장을 고려하십시오. 관련 노드 통계: Maximum 관련 클러스터 통계: Sum ThreadpoolBulkThreads 벌크 스레드 풀의 크기입니다. 관련 노드 통계: Maximum 관련 클러스터 통계: Average, Sum ThreadpoolWriteThreads 쓰기 스레드 풀의 크기입니다. 관련 노드 통계: Maximum 관련 클러스터 통계: Average, Sum ThreadpoolWriteRejected 쓰기 스레드 풀에서 거부된 작업의 수입니다. 관련 노드 통계: Maximum 관련 클러스터 통계: Average, Sum ThreadpoolWriteQueue쓰기 스레드 풀에서 대기 중인 작업의 수입니다. 관련 노드 통계: Maximum 관련 클러스터 통계: Average, Sum Amazon Elasticsearch Service 도메인 태그 지정 Amazon ES 태그를 사용하여 메타데이터를 Amazon ES 도메인에 추가할 수 있습니다. AWS에서는 태그에 의미론적 의미를 적용하지 않습니다. 태그는 엄격히 문자열로 해석됩니다. 모든 태그에는 다음 요소가 포함 되어 있습니다. 태그 요소 설명 태그 키 태그 키는 태그의 필수 이름입니다. 태그 키는 연결된 Amazon ES 도메인에 대해 고유해 야 합니다. 태그 키 및 값에 대한 기본 제한 사항 목록은 사용자 정의 태그 제한을 참조하 십시오. 태그 값 태그 값은 태그의 선택적 문자열 값입니다. 태그 값은 태그 세트에서 고유할 필요는 없으 며 null일 수 있습니다. 예를 들어, project/trinity 및 cost-center/trinity의 태그 세트에 키값 페어가 있을 수 있습니다. 태그 키 및 값에 대한 기본 제한 사항 목록은 사용자 정의 태 그 제한을 참조하십시오. 41
태그 작업(콘솔) 각 Amazon ES 도메인에는 해당 Amazon ES 도메인에 배정된 모든 태그를 포함하는 태그 세트가 있습니다. AWS는 Amazon ES 도메인에 어떠한 태그도 자동으로 설정하지 않습니다. 태그 세트 하나에 태그가 최대 50 개까지 들어 있을 수도 있고, 비어 있을 수도 있습니다. 리소스의 기존 태그와 동일한 키가 있는 Amazon ES 도메인에 태그를 추가하면 새 값이 이전 값을 덮어씁니다. 비슷한 태그의 리소스 비용을 그룹화하여 이러한 태그로 비용을 추적할 수 있습니다. Amazon ES 도메인 태그는 사용자가 정의하고 Amazon ES 도메인과 연결하는 이름-값 페어입니다. 이 이름을 키라고 합니다. 태그를 사용하여 Amazon ES 도메인에 임의의 정보를 할당할 수 있습니다. 범주 정의 등에 태그 키를 사용 할 수 있으며 태그 값은 해당 범주의 항목일 수 있습니다. 예를 들어, 태그 키를 project 로 정의하고 태그 값을 Salix 로 정의하여 Amazon ES 도메인이 Salix project에 배정됨을 나타냅니다. 또한 태그를 사용하여 environment=test 또는 environment=production 등의 키를 사용해 Amazon ES 도메인을 테스트나 프로덕션에 사용되도록 지정할 수도 있습니다. Amazon ES 도메인과 연결된 메타데이터를 더 쉽게 추적할 수 있게 일관성 있는 태그 키 세트를 사용하는 것이 좋습니다. 또한 태그를 사용하여 비용 구조를 반영하도록 AWS 청구서를 구성할 수 있습니다. 이렇게 하려면 가입하여 태그 키 값이 포함된 AWS 계정 청구서를 가져옵니다. 그런 다음 같은 태그 키 값을 가진 리소스에 따라 결제 정보를 구성하여 리소스 비용의 합을 볼 수 있습니다. 예를 들어, 키-값 페어로 Amazon ES 도메인에 태그를 지정한 다음 결제 정보를 구성하여 여러 서비스에 걸친 각 도메인의 총 비용을 볼 수 있습니다. 자세한 내용 은 AWS Billing and Cost Management 문서의 비용 할당 태그 사용을 참조하십시오. Note 권한 부여 목적으로 태그가 캐시됩니다. 이 때문에 Amazon ES 도메인의 태그에 대한 추가나 업데 이트가 제공되는 데 몇 분 정도 걸릴 수 있습니다. 태그 작업(콘솔) 다음 절차에 따라 리소스 태그를 만듭니다. 태그를 만들려면(콘솔) 1. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. 2. Analytics에서 Elasticsearch 서비스를 선택합니다. 3. 탐색 창에서 해당하는 Amazon ES 도메인을 선택합니다. 4. 도메인 대시보드에서 태그 관리를 선택합니다. 5. 키 열에 태그 키를 입력합니다. 6. (선택 사항) 값 열에 태그 값을 입력합니다. 7. 제출을 선택합니다. 태그를 삭제하려면(콘솔) 다음 절차에 따라 리소스 태그를 삭제합니다. 1. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. 2. Analytics에서 Elasticsearch 서비스를 선택합니다. 3. 탐색 창에서 해당하는 Amazon ES 도메인을 선택합니다. 4. 도메인 대시보드에서 태그 관리를 선택합니다. 5. 삭제할 태그 옆의 삭제를 선택합니다. 6. 제출을 선택합니다. 콘솔에서 태그 사용에 대한 자세한 내용은 AWS Management Console 시작 안내서의 Tag Editor 작업을 참 조하십시오. 42
태그 작업(AWS CLI) 태그 작업(AWS CLI) --add-tags 명령을 사용하여 AWS CLI에서 리소스 태그를 만들 수 있습니다. 구문 add-tags --arn=<domain_arn> --tag-list Key=<key>,Value=<value> 파라미터 설명 --arn 태그를 연결하려는 Amazon ES 도메인의 Amazon 리소스 이름입니다. --tag-list 공백으로 구분된 키-값 페어 세트로, 형식은 다음과 같습니다. Key=<key>,Value=<value> 예 다음 예에서는 logs 도메인에 대해 태그 2개를 생성합니다. aws es add-tags --arn arn:aws:es:us-east-1:379931976431:domain/logs --tag-list Key=service,Value=Elasticsearch Key=instances,Value=m3.2xlarge remove-tags 명령을 사용하여 Amazon ES 도메인에서 태그를 제거할 수 있습니다. 구문 remove-tags --arn=<domain_arn> --tag-keys Key=<key>,Value=<value> 파라미터 설명 --arn 태그를 연결하려는 Amazon ES 도메인의 Amazon 리소스 이름(ARN)입니다. --tag-keys Amazon ES 도메인에서 제거하려는 공백으로 구분된 키-값 페어 세트입니 다. 예 다음 예에서는 이전 예에서 생성한 logs 도메인에서 태그 2개를 제거합니다. aws es remove-tags --arn arn:aws:es:us-east-1:379931976431:domain/logs --tag-keys service instances list-tags 명령을 사용하여 Amazon ES 도메인에 대한 기존 태그를 볼 수 있습니다. 구문 list-tags --arn=<domain_arn> 파라미터 설명 --arn 태그를 연결하려는 Amazon ES 도메인의 Amazon 리소스 이름(ARN)입니다. 예 43
태그 작업(AWS SDK) 다음 예에서는 logs 도메인에 대한 리소스 태그를 모두 나열합니다. aws es list-tags --arn arn:aws:es:us-east-1:379931976431:domain/logs 태그 작업(AWS SDK) AWS SDK(Android 및 ios SDK 제외)는 AddTags, ListTags 및 RemoveTags 작업을 비롯하여 Amazon ES 구성 API 참조 (p. 181)에 정의된 모든 작업을 지원합니다. AWS SDK 설치 및 사용에 대한 자세한 내용 은 AWS 소프트웨어 개발 키트를 참조하십시오. 44
데이터 보호 Amazon Elasticsearch Service의 보안 AWS에서는 클라우드 보안을 가장 중요하게 생각합니다. AWS 고객은 보안에 매우 보안에 민감한 조직의 요 구 사항에 부합하도록 구축된 데이터 센터 및 네트워크 아키텍처의 혜택을 누릴 수 있습니다. 보안은 AWS와 귀하의 공동 책임입니다. 공동 책임 모델은 이 사항을 클라우드 내 보안 및 클라우드의 보안 으로 설명합니다. 클라우드의 보안 AWS는 AWS 클라우드에서 AWS 서비스를 실행하는 인프라를 보호합니다. AWS는 또 한 안전하게 사용할 수 있는 서비스를 제공합니다. 타사 감사자는 정기적으로 AWS 규정 준수 프로그램의 일환으로 보안 효과를 테스트하고 검증합니다. Amazon Elasticsearch Service에 적용되는 규정 준수 프로 그램에 대한 자세한 내용은 규정 준수 프로그램 제공 범위 내 AWS 제품을 참조하십시오. 클라우드 내 보안 귀하의 책임은 귀하가 사용하는 AWS 서비스에 의해 결정됩니다. 또한 귀하는 데이터 의 민감도, 회사 요구 사항, 관련 법률 및 규정을 비롯한 기타 요소에 대해서도 책임이 있습니다. 이 설명서는 Amazon ES 사용 시 공동 책임 모델을 적용하는 방법을 이해하는 데 도움이 됩니다. 다음 주제 는 보안 및 규정 준수 목표를 충족하도록 Amazon ES를 구성하는 방법을 보여줍니다. 또한 Amazon ES 리소 스를 모니터링하고 보호하는 데 도움이 되는 다른 AWS 제품을 사용하는 방법을 배웁니다. 주제 Amazon Elasticsearch Service의 데이터 보호 (p. 45) Amazon Elasticsearch Service의 자격 증명 및 액세스 관리 (p. 48) Amazon Elasticsearch Service의 로깅 및 모니터링 (p. 61) Amazon Elasticsearch Service 규정 준수 확인 (p. 63) Amazon Elasticsearch Service의 복원성 (p. 64) Amazon Elasticsearch Service의 인프라 보안 (p. 64) Amazon Elasticsearch Service의 데이터 보호 Amazon Elasticsearch Service는 AWS 공동 책임 모델을 준수하며, 여기에는 데이터 보호 관련 규정 및 지침 이 포함됩니다. AWS는 모든 AWS 제품을 실행하는 글로벌 인프라를 보호할 책임을 갖습니다. AWS는 고객 콘텐츠 및 개인 데이터의 처리를 위한 보안 구성 제어 등 이 인프라에서 호스팅되는 데이터에 대한 제어권을 유지합니다. 데이터 제어자 또는 데이터 처리자의 역할을 담당하는 AWS 고객과 APN 파트너는 AWS 클라우 드에 올린 모든 개인 데이터에 대한 책임을 갖습니다. 데이터 보호를 위해 AWS 계정 자격 증명을 보호하고 AWS Identity and Access Management (IAM)을 사용 하여 개별 사용자 계정을 설정하여 각 사용자에게 직무를 수행하는 데 필요한 권한만 부여하는 것이 좋습니 다. 또한 다음과 같은 방법으로 데이터를 보호하는 것이 좋습니다. 각 계정마다 멀티 팩터 인증(MFA)을 사용합니다. SSL/TLS를 사용하여 AWS 리소스와 통신합니다. AWS CloudTrail로 API 및 사용자 활동 로깅을 설정합니다. AWS 암호화 솔루션을 AWS 서비스 내의 모든 기본 보안 컨트롤과 함께 사용합니다. Amazon S3에 저장된 개인 데이터를 검색하고 보호하는 데 도움이 되는 Amazon Macie와 같은 고급 관리 형 보안 서비스를 사용합니다. 고객의 계정 번호와 같은 민감한 식별 정보를 도메인 이름, 인덱스 이름, 문서 유형 또는 문서 ID에 넣지 않아 야 합니다. Elasticsearch에서는 이러한 이름을 해당 URI(Uniform Resource Identifier)에 사용합니다. 서버 및 애플리케이션에서 흔히 HTTP 요청을 로깅하는데, 그럴 경우 URI에 민감한 정보가 포함된다면 불필요한 데 이터 노출이 발생할 수 있습니다. 45
저장 데이터 암호화 데이터 보호에 대한 자세한 내용은 AWS 보안 블로그에서 AWS 공동 책임 모델 및 GDPR 블로그 게시물을 참조하십시오. 주제 Amazon Elasticsearch Service에 대한 유휴 데이터 암호화 (p. 46) Amazon Elasticsearch Service 노드 간 암호화 (p. 48) Amazon Elasticsearch Service에 대한 유휴 데이터 암 호화 Amazon ES 도메인은 유휴 시 데이터 암호화, 데이터 무단 액세스를 방지하는 보안 기능을 제공합니다. 이 기능은 AWS Key Management Service(AWS KMS)를 사용하여 암호화 키를 보관하고 관리합니다. 활성화된 경우 다음과 같은 도메인 측면을 암호화합니다. 인덱스 자동 스냅샷 Elasticsearch 로그 전환 파일 애플리케이션 디렉터리의 모든 기타 데이터 유휴 시 데이터 암호화를 활성화할 때 다음은 암호화되지 않지만 추가 단계를 수행하여 보호할 수 있습니다. 수동 스냅샷: 현재 수동 스냅샷을 암호화하는 데 KMS 마스터 키를 사용할 수 없습니다. 그러나 스냅샷 리 포지토리로 사용하는 버킷을 암호화하기 위해 S3 관리형 키로 서버 측 암호화를 사용할 수 있습니다. 지침 은 the section called 수동 스냅샷 리포지토리 등록 (p. 96) 단원을 참조하십시오. 느린 로그 및 오류 로그: 느린 로그를 게시 (p. 21)하여 암호화하려는 경우 동일한 AWS KMS 마스터 키를 Amazon ES 도메인으로 사용하여 CloudWatch Logs 로그 그룹을 암호화할 수 있습니다. 자세한 내용은 Amazon CloudWatch Logs User Guide의 AWS KMS를 사용하여 CloudWatch Logs에서 로그 데이터 암호 화 단원을 참조하십시오. AWS KMS 마스터 키를 생성하는 방법에 대한 자세한 내용은 AWS Key Management Service Developer Guide에서 키 생성을 참조하십시오. 유휴 시 데이터 암호화 활성화 기본적으로 도메인은 유휴 시 데이터를 암호화하지 않으므로 나중에 사용하기 위해 기존 도메인을 구성할 수 없습니다. 기능을 활성화하려면 다른 도메인을 생성 (p. 10)하고 데이터를 마이그레이션해야 합니다. 유휴 시 데이터 암호화에는 Elasticsearch 5.1 이상이 필요합니다. Amazon ES 콘솔로 유휴 데이터를 암호화하는 도메인을 생성하려면, AWS KMS에 다음 자격 증명 기반 정책 과 같은 읽기 전용 권한이 있어야 합니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Action": [ "kms:list*", "kms:describe*" ], "Resource": "*" ] 46
저장 데이터 암호화 (기본값) aws/es 외의 키를 사용하려면 그 키에 권한을 생성할 권한도 있어야 합니다. 이러한 권한은 보통 키 를 만들 때 지정하는 리소스 기반 정책의 형식입니다. 키를 Amazon ES에만 적용하려면 키 정책에 kms:viaservice 조건을 추가하면 됩니다. "Condition": "StringEquals": "kms:viaservice": "es.us-west-1.amazonaws.com" "Bool": "kms:grantisforawsresource": "true" 자세한 내용은 AWS Key Management Service Developer Guide의 AWS KMS에서 키 정책 사용을 참조하십 시오. Warning 도메인을 암호화하는 데 사용한 키를 삭제하면 도메인을 액세스할 수 없게 됩니다. Amazon ES 팀 에서 데이터를 복구하는 데 도움을 줄 수 없습니다. 최소 7일 동안의 대기 기간이 지나야 AWS KMS 에서 마스터 키를 삭제하므로 도메인이 위험 상태임을 감지했을 경우 Amazon ES 팀에서 사용자에 게 연락할 수 있습니다. 유휴 시 데이터 암호화 비활성화 유휴 시 데이터를 암호화하기 위해 도메인을 구성한 후 설정을 비활성화할 수 없습니다. 대신 기존 도메인의 수동 스냅샷 (p. 94)을 가져와 다른 도메인을 생성하고 (p. 10), 데이터를 마이그레이션하며, 이전 도메인 을 삭제할 수 있습니다. 유휴 시 데이터를 암호화하는 도메인 모니터링 유휴 데이터를 암호화하는 도메인에는 2개의 추가 지표 KMSKeyError 및 KMSKeyInaccessible이 있 습니다. 이러한 지표는 도메인에 암호화 키 문제가 있을 때만 나타납니다. 이러한 지표에 대한 자세한 설명 은 the section called 클러스터 지표 (p. 34) 단원을 참조하십시오. 이들은 Amazon ES 콘솔 또는 Amazon CloudWatch 콘솔을 사용하여 확인하거나 변경할 수 있습니다. Tip 각 지표는 도메인과 관련된 중요한 문제를 나타내므로 모두를 위한 CloudWatch 경보를 생성하는 것이 좋습니다. 자세한 내용은 the section called 권장되는 CloudWatch 경보 (p. 140) 단원을 참 조하십시오. 기타 고려 사항 자동 키 교체 기능은 AWS KMS 마스터 키의 속성을 그대로 보존하기 때문에 키가 교체되더라도 Elasticsearch 데이터에 대한 액세스 권한에는 아무런 영향도 끼치지 않습니다. 암호화된 Amazon ES 도메 인은 새로운 마스터 키를 생성하거나 이전 키에 대한 모든 참조를 업데이트하는 수동 키 교체를 지원하지 않습니다. 자세한 내용은 AWS Key Management Service Developer Guide에서 고객 마스터 키 교체를 참 조하십시오. 특정 인스턴스 유형은 유휴 데이터의 암호화를 지원하지 않습니다. 자세한 내용은 the section called 지원 되는 인스턴스 유형 (p. 158) 단원을 참조하십시오. cn-north-1(베이징) 및 cn-northwest-1(닝샤) 리전에서는 유휴 데이터 암호화를 사용할 수 없습니다. Kibana는 유휴 데이터를 암호화하는 도메인에서 계속 작동합니다. 유휴 시 데이터를 암호화하는 도메인의 경우 자동 스냅샷을 위해 다른 리포지토리 이름을 사용합니다. 자 세한 내용은 the section called 스냅샷 복원 (p. 99) 단원을 참조하십시오. 47
노드 간 암호화 Amazon ES 도메인 암호화에는 두 개의 권한이 필요하고 각 암호화 키에는 보안 주체당 500개의 권한 제 한이 있습니다. 이 제한은 단일 키를 사용하여 암호화할 수 있는 최대 Amazon ES 도메인 수가 250개임을 의미합니다. 현재 Amazon ES는 한 리전에서 계정당 최대 100개의 도메인을 지원하므로 이 권한 제한은 중요하지 않습니다. 그러나 계정당 도메인 제한이 늘어나면 권한 제한이 적절해질 수 있습니다. 그때 250개 이상의 도메인을 암호화해야 하는 경우 추가 키를 생성할 수 있습니다. 키는 전0역이 아닌 리 전이므로 여러 AWS 리전에서 동작하는 경우 다수의 키가 필요합니다. Amazon Elasticsearch Service 노드 간 암호화 노드 간 암호화는 Amazon ES의 기본 기능에 추가적인 보안 계층을 제공합니다. 각 Amazon ES 도메인은 VPC 액세스 사용 여부와 상관없이 자체 전용 VPC에 상주합니다. 이 아키텍처는 Elasticsearch 노드 간 트래픽을 가로채는 잠재적 공격자를 방지하고 클러스터를 안전하게 유지합니다. 하 지만 기본적으로 VPC 내에서는 암호화되지 않습니다. 노드 간 암호화를 사용하면 VPC 내 모든 통신에 대해 TLS 암호화를 사용할 수 있습니다. HTTPS를 통해 Amazon ES로 데이터를 전송하는 경우 노드 간 암호화는 Elasticsearch가 클러스터 전체에 데이터를 분배(및 재분배)할 때 데이터를 암호화된 상태로 유지하는 데 도움이 됩니다. 데이터가 암호화되지 않은 상태로 HTTP를 통해 도달할 경우, Amazon ES가 클러스터에 도달한 데이터를 암호화합니다. 노드 간 암호화 활성화 기본적으로 도메인은 노드 간 암호화하지 않으며 나중에 이 기능을 사용하도록 기존 도메인을 구성할 수 없 습니다. 기능을 활성화하려면 다른 도메인을 생성 (p. 10)하고 데이터를 마이그레이션 (p. 104)해야 합니다. 노드 간 암호화에는 Elasticsearch 6.0 이상이 필요합니다. 노드 간 암호화 비활성화 노드 간 암호화를 사용하도록 도메인을 구성한 후 이 설정을 비활성화할 수 없습니다. 대신 암호화된 도메인 의 수동 스냅샷 (p. 94)을 가져와 다른 도메인을 생성하고 (p. 10), 데이터를 마이그레이션한 후 이전 도메 인을 삭제할 수 있습니다. 기타 고려 사항 cn-north-1(베이징) 및 cn-northwest-1(닝샤) 리전에서는 노드 간 암호화를 사용할 수 없습니다. Kibana는 노드 간 암호화를 사용하는 도메인에서 계속 작동합니다. Amazon Elasticsearch Service의 자격 증명 및 액세 스 관리 Amazon Elasticsearch Service는 도메인에 대한 액세스를 제어하는 여러 가지 방법을 제공합니다. 이번 단 원에서는 다양한 정책 유형과 정책 유형 사이의 상호 작용 방식, 그리고 사용자 지정 정책을 생성하는 방법에 대해서 살펴보겠습니다. Important VPC 지원으로 Amazon ES 액세스 제어에 대해 몇 가지 고려해야 할 사항이 추가되었습니다. 자세 한 내용은 the section called VPC 도메인 액세스 정책에 대하여 (p. 128) 단원을 참조하십시오. 정책 유형 Amazon ES는 다음 세 가지 유형의 액세스 정책을 지원합니다. 48
정책 유형 the section called 리소스 기반 정책 (p. 49) the section called 자격 증명 기반 정책 (p. 50) the section called IP 기반 정책 (p. 51) 리소스 기반 정책 리소스 기반 정책은 도메인에 연결됩니다. 이 정책은 보안 주체가 도메인의 하위 리소스에서 실행할 수 있는 작업을 지정합니다. 하위 리소스에는 Elasticsearch 인덱스 및 API가 있습니다. Principal 요소는 액세스가 허용된 계정, 사용자 또는 역할을 지정합니다. Resource 요소는 이러한 보안 주체 가 액세스할 수 있는 하위 리소스를 지정합니다. 다음 리소스 기반 정책은 test-user에게 test-domain에 대한 모든 액세스 권한(es:*)을 부여합니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "AWS": [ "arn:aws:iam::123456789012:user/test-user" ] "Action": [ "es:*" ], "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*" ] 이 정책에는 다음과 같이 두 가지 중요한 고려 사항이 있습니다. 이 권한은 해당 도메인에게만 적용됩니다. test-user는 추가 정책이 생성될 때까지 다른 도메인에 액세 스할 수 없으며, Amazon ES 대시보드에서 도메인 목록을 볼 수도 없습니다. Resource 요소의 마지막 Resource는 중요한 의미를 갖습니다. 즉, test-user는 모든 액세스 권한이 부여되었지만 도메인의 구성이 아닌 도메인의 하위 리소스에 한해서 이러한 작업을 실행할 수 있습니다. 예를 들어 test-user는 인덱스(GET https://search-test-domain.uswest-1.es.amazonaws.com/test-index)에 대해 요청할 수 있지만 도메인의 구성(POST https:// es.us-west-1.amazonaws.com/2015-01-01/es/domain/test-domain/config)을 업데이트할 수는 없습니다. 두 엔드포인트의 차이점을 참고하십시오. 구성 API (p. 181)에 액세스하기 위해서는 자격 증명 기반 정책 (p. 50)이 필요합니다. test-user의 액세스 권한을 추가로 제한할 때는 다음과 같이 정책을 적용할 수 있습니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "AWS": [ "arn:aws:iam::123456789012:user/test-user" ] "Action": [ "es:eshttpget" 49
정책 유형 ] ], "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/test-index/_search" 이제 test-user는 한 가지 작업, 즉 test-index에 대한 비교 검색만 실행할 수 있습니다. 그 밖에 도메인 에 속한 모든 인덱스에는 액세스할 수 없으며, es:eshttpput 또는 es:eshttppost 작업 사용 권한이 없 기 때문에 test-user가 문서를 추가하거나 수정하는 것은 제한됩니다. 다음으로 고급 사용자 역할을 구성할 수도 있습니다. 이 정책은 인덱스에 있는 모든 URI의 HTTP GET 및 PUT 메서드에 대한 액세스 권한을 power-user-role에게 부여합니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "AWS": [ "arn:aws:iam::123456789012:role/power-user-role" ] "Action": [ "es:eshttpget", "es:eshttpput" ], "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/test-index/*" ] 가능한 작업에 대한 자세한 내용은 the section called 정책 요소 참조 (p. 53) 단원을 참조하십시오. 자격 증명 기반 정책 Amazon ES 도메인에 연결하는 리소스 기반 정책과 달리 자격 증명 기반 정책은 AWS Identity and Access Management(IAM) 서비스를 사용하여 사용자 또는 역할에 연결됩니다. 자격 증명 기반 정책 역시 리소스 기 반 정책 (p. 49)과 마찬가지로 서비스에 대한 액세스 주체와 실행 가능한 작업, 그리고 해당되는 경우에 한 해 작업을 실행할 수 있는 리소스까지 지정합니다. 반드시 그래야 하는 것은 아니지만 자격 증명 기반 정책은 더욱 포괄적으로 적용되는 경우가 많습니다. 대부 분의 경우 사용자가 수행할 수 있는 구성 API 동작만 관리합니다. 또한 이 정책을 할당한 후에도 Amazon ES 의 리소스 기반 정책을 사용하여 사용자에게 Elasticsearch 인덱스 및 API에 대한 액세스 권한을 부여할 수 있습니다. 자격 증명 기반 정책은 사용자 또는 역할(보안 주체)에 연결되기 때문에 JSON이 보안 주체를 따로 지정하지 않습니다. 다음 정책은 Describe 및 List로 시작하는 작업에 대한 액세스 권한을 부여합니다. 이러한 조합 의 작업은 도메인 구성에 대한 읽기 전용 액세스 권한을 제공하지만, 도메인 자체에 저장된 데이터에 대한 액 세스 권한은 제공하지 않습니다. "Version": "2012-10-17", "Statement": [ "Action": [ "es:describe*", "es:list*" ], "Effect": "Allow", 50
정책 유형 ] "Resource": "*" 관리자는 Amazon ES 및 모든 도메인에 저장된 모든 데어터에 대한 전체 액세스 권한을 가지고 있을 수 있습 니다. "Version": "2012-10-17", "Statement": [ "Action": [ "es:*" ], "Effect": "Allow", "Resource": "*" ] 리소스 기반 정책과 자격 증명 기반 정책 사이의 차이점에 대한 자세한 내용은 IAM 사용 설명서에서 IAM 정 책을 참조하십시오. Note AWS 관리형 AmazonESReadOnlyAccess 정책이 적용되는 사용자는 콘솔에서 클러스터 상 태를 볼 수 없습니다. 이러한 사용자가 클러스터 상태 정보를 볼 수 있게 하려면 액세스 정책에 "es:eshttpget" 작업을 추가하고 이를 해당하는 계정 또는 역할에 연결하십시오. IP 기반 정책 IP 기반 정책은 도메인에 대한 액세스를 하나 이상의 IP 주소 또는 CIDR 블록으로 제한합니다. 기술적으로 보았을 때 IP 기반 정책은 별개의 정책이 아닙니다. 오히려 익명의 보안 주체를 지정한 후 특별한 Condition 요소를 추가하는 리소스 기반 정책이라고도 할 수 있습니다. IP 기반 정책의 기본적인 이점은 Amazon ES 도메인에 대한 무서명 요청이 가능하기 때문에 curl 및 the section called Kibana (p. 106) 같은 클라이언트를 사용하거나 프록시 서버를 통해 도메인에 액세스할 수 있다는 점입니다. 자세한 내용은 the section called 프록시를 사용하여 Kibana에서 Amazon ES에 액세 스 (p. 106) 단원을 참조하십시오. Note 도메인에서 VPC 액세스를 활성화한 경우 IP 기반 정책은 구성할 수 없습니다. 대신에 보안 그룹을 사용하여 어느 IP 주소가 도메인에 액세스할 수 있는지 제어할 수 있습니다. 자세한 내용은 the section called VPC 도메인 액세스 정책에 대하여 (p. 128) 단원을 참조하십시오. 다음은 지정된 IP 범위에서 전송되는 모든 요청에 test-domain에 대한 액세스 권한을 부여하는 정책입니 다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "AWS": "*" "Action": [ "es:*" ], 51
Amazon ES 요청 서명 및 인증 ] "Condition": "IpAddress": "aws:sourceip": [ "192.0.2.0/24" ] "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*" Amazon ES 요청 서명 및 인증 완전히 개방적인 리소스 기반 액세스 정책을 구성하더라도 Amazon ES 구성 API에 대한 요청은 모두 서명이 필요합니다. 또한 정책이 IAM 사용자 또는 역할을 지정하는 경우에는 Elasticsearch API에 대한 요청에도 서 명이 필요합니다. 서명 메서드는 API에 따라 다음과 같이 다릅니다. Amazon ES 구성 API를 호출할 때는 AWS SDK 중에서 한 가지를 사용하는 것이 바람직합니다. SDK는 프 로세스를 대폭 간소화할 뿐만 아니라 사용자 자신의 요청을 생성한 후 서명을 추가할 때와 비교하여 시간 을 크게 절감할 수 있습니다. 구성 API 엔드포인트는 다음 형식을 사용합니다. es.region.amazonaws.com/2015-01-01/ 예를 들어 다음 요청은 movies 도메인의 구성을 변경하지만, 사용자가 직접 서명해야 합니다(권장하지 않 음). POST https://es.us-east-1.amazonaws.com/2015-01-01/es/domain/movies/config "ElasticsearchClusterConfig": "InstanceType": "c5.xlarge.elasticsearch" SDK 중 하나를 사용하면(예: Boto 3) SDK가 서명하여 자동으로 요청을 처리합니다. import boto3 client = boto3.client('es') response = client.update_elasticsearch_domain_config( DomainName='movies', ElasticsearchClusterConfig= 'InstanceType': 'c5.xlarge.elasticsearch' ) Java 코드 샘플의 경우 AWS SDK 사용 (p. 177) 단원을 참조하십시오. Elasticsearch API를 호출할 때는 사용자 자신의 요청에 서명이 필요합니다. 다양한 언어로 작성된 샘플 코 드를 보려면 HTTP 요청에 서명 (p. 69) 단원을 참조하십시오. Elasticsearch API는 다음 형식을 사용합 니다. domain.region.es.amazonaws.com 예를 들어 다음 요청은 movies 인덱스에서 thor를 검색합니다. GET https://search-my-domain.us-east-1.es.amazonaws.com/movies/_search?q=thor 52
정책 충돌 시 Amazon ES는 AWS 서명 버전 4를 이용한 인증을 지원합니다. 자세한 내용은 서명 버전 4 서명 프로세스를 참조하십시오. Note 서명 버전 4로 서명된 HTTP POST 요청을 위해 URL로 전달된 파라미터는 무시됩니다. 정책 충돌 시 정책이 서로 일치하지 않거나 사용자를 명시적으로 지정하지 않으면 복잡한 문제가 발생합니다. IAM 사용 설명서에서 IAM 작동 방식 이해를 보면 정책 평가 로직이 간결하게 요약되어 있습니다. 기본적으로 모든 요청을 거부합니다. 명시적 허용은 이러한 기본 설정을 무시합니다. 명시적 거부는 모든 허용을 무시합니다. 예를 들어 리소스 기반 정책이 도메인에 대한 액세스 권한을 부여하지만 자격 증명 기반 정책이 액세스를 거 부할 경우에는 액세스가 거부됩니다. 자격 증명 기반 정책이 액세스를 권한을 부여하고 리소스 기반 정책이 액세스 필요 여부를 지정하지 않을 경우에는 액세스가 허용됩니다. 정책이 서로 엇갈렸을 때 액세스 허용 여 부에 대한 결과는 아래 요약 표를 참조하십시오. 리소스 기반 정책에서 허 용됨 리소스 기반 정책에서 거 부됨 리소스 기반 정책에서 허 용 및 거부되지 않음 Allowed in Identitybased Policy 허용 거부 허용 Denied in Identity-based Policy 거부 거부 거부 Neither Allowed nor Denied in Identity-based Policy 허용 거부 거부 정책 요소 참조 Amazon ES는 NotPrincipal을 제외하고 IAM 정책 요소 참조에 나와 있는 대부분의 정책 요소를 지원합니 다. 다음 표에는 가장 일반적인 요소가 나와 있습니다. JSON 정책 요소 요약 Version 정책 언어의 현재 버전은 2012-10-17입니다. 모든 액세스 정책이 이 값을 지 정해야 합니다. Effect 이 요소는 명령문이 지정한 작업에 대한 액세스를 허용 또는 거부 여부를 지정 합니다. 유효한 값은 Allow 또는 Deny입니다. Principal 이 요소는 리소스에 대한 액세스가 허용 또는 거부되는 AWS 계정이나 IAM 사 용자 및 역할을 지정하며, 다음과 같이 몇 가지 형식을 따릅니다. AWS 계정: "Principal":"AWS": ["123456789012"] 또는 "Principal":"AWS": ["arn:aws:iam::123456789012:root"] IAM 사용자: "Principal":"AWS": ["arn:aws:iam::123456789012:user/test-user"] 53
정책 요소 참조 JSON 정책 요소 요약 IAM 역할: "Principal":"AWS": ["arn:aws:iam::123456789012:role/test-role"] * 와일드카드를 지정하면 도메인에 대한 익명의 액세스가 가능하기 때문에 IP 기반 조건을 추가하지 않는다면 권장하지 않습니다. 54
정책 요소 참조 JSON 정책 요소 요약 Action Amazon ES는 HTTP 메서드에 대해 다음 작업을 사용합니다. es:eshttpdelete es:eshttpget es:eshttphead es:eshttppost es:eshttpput Amazon ES는 구성 API (p. 181)에 대해 다음 작업을 사용합니다. es:addtags es:createelasticsearchdomain es:deleteelasticsearchdomain es:deleteelasticsearchservicerole es:describeelasticsearchdomain es:describeelasticsearchdomainconfig es:describeelasticsearchdomains es:describeelasticsearchinstancetypelimits es:describereservedelasticsearchinstanceofferings es:describereservedelasticsearchinstances es:listdomainnames es:listelasticsearchinstancetypedetails es:listelasticsearchinstancetypes es:listelasticsearchversions es:listtags es:purchasereservedelasticsearchinstance es:removetags es:updateelasticsearchdomainconfig Tip 와일드카드를 사용하여 작업의 하위 집합을 지정하는 것도 가능합니 다(예: "Action":"es:*" 또는 "Action":"es:Describe*"). 일부 es: 작업은 리소스 수준 권한을 지원합니다. 예를 들어 모든 도메인 이 아닌 특정 도메인 1개만 삭제할 수 있는 권한을 사용자 1명에게 부여 할 수 있습니다. 그 밖의 작업은 서비스 자체에만 적용됩니다. 예를 들어 es:listdomainnames는 단일 도메인으로 이해하지 않기 때문에 와일드카드 가 필요합니다. Important 리소스 기반 정책은 리소스 수준 권한과 다릅니다. 리소스 기반 정 책 (p. 49)은 도메인에 연결되는 모든 JSON 정책입니다. 따라서 리 소스 수준 권한에서는 작업을 특정 도메인이나 하위 리소스로 제한할 수 있습니다. 실제로 리소스 수준 권한을 리소스 또는 자격 증명 기반 정책의 옵션으로 볼 수도 있습니다. 55
정책 요소 참조 JSON 정책 요소 요약 다음은 모든 es: 작업을 나열한 후 도메인 하위 리소스(test-domain/*)에 대 한 적용 여부에 따라 도메인 구성(test-domain) 또는 서비스(*)로 분할하는 자격 증명 기반 정책 (p. 50)입니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Action": [ "es:eshttpdelete", "es:eshttpget", "es:eshttphead", "es:eshttppost", "es:eshttpput" ], "Resource": "arn:aws:es:us-west-1:987654321098:domain/testdomain/*" "Effect": "Allow", "Action": [ "es:createelasticsearchdomain", "es:deleteelasticsearchdomain", "es:describeelasticsearchdomain", "es:describeelasticsearchdomainconfig", "es:describeelasticsearchdomains", "es:updateelasticsearchdomainconfig" ], "Resource": "arn:aws:es:us-west-1:987654321098:domain/testdomain" "Effect": "Allow", "Action": [ "es:addtags", "es:deleteelasticsearchservicerole", "es:describeelasticsearchinstancetypelimits", "es:describereservedelasticsearchinstanceofferings", "es:describereservedelasticsearchinstances", "es:listdomainnames", "es:listelasticsearchinstancetypedetails", "es:listelasticsearchinstancetypes", "es:listelasticsearchversions", "es:listtags", "es:purchasereservedelasticsearchinstance", "es:removetags" ], "Resource": "*" ] Note 무엇보다 이미 존재하는 도메인에 대한 생성 권한 을 사용자에게 부여하는 이유를 알 수 없다는 점에서 es:createelasticsearchdomain에 대한 리소스 수준 권 한이 직관적이지 않은 것으로 보일 수 있지만, "Resource": "arn:aws:es:us-west-1:987654321098:domain/my-team- 56
정책 요소 참조 JSON 정책 요소 요약 name-*" 같이 와일드카드를 사용하여 간단한 도메인 명명 체계를 적 용할 수 있습니다. 물론 다음과 같이 리소스 요소의 제한을 줄여서 작업을 추가하는 것도 가능합니 다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Action": [ "es:eshttpget", "es:describeelasticsearchdomain" ], "Resource": "*" ] 작업과 리소스의 페어링에 대한 자세한 내용은 여기 표에서 Resource 요소를 참조하십시오. Condition Amazon ES는 IAM 사용 설명서의 사용 가능한 전역 조건 키에서 설명하는 대 부분의 조건을 지원합니다. 한 가지 주목할 만한 예외는 Amazon ES에서 지원 하지 않는 aws:securetransport 키입니다. IP 기반 정책 (p. 51)을 구성할 때는 다음과 같이 IP 주소 또는 CIDR 블록을 조건으로 지정합니다. "Condition": "IpAddress": "aws:sourceip": [ "192.0.2.0/32" ] 57
고급 옵션 및 API 고려 사항 JSON 정책 요소 요약 Resource Amazon ES는 다음과 같이 세 가지 기본적인 방법으로 Resource 요소를 사용 합니다. Amazon ES 자체에 적용되는 작업(es:ListDomainNames 등)이거나 모든 액세스를 허용할 때는 다음 구문을 사용합니다. "Resource": "*" 도메인 구성과 관련된 작업(es:DescribeElasticsearchDomain 등)일 때는 다음 구문을 사용합니다. "Resource": "arn:aws:es:region:aws-account-id:domain/domainname" 도메인 하위 리소스에 적용되는 작업(es:ESHttpGet 등)일 때는 다음 구문 을 사용합니다. "Resource": "arn:aws:es:region:aws-account-id:domain/domainname/*" 와일드카드를 사용할 필요는 없습니다. Amazon ES에서는 각 하위 리소스 (예: Elasticsearch 인덱스 또는 API)에 대해 다른 액세스 정책을 정의할 수 있 습니다. 예를 들어 다음과 같이 사용자의 권한을 test-index 인덱스로 제한 할 수도 있습니다. "Resource": "arn:aws:es:region:aws-account-id:domain/domainname/test-index" test-index에 대한 모든 액세스 권한 대신 검색 API만 사용하도록 정책을 제한할 수 있습니다. "Resource": "arn:aws:es:region:aws-account-id:domain/domainname/test-index/_search" 다음과 같이 개별 문서에 대한 액세스를 제어할 수도 있습니다. "Resource": "arn:aws:es:region:aws-account-id:domain/domainname/test-index/test-type/1" 기본적으로 Elasticsearch가 하위 리소스를 엔드포인트로 표현하는 경우에는 액세스를 제어할 수 있습니다. 리소스 수준 권한을 지원하는 작업에 대한 자세한 내용은 여기 표에서 Action 요소를 참조하십시오. 고급 옵션 및 API 고려 사항 Amazon ES는 몇 가지 고급 옵션이 있으며, 그 중 하나인 rest.action.multi.allow_explicit_index 옵션이 액세스 제어에 영향을 미칩니다. 기본 설정 값인 true일 때는 사용자가 일부 상황에서 하위 리소스 권한을 우회할 수 있습니다. 58
고급 옵션 및 API 고려 사항 예를 들어 다음과 같은 리소스 기반 정책이 있다고 가정하겠습니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "AWS": [ "arn:aws:iam::123456789012:user/test-user" ] "Action": [ "es:eshttp*" ], "Resource": [ "arn:aws:es:us-west-1:987654321098:domain/test-domain/test-index/*", "arn:aws:es:us-west-1:987654321098:domain/test-domain/_bulk" ] "Effect": "Allow", "Principal": "AWS": [ "arn:aws:iam::123456789012:user/test-user" ] "Action": [ "es:eshttpget" ], "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/restricted-index/*" ] 위 정책은 test-user에게 test-index 및 Elasticsearch 대량 API에 대한 모든 액세스 권한을 부여하고 있 습니다. 또한 GET에 대한 restricted-index 요청도 허용합니다. 예상할 수 있겠지만 다음 인덱싱 요청은 권한 오류로 인해 실패할 수 밖에 없습니다. PUT https://search-test-domain.us-west-1.es.amazonaws.com/restricted-index/movie/1 "title": "Your Name", "director": "Makoto Shinkai", "year": "2016" 인덱스 API와 달리 대량 API에서는 호출 한 번으로 다수의 문서를 생성하거나, 업데이트하거나, 삭제할 수 있습니다. 하지만 이러한 작업을 요청 URL이 아닌 요청 본문에 지정하는 경우가 많습니다. Amazon ES는 URL을 사용하여 도메인 하위 리소스에 대한 액세스를 제어하기 때문에 실제로 test-user는 대량 API를 사 용하여 restricted-index를 변경할 수 있습니다. 사용자에게 인덱스에 대한 POST 권한이 없더라도 다음 요청은 성공합니다. POST https://search-test-domain.us-west-1.es.amazonaws.com/_bulk "index" : "_index": "restricted-index", "_type" : "movie", "_id" : "1" "title": "Your Name", "director": "Makoto Shinkai", "year": "2016" 이러한 상황에서는 액세스 정책이 목적을 이루지 못합니다. 따라서 사용자가 액세스 제한을 우회하지 못하도 록 rest.action.multi.allow_explicit_index를 false로 변경할 수 있습니다. 이 값이 false일 경우 에는 요청 본문에서 인덱스 이름을 지정하는 대량, mget 및 msearch API 호출이 모두 중단됩니다. 다시 말해 59
액세스 정책 구성 서 _bulk 호출은 더 이상 유효하지 않지만 test-index/_bulk 호출은 유효합니다. 이 두 번째 엔드포인트 에 인덱스 이름이 포함되기 때문에 요청 본문에 이름을 지정할 필요가 없습니다. Kibana (p. 106)는 mget 및 msearch에 대한 의존도가 크기 때문에 위와 같은 변경 이후 정상적으로 실행될 가능성이 거의 없습니다. 이러한 문제를 부분적으로 해결하고 싶다면 rest.action.multi.allow_explicit_index를 true로 남겨두고 하나 이상의 mget 및 msearch API에 대한 일부 사용자 액세스를 거부하는 방법도 있습니다. 이 설정의 변경에 대한 자세한 내용은 다음(the section called 고급 옵션 구성 (p. 20))을 참조하십시오. 마찬가지로 다음 리소스 기반 정책 역시 두 가지 미묘한 문제가 있습니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "AWS": "arn:aws:iam::123456789012:user/test-user" "Action": "es:eshttp*", "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*" "Effect": "Deny", "Principal": "AWS": "arn:aws:iam::123456789012:user/test-user" "Action": "es:*", "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/restricted-index/*" ] 명시적인 거부에도 불구하고 test-user가 여전히 GET https://search-test-domain.uswest-1.es.amazonaws.com/_all/_search나 GET https://search-test-domain.uswest-1.es.amazonaws.com/*/_search 같은 호출을 통해 restricted-index의 문서에 액세스할 수 있습니다. Resource 요소가 restricted-index/*를 참조하기 때문에 test-user는 인덱스의 문서에 직접 액세 스할 수 있는 권한이 없습니다. 하지만 사용자에게 전체 인덱스를 삭제할 권한은 있습니다. 이러한 액세스 및 삭제 문제를 방지하려면 정책에 restricted-index*를 지정해야 합니다. 광범위한 액세스 허용과 집약적 액세스 거부를 혼합할 바에는 최소 권한 원칙을 따라 작업에 필요한 권한만 부여하는 것이 가장 안전한 방법입니다. 액세스 정책 구성 Amazon ES에서 리소스 및 IP 기반 정책을 생성하거나 수정하는 방법에 대한 자세한 내용은 the section called 액세스 정책 구성 (p. 18) 단원을 참조하십시오. IAM에서 자격 증명 기반 정책을 생성하거나 수정하는 방법에 대한 자세한 내용은 IAM 사용 설명서에서 IAM 정책 생성을 참조하십시오. 추가 샘플 정책 이번 단원에 다수의 샘플 정책이 포함되어 있지만 AWS 액세스 제어는 복잡한 주제이기 때문에 예제를 통해 이해의 폭을 최대한 넓혀야 합니다. 자세한 내용은 IAM 사용 설명서에서 정책 예제를 참조하십시오. 60
로깅 및 모니터링 Amazon Elasticsearch Service의 로깅 및 모니터링 Amazon Elasticsearch Service는 Amazon ES에서 사용자, 역할 또는 AWS 서비스가 수행한 작업에 대한 레 코드를 제공하는 서비스인 AWS CloudTrail과 통합됩니다. CloudTrail은 Amazon ES에 대한 모든 구성 API 호출을 이벤트로 캡처합니다. Note CloudTrail은 CreateElasticsearchDomain 및 GetUpgradeStatus 같은 구성 API (p. 181)에 대한 호출만 캡처합니다. CloudTrail은 _search 및 _bulk 같은 Elasticsearch API (p. 159)에 대한 호출은 캡처하지 않습니다. 캡처된 호출에는 Amazon ES 콘솔, AWS CLI 또는 AWS SDK로부터의 호출이 포함됩니다. 추적을 생성하면 Amazon ES 이벤트를 비롯하여 CloudTrail 이벤트를 Amazon S3 버킷으로 지속적으로 전송할 수 있습니다. 추적을 구성하지 않은 경우 이벤트 기록에서 CloudTrail 콘솔의 최신 이벤트를 볼 수도 있습니다. CloudTrail 에서 수집하는 정보를 사용하여 Amazon ES에 수행된 요청, 요청이 수행된 IP 주소, 요청을 수행한 사람, 요 청이 수행된 시간 및 추가 세부 정보를 확인할 수 있습니다. CloudTrail에 대한 자세한 내용은 AWS CloudTrail User Guide을 참조하십시오. CloudTrail의 Amazon Elasticsearch Service 정보 CloudTrail은 계정 생성 시 AWS 계정에서 활성화됩니다. Amazon ES에서 활동이 수행되면 해당 활동은 이 벤트 기록에서 다른 AWS 서비스 이벤트와 함께 CloudTrail 이벤트에 기록됩니다. AWS 계정에서 최신 이벤 트를 확인, 검색 및 다운로드할 수 있습니다. 자세한 내용은 CloudTrail 이벤트 기록에서 이벤트 보기를 참조 하십시오. Amazon ES 이벤트를 포함하여 AWS 계정에 이벤트를 지속적으로 기록하려는 경우 추적을 생성합니다. 추 적은 CloudTrail이 Amazon S3 버킷으로 로그 파일을 전송할 수 있도록 합니다. 콘솔에서 추적을 생성하면 기 본적으로 모든 AWS 리전에 추적이 적용됩니다. 추적은 AWS 파티션에 있는 모든 리전의 이벤트를 로깅하고 지정한 Amazon S3 버킷으로 로그 파일을 전송합니다. 또는 CloudTrail 로그에서 수집된 이벤트 데이터를 추 가 분석 및 처리하도록 다른 AWS 서비스를 구성할 수 있습니다. 자세한 내용은 다음 단원을 참조하세요. 추적 생성 개요 CloudTrail 지원 서비스 및 통합 CloudTrail에 대한 Amazon SNS 알림 구성 여러 리전에서 CloudTrail 로그 파일 받기 및 여러 계정에서 CloudTrail 로그 파일 받기 모든 Amazon ES 구성 API 작업은 CloudTrail에서 로깅되고 Amazon ES 구성 API 참조 (p. 181)에 기록됩 니다. 모든 이벤트 및 로그 항목에는 요청을 생성한 사용자에 대한 정보가 들어 있습니다. 자격 증명 정보를 이용하 면 다음을 쉽게 판단할 수 있습니다. 요청을 루트 또는 AWS Identity and Access Management(IAM) 사용자 자격 증명으로 했는지 여부 역할 또는 연합된 사용자에 대한 임시 보안 자격 증명을 사용하여 요청이 생성되었는지 여부 다른 AWS 서비스에서 요청했는지 여부 자세한 정보는 CloudTrail useridentity 요소를 참조하십시오. Amazon Elasticsearch Service 로그 파일 항목 이해 추적은 지정한 Amazon S3 버킷에 이벤트를 로그 파일로 제공할 수 있도록 해 주는 구성입니다. CloudTrail 로그 파일에는 하나 이상의 로그 항목이 포함됩니다. 이벤트는 어떤 소스로부터의 단일 요청을 나타내며 요 61
Amazon Elasticsearch Service 로그 파일 항목 이해 청된 작업, 작업 날짜와 시간, 요청 파라미터 등에 대한 정보가 포함되어 있습니다. CloudTrail 로그 파일은 퍼 블릭 API 호출의 주문 스택 추적이 아니므로 특정 순서로 표시되지 않습니다. 다음 예제는 CreateElasticsearchDomain 작업을 보여주는 CloudTrail 로그 항목입니다. "eventversion": "1.05", "useridentity": "type": "IAMUser", "principalid": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::123456789012:user/test-user", "accountid": "123456789012", "accesskeyid": "access-key", "username": "test-user", "sessioncontext": "attributes": "mfaauthenticated": "false", "creationdate": "2018-08-21T21:59:11Z" "invokedby": "signin.amazonaws.com" "eventtime": "2018-08-21T22:00:05Z", "eventsource": "es.amazonaws.com", "eventname": "CreateElasticsearchDomain", "awsregion": "us-west-1", "sourceipaddress": "123.123.123.123", "useragent": "signin.amazonaws.com", "requestparameters": "elasticsearchversion": "6.3", "elasticsearchclusterconfig": "instancetype": "m4.large.elasticsearch", "instancecount": 1 "snapshotoptions": "automatedsnapshotstarthour": 0 "domainname": "test-domain", "encryptionatrestoptions": "ebsoptions": "ebsenabled": true, "volumesize": 10, "volumetype": "gp2" "accesspolicies": "\"Version\":\"2012-10-17\",\"Statement\":[\"Effect\":\"Allow \",\"Principal\":\"AWS\":[\"123456789012\"]\"Action\":[\"es:*\"],\"Resource\": \"arn:aws:es:us-west-1:123456789012:domain/test-domain/*\"]", "advancedoptions": "rest.action.multi.allow_explicit_index": "true" "responseelements": "domainstatus": "created": true, "elasticsearchclusterconfig": "zoneawarenessenabled": false, "instancetype": "m4.large.elasticsearch", "dedicatedmasterenabled": false, "instancecount": 1 "cognitooptions": "enabled": false "encryptionatrestoptions": "enabled": false 62
규정 준수 확인 "advancedoptions": "rest.action.multi.allow_explicit_index": "true" "upgradeprocessing": false, "snapshotoptions": "automatedsnapshotstarthour": 0 "ebsoptions": "ebsenabled": true, "volumesize": 10, "volumetype": "gp2" "elasticsearchversion": "6.3", "processing": true, "arn": "arn:aws:es:us-west-1:123456789012:domain/test-domain", "domainid": "123456789012/test-domain", "deleted": false, "domainname": "test-domain", "accesspolicies": "\"Version\":\"2012-10-17\",\"Statement\":[\"Effect\":\"Allow\", \"Principal\":\"AWS\":\"arn:aws:iam::123456789012:root\"\"Action\":\"es:*\",\"Resource \":\"arn:aws:es:us-west-1:123456789012:domain/test-domain/*\"]" "requestid": "12345678-1234-1234-1234-987654321098", "eventid": "87654321-4321-4321-4321-987654321098", "eventtype": "AwsApiCall", "recipientaccountid": "123456789012" Amazon Elasticsearch Service 규정 준수 확인 타사 감사자는 여러 AWS 규정 준수 프로그램의 일환으로 Amazon Elasticsearch Service의 보안 및 규정 준 수를 평가합니다. 여기에는 SOC, PCI 및 HIPAA가 포함됩니다. 특정 규정 준수 프로그램 범위에 속하는 AWS 제품의 목록은 규정 준수 프로그램 제공 범위 내 AWS 제품을 참조하십시오. 일반 정보는 AWS 규정 준수 프로그램을 참조하십시오. AWS Artifact를 사용하여 타사 감사 보고서를 다운로드할 수 있습니다. 자세한 내용은 AWS 아티팩트의 보고 서 다운로드를 참조하십시오. Amazon ES 사용 시 규정 준수 책임은 데이터의 민감도, 회사의 규정 준수 목표 및 관련 법률과 규정에 따라 결정됩니다. AWS에서는 규정 준수를 지원할 다음과 같은 리소스를 제공합니다. 보안 및 규정 준수 빠른 시작 안내서 이 배포 안내서에서는 아키텍처 고려 사항에 대해 설명하고 보안 및 규정 준수에 중점을 둔 기본 AWS 환경을 배포하기 위한 단계를 제공합니다. HIPAA 보안 및 규정 준수 기술 백서 설계 이 백서는 기업에서 AWS를 사용하여 HIPAA를 준수하는 애플 리케이션을 만드는 방법을 설명합니다. AWS 규정 준수 리소스 이 워크북 및 안내서는 귀사의 산업 및 위치에 적용될 수 있습니다. AWS Config 이 AWS 제품으로 리소스 구성이 내부 관행, 업계 지침 및 규정을 준수하는 정도를 평가할 수 있습니다. AWS Security Hub 이 AWS 제품으로 보안 업계 표준 및 모범 사례 규정 준수 여부를 확인하는 데 도움이 되는 AWS 내 보안 상태에 대한 포괄적인 관점을 제공합니다. 63
복원성 Amazon Elasticsearch Service의 복원성 AWS 글로벌 인프라는 AWS 리전 및 가용 영역을 중심으로 구축됩니다. AWS 리전에서는 물리적으로 분리 되고 격리된 다수의 가용 영역을 제공하며 이러한 가용 영역은 짧은 지연 시간, 높은 처리량 및 높은 중복성 을 갖춘 네트워크에 연결되어 있습니다. 가용 영역을 사용하면 중단 없이 가용 영역 간에 자동으로 장애 조치 가 이루어지는 애플리케이션 및 데이터베이스를 설계하고 운영할 수 있습니다. 가용 영역은 기존의 단일 또 는 다중 데이터 센터 인프라보다 가용성, 내결함성, 확장성이 뛰어납니다. AWS 리전 및 가용 영역에 대한 자세한 내용은 AWS 글로벌 인프라를 참조하십시오. AWS 글로벌 인프라 뿐만 아니라 Amazon ES도 데이터 복원성과 백업 요구 사항을 지원하는 다양한 기능을 제공합니다. 다중 AZ 도메인 및 복제본 샤드 (p. 29) 자동 및 수동 스냅샷 (p. 94) Amazon Elasticsearch Service의 인프라 보안 관리형 서비스인 Amazon Elasticsearch Service는 Amazon Web Services: 보안 프로세스 개요 백서에 설명 된 AWS 글로벌 네트워크 보안 절차로 보호됩니다. AWS에서 게시한 API 호출을 사용하여 네트워크를 통해 Amazon ES 구성 API에 액세스합니다. 클라이언트 가 TLS(전송 계층 보안) 1.0 이상을 지원해야 합니다. TLS 1.2 이상을 권장합니다. 클라이언트는 Ephemeral Diffie-Hellman(DHE) 또는 Elliptic Curve Ephemeral Diffie-Hellman(ECDHE)과 같은 PFS(전달 완전 보안, Perfect Forward Secrecy)가 포함된 암호 제품군도 지원해야 합니다. Java 7 이상의 최신 시스템은 대부분 이 러한 모드를 지원합니다. 또한 구성 API에 대한 요청은 IAM 보안 주체와 관련된 보안 액세스 키 및 액세스 키 ID를 사용하여 서명해야 합니다. 또는 AWS Security Token Service(AWS STS)를 사용하여 임시 보안 자격 증명을 생성하여 요청에 서명할 수 있습니다. 도메인 구성에 따라 Elasticsearch API에 대한 요청에 서명해야 할 수도 있습니다. 자세한 내용은 the section called Amazon ES 요청 서명 및 인증 (p. 52) 단원을 참조하십시오. Amazon ES에서는 인터넷 연결 디바이스에서 요청을 수신할 수 있는 퍼블릭 액세스 도메인과 퍼블릭 인터넷 에서 격리된 VPC 액세스 도메인 (p. 126)을 지원합니다. 64
인덱싱 소개 Amazon Elasticsearch Service의 데이 터 인덱싱 소개 Elasticsearch에서는 REST API를 사용하기 때문에 문서를 인덱싱하는 방법이 무수히 많습니다. curl 같은 표준 클라이언트를 사용해도 되고, HTTP 요청을 보낼 수 있는 프로그래밍 언어를 사용해도 됩니다. 또한 Elasticsearch는 상호 작용 과정을 한층 더 간소화하기 위해 각종 프로그래밍 언어용 클라이언트도 갖추고 있 습니다. 고급 사용자는 바로 HTTP 요청에 서명 (p. 69) 단원으로 건너뛸 수 있습니다. 새 데이터가 증분식으로 유입되는 상황(예: 소기업의 고객 주문)에서는 _index API를 사용하여 데이터가 도착할 때마다 문서를 인덱싱할 수 있습니다. 데이터 흐름이 그렇게 빈번하지 않은 상황(예: 마케팅 웹 사이 트의 주간 업데이트)이라면 파일을 만들어 _bulk API로 보내는 방법을 선호할 것입니다. 문서의 수가 많은 경우, 요청을 하나로 묶고 _bulk API를 사용하는 것이 효과가 좋습니다. 그러나 문서가 막대한 양일 때는 _index API를 사용하여 개별적으로 인덱싱해야 합니다. 다른 AWS 서비스의 데이터를 통합하는 방법에 대한 자세한 내용은 Amazon ES로 스트리밍 데이터 로 드 (p. 78) 단원을 참조하십시오. 인덱싱 소개 데이터를 검색할 수 있으려면 먼저 데이터를 인덱싱해야 합니다. 인덱싱이란 검색 엔진에서 빠른 검색을 위 해 데이터를 정리하는 방법을 말합니다. 그 결과 만들어지는 구조가 바로 인덱스입니다. Elasticsearch의 기본 데이터 단위는 JSON 문서입니다. 인덱스 내에서 Elasticsearch는 고유 ID를 사용하여 각 문서를 식별합니다. _index API에 대한 요청은 다음과 같이 구성됩니다. PUT elasticsearch_domain/index/_doc/id "A JSON": "document" 한편 _bulk API 요청은 인덱스 및 ID를 대량 데이터에 지정하기 때문에 모양이 조금 다릅니다. POST elasticsearch_domain/_bulk "index": "_index" : "index", "_id" : "id" "A JSON": "document" 벌크 데이터는 특정한 형식을 준수해야 하며, 이에 따르면 마지막 행을 포함하여 모든 행 끝에 줄바꿈 문자 (\n)가 있어야 합니다. 기본 형식은 다음과 같습니다. action_and_metadata\n optional_document\n action_and_metadata\n optional_document\n... 짧은 샘플 파일은 the section called 2단계: 인덱싱을 위해 데이터 업로드 (p. 7) 단원을 참조하십시오. Elasticsearch에서는 아직 존재하지 않는 인덱스에 문서를 추가할 때 자동 인덱스 생성을 사용합니다. 이와 함께, 요청에 ID를 지정하지 않은 경우에는 자동 ID 생성을 적용합니다. 이 간단한 예제에서는 movies 인덱 스를 자동으로 생성하고, 문서를 인덱싱하고, 고유한 ID를 지정합니다. 65
인덱스에 대한 이름 지정 제약 조건 POST elasticsearch_domain/movies/_doc "title": "Spirited Away" Important 자동 ID 생성을 위해서는 PUT 대신 POST 메서드를 사용합니다. 다음과 같이 검색하여 문서가 존재하는지 확인할 수 있습니다. GET elasticsearch_domain/movies/_search?pretty 응답에는 다음이 포함되어야 합니다. "hits" : "total" : 1, "max_score" : 1.0, "hits" : [ "_index" : "movies", "_type" : "_doc", "_id" : "AV4WaTnYxBoJaZkSFeX9", "_score" : 1.0, "_source" : "title" : "Spirited Away" ] 자동 ID 생성에는 명확한 단점이 있습니다. 즉, 인덱싱 코드가 문서 ID를 지정하지 않았으므로 나중에 문서를 쉽게 업데이트할 수 없습니다. 7의 ID를 지정하려면 다음 요청을 사용하십시오. PUT elasticsearch_domain/movies/_doc/7 "title": "Spirited Away" 이전 버전의 Elasticsearch는 _doc,를 요구하지 않고 문서 유형에 대해 임의의 이름을 지원합니다. 일부 이 전 버전은 인덱스당 둘 이상의 문서 유형을 지원합니다. 어떤 Elasticsearch 버전을 선택하든 모든 인덱스에 단일 유형인 _doc를 사용하는 것이 좋습니다. 새 인덱스의 경우 자체 호스팅된 Elasticsearch 7.x의 기본 샤드 수는 1입니다. Amazon ES 7.x 도메인은 이 전 기본값인 5를 유지합니다. 샤드 및 복제본에 대해 기본값 이외의 설정을 지정하려면 문서를 추가하기 전 에 인덱스를 생성합니다. PUT elasticsearch_domain/more-movies "settings": "number_of_shards": 6, "number_of_replicas": 2 Note 샘플 코드에 대한 내용은 HTTP 요청에 서명 (p. 69) 단원을 참조하십시오. 인덱스에 대한 이름 지정 제약 조건 Elasticsearch 인덱스에는 다음과 같은 이름 지정 제약 조건이 있습니다. 모든 문자는 소문자여야 합니다. 66
응답 크기 감소 인덱스 이름은 _ 또는 -로 시작할 수 없습니다. 인덱스 이름에는 공백, 쉼표, :, ", *, +, /, \,,?, #, > 또는 <가 포함될 수 없습니다. 인덱스 유형 또는 문서 ID 이름에는 민감한 정보를 포함하지 마십시오. Elasticsearch은 URI(Uniform Resource Identifier)에 이러한 이름을 사용합니다. 서버 및 애플리케이션에서 흔히 HTTP 요청을 로깅하는 데, 그럴 경우 URI에 민감한 정보가 포함된다면 불필요한 데이터 노출이 발생할 수 있습니다. 2018-10-03T23:39:43 198.51.100.14 200 "GET https://elasticsearch_domain/dr-jane-doe/flupatients-2018/202-555-0100/ HTTP/1.1" 연결된 JSON 문서를 볼 수 있는 권한 (p. 48)이 없는 경우에도 이 가짜 로그 줄을 통해, Doe 박사의 환자 중 전화 번호가 202-555-0100인 환자가 2018년에 독감에 걸린 적이 있음을 유추할 수 있습니다. 응답 크기 감소 _index 및 _bulk API의 응답에는 많은 정보가 포함되어 있습니다. 이 정보는 요청을 해결하거나 재시도 로 직을 구현하는 데 유용할 수 있지만 상당한 대역폭을 사용할 수 있습니다. 이 예에서 32바이트 문서를 인덱싱 하면 339바이트의 응답이 발생합니다(헤더 포함). PUT elasticsearch_domain/more-movies/_doc/1 "title": "Back to the Future" 응답 "_index": "more-movies", "_type": "_doc", "_id": "1", "_version": 4, "result": "updated", "_shards": "total": 2, "successful": 2, "failed": 0 "_seq_no": 3, "_primary_term": 1 이 응답 크기는 최소한으로 보일 수도 있지만, 매일 문서 1,000,000개를 인덱싱하면(초당 약 11.5개의 문서) 응답당 339바이트로 매월 10.17GB의 다운로드 트래픽을 처리합니다. 데이터 전송 비용에 대한 우려가 있는 경우 filter_path 파라미터를 사용하여 Elasticsearch 응답의 크기 를 줄입니다. 하지만 실패한 요청을 식별하거나 재시도하는 데 필요한 필드를 필터링하지 않도록 주의하십시 오. 이러한 필드는 클라이언트에 따라 다릅니다. filter_path 파라미터는 모든 Elasticsearch REST API에 대해 작동하지만 _index 및 _bulk API와 같이 자주 호출하는 API에 특히 유용합니다. PUT elasticsearch_domain/more-movies/_doc/1?filter_path=result,_shards.total "title": "Back to the Future" 응답 "result": "updated", 67
응답 크기 감소 "_shards": "total": 2 필드를 포함하는 대신 - 접두사가 있는 필드를 제외할 수 있습니다. filter_path는 와일드카드도 지원합 니다. POST elasticsearch_domain/_bulk?filter_path=-took,-items.index._* "index": "_index": "more-movies", "_id": "1" "title": "Back to the Future" "index": "_index": "more-movies", "_id": "2" "title": "Spirited Away" 응답 "errors": false, "items": [ "index": "result": "updated", "status": 200 "index": "result": "updated", "status": 200 ] 68
Java Amazon Elasticsearch Service에 대한 HTTP 요청 서명 이 장에는 Elasticsearch 클라이언트 및 기타 일반 라이브러리를 사용하여, 서명된 HTTP 요청을 Amazon Elasticsearch Service에 보내는 방법에 대한 예제가 나와 있습니다. 이러한 코드 샘플은 _index, _bulk 및 _snapshot 등 Elasticsearch API와 상호 작용하기 위한 것입니다. 도메인 액세스 정책에 IAM 사용자 또는 역할이 포함된 경우, Elasticsearch API에 대한 요청에 서명해야 합니다. Important Amazon ES 도메인의 생성, 업데이트, 삭제와 같은 작업을 비롯하여 구성 API와 상호 작용하는 방 법에 대한 예제는 AWS SDK 사용 (p. 177) 단원을 참조하십시오. 주제 Java (p. 69) Python (p. 71) Ruby (p. 73) Node (p. 75) Go (p. 76) Java 서명이 포함된 요청을 가장 쉽게 전송하려면 AWS Request Signing Interceptor를 사용하십시오. 리포지토리 에 시작하는 데 도움이 되는 몇 가지 샘플이 포함되어 있습니다. 또는 GitHub에서 Amazon ES용 샘플 프로젝 트를 다운로드할 수 있습니다. 다음 예는 Elasticsearch 하위 수준 Java REST 클라이언트를 사용하여 스냅샷 리포지토리 등록과 문서 인덱 싱 두 가지 무관한 작업을 수행합니다. region 및 host의 값을 입력해야 합니다. import import import import import import import import import import import import import org.apache.http.httpentity; org.apache.http.httphost; org.apache.http.httprequestinterceptor; org.apache.http.entity.contenttype; org.apache.http.nio.entity.nstringentity; org.elasticsearch.client.request; org.elasticsearch.client.response; org.elasticsearch.client.restclient; com.amazonaws.auth.aws4signer; com.amazonaws.auth.awscredentialsprovider; com.amazonaws.auth.defaultawscredentialsproviderchain; com.amazonaws.http.awsrequestsigningapacheinterceptor; java.io.ioexception; public class AmazonElasticsearchServiceSample private static String servicename = "es"; private static String region = "us-west-1"; private static String aesendpoint = "https://domain.us-west-1.es.amazonaws.com"; private static String payload = " \"type\": \"s3\", \"settings\": \"bucket\": \"your-bucket\", \"region\": \"us-west-1\", \"role_arn\": \"arn:aws:iam::123456789012:role/theservicerole\" "; 69
Java private static String snapshotpath = "/_snapshot/my-snapshot-repo"; private static String sampledocument = "" + "\"title\":\"walk the Line\"," + "\"director\":\"james Mangold\"," + "\"year\":\"2005\""; private static String indexingpath = "/my-index/_doc"; static final AWSCredentialsProvider credentialsprovider = new DefaultAWSCredentialsProviderChain(); public static void main(string[] args) throws IOException RestClient esclient = esclient(servicename, region); // Register a snapshot repository HttpEntity entity = new NStringEntity(payload, ContentType.APPLICATION_JSON); Request request = new Request("PUT", snapshotpath); request.setentity(entity); // request.addparameter(name, value); // optional parameters Response response = esclient.performrequest(request); System.out.println(response.toString()); // Index a document entity = new NStringEntity(sampleDocument, ContentType.APPLICATION_JSON); String id = "1"; request = new Request("PUT", indexingpath + "/" + id); request.setentity(entity); // Using a String instead of an HttpEntity sets Content-Type to application/json automatically. // request.setjsonentity(sampledocument); response = esclient.performrequest(request); System.out.println(response.toString()); // Adds the interceptor to the ES REST client public static RestClient esclient(string servicename, String region) AWS4Signer signer = new AWS4Signer(); signer.setservicename(servicename); signer.setregionname(region); HttpRequestInterceptor interceptor = new AWSRequestSigningApacheInterceptor(serviceName, signer, credentialsprovider); return RestClient.builder(HttpHost.create(aesEndpoint)).setHttpClientConfigCallback(hacb -> hacb.addinterceptorlast(interceptor)).build(); 동일한 기능 및 샘플 코드를 대부분 제공하는 상위 수준의 REST 클라이언트를 선호하는 경우 AWS Request Signing Interceptor를 사용하는 다음 샘플을 실행해 봅니다. import import import import import import import import import import import import import import org.apache.http.httphost; org.apache.http.httprequestinterceptor; org.elasticsearch.action.index.indexrequest; org.elasticsearch.action.index.indexresponse; org.elasticsearch.client.requestoptions; org.elasticsearch.client.restclient; org.elasticsearch.client.resthighlevelclient; com.amazonaws.auth.aws4signer; com.amazonaws.auth.awscredentialsprovider; com.amazonaws.auth.defaultawscredentialsproviderchain; com.amazonaws.http.awsrequestsigningapacheinterceptor; java.io.ioexception; java.util.hashmap; java.util.map; 70
Python public class AmazonElasticsearchServiceSample private static String private static String private static String west-1.es.amazonaws.com private static String private static String private static String servicename = "es"; region = "us-west-1"; aesendpoint = ""; // e.g. https://search-mydomain.usindex = "my-index"; type = "_doc"; id = "1"; static final AWSCredentialsProvider credentialsprovider = new DefaultAWSCredentialsProviderChain(); public static void main(string[] args) throws IOException RestHighLevelClient esclient = esclient(servicename, region); // Create the document as a hash map Map<String, Object> document = new HashMap<>(); document.put("title", "Walk the Line"); document.put("director", "James Mangold"); document.put("year", "2005"); // Form the indexing request, send it, and print the response IndexRequest request = new IndexRequest(index, type, id).source(document); IndexResponse response = esclient.index(request, RequestOptions.DEFAULT); System.out.println(response.toString()); // Adds the interceptor to the ES REST client public static RestHighLevelClient esclient(string servicename, String region) AWS4Signer signer = new AWS4Signer(); signer.setservicename(servicename); signer.setregionname(region); HttpRequestInterceptor interceptor = new AWSRequestSigningApacheInterceptor(serviceName, signer, credentialsprovider); return new RestHighLevelClient(RestClient.builder(HttpHost.create(aesEndpoint)).setHttpClientConfigCallback(hacb -> hacb.addinterceptorlast(interceptor))); Tip 양쪽 서명된 샘플에서 기본 자격 증명 체인을 사용합니다. AWS CLI를 사용하는 aws configure를 실행하여 자격 증명을 설정합니다. Python pip를 사용하여 Python용 Elasticsearch 클라이언트인 elasticsearch-py를 설치할 수 있습니다. 클라이언트 대신 요청을 선호할 수 있습니다. requests-aws4auth 및 Python용 SDK(Boto3) 패키지는 인증 프로세스를 간 소화해 주지만 반드시 필요한 것은 아닙니다. 터미널에서 다음 명령을 실행합니다. pip pip pip pip install install install install boto3 elasticsearch requests requests-aws4auth 아래의 샘플 코드는 지정된 Amazon ES 도메인에 대해 보안 연결을 설정하고 _index API를 사용하여 문서 하나를 인덱싱합니다. region 및 host의 값을 입력해야 합니다. 71
Python from elasticsearch import Elasticsearch, RequestsHttpConnection from requests_aws4auth import AWS4Auth import boto3 host = '' # For example, my-test-domain.us-east-1.es.amazonaws.com region = '' # e.g. us-west-1 service = 'es' credentials = boto3.session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service) es = Elasticsearch( hosts = ['host': host, 'port': 443], http_auth = awsauth, use_ssl = True, verify_certs = True, connection_class = RequestsHttpConnection ) document = "title": "Moneyball", "director": "Bennett Miller", "year": "2011" es.index(index="movies", doc_type="_doc", id="5", body=document) print(es.get(index="movies", doc_type="_doc", id="5")) elasticsearch-py를 사용하지 않으려면 표준 HTTP 요청을 생성하면 됩니다. 이 샘플에서는 샤드 7개 및 복제 본 2개를 포함하는 새 인덱스를 생성합니다. from requests_aws4auth import AWS4Auth import boto3 import requests host = '' # The domain with https:// and trailing slash. For example, https://my-testdomain.us-east-1.es.amazonaws.com/ path = 'my-index' # the Elasticsearch API endpoint region = '' # For example, us-west-1 service = 'es' credentials = boto3.session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service) url = host + path # The JSON body to accompany the request (if necessary) payload = "settings" : "number_of_shards" : 7, "number_of_replicas" : 2 r = requests.put(url, auth=awsauth, json=payload) # requests.get, post, and delete have similar syntax print(r.text) 이 다음 예제에서는 Beautiful Soup 라이브러리를 사용하여 HTML 파일의 로컬 디렉터리에서 대량 파일을 빌 드하는 데 도움을 줍니다. 첫 번째 예제와 동일한 클라이언트를 사용하여 해당 파일을 인덱싱을 위해 _bulk API에 전송할 수 있습니다. 이 코드를 웹 사이트에 검색 기능을 추가하기 위한 기반으로 사용할 수 있습니다. 72
Ruby from bs4 import BeautifulSoup from elasticsearch import Elasticsearch, RequestsHttpConnection from requests_aws4auth import AWS4Auth import boto3 import glob import json bulk_file = '' id = 1 # This loop iterates through all HTML files in the current directory and # indexes two things: the contents of the first h1 tag and all other text. for html_file in glob.glob('*.htm'): with open(html_file) as f: soup = BeautifulSoup(f, 'html.parser') title = soup.h1.string body = soup.get_text(" ", strip=true) # If get_text() is too noisy, you can do further processing on the string. index = 'title': title, 'body': body, 'link': html_file # If running this script on a website, you probably need to prepend the URL and path to html_file. # The action_and_metadata portion of the bulk file bulk_file += ' "index" : "_index" : "site", "_type" : "_doc", "_id" : "' + str(id) + '" \n' # The optional_document portion of the bulk file bulk_file += json.dumps(index) + '\n' id += 1 host = '' # For example, my-test-domain.us-east-1.es.amazonaws.com region = '' # e.g. us-west-1 service = 'es' credentials = boto3.session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service) es = Elasticsearch( hosts = ['host': host, 'port': 443], http_auth = awsauth, use_ssl = True, verify_certs = True, connection_class = RequestsHttpConnection ) es.bulk(bulk_file) print(es.search(q='some test query')) Ruby 첫 번째 예제는 Elasticsearch Ruby 클라이언트와 Faraday 미들웨어를 사용하여 요청 서명을 수행합니다. 터 미널에서 다음 명령을 실행합니다. gem install elasticsearch gem install faraday_middleware-aws-sigv4 73
Ruby 이 샘플 코드는 새 Elasticsearch 클라이언트를 생성하고, Faraday 미들웨어를 구성해 요청을 서명하며, 문서 하나를 인덱싱합니다. host 및 region의 값을 입력해야 합니다. require 'elasticsearch' require 'faraday_middleware/aws_sigv4' host = '' # e.g. https://my-domain.region.es.amazonaws.com index = 'ruby-index' type = '_doc' id = '1' document = year: 2007, title: '5 Centimeters per Second', info: plot: 'Told in three interconnected segments, we follow a young man named Takaki through his life.', rating: 7.7 region = '' # e.g. us-west-1 service = 'es' client = Elasticsearch::Client.new(url: host) do f f.request :aws_sigv4, service: service, region: region, access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], session_token: ENV['AWS_SESSION_TOKEN'] # optional end puts client.index index: index, type: type, id: id, body: document 자격 증명이 효과가 없다면, 다음 명령을 이용해 터미널에서 내보내십시오. export AWS_ACCESS_KEY_ID="your-access-key" export AWS_SECRET_ACCESS_KEY="your-secret-key" export AWS_SESSION_TOKEN=""your-session-token" 다음 예제는 Ruby용 AWS SDK와 표준 Ruby 라이브러리를 이용해 서명 HTTP 요청을 전송합니다. 첫 번째 예제처럼, 이 예제에서도 문서 하나를 인덱싱합니다. 호스트와 리전의 값을 입력해야 합니다. require 'aws-sdk-elasticsearchservice' host = '' # e.g. https://my-domain.region.es.amazonaws.com index = 'ruby-index' type = '_doc' id = '2' document = year: 2007, title: '5 Centimeters per Second', info: plot: 'Told in three interconnected segments, we follow a young man named Takaki through his life.', rating: 7.7 service = 'es' region = '' # e.g. us-west-1 74
Node signer = Aws::Sigv4::Signer.new( service: service, region: region, access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], session_token: ENV['AWS_SESSION_TOKEN'] ) signature = signer.sign_request( http_method: 'PUT', url: host + '/' + index + '/' + type + '/' + id, body: document.to_json ) uri = URI(host + '/' + index + '/' + type + '/' + id) Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do http request = Net::HTTP::Put.new uri request.body = document.to_json request['host'] = signature.headers['host'] request['x-amz-date'] = signature.headers['x-amz-date'] request['x-amz-security-token'] = signature.headers['x-amz-security-token'] request['x-amz-content-sha256']= signature.headers['x-amz-content-sha256'] request['authorization'] = signature.headers['authorization'] request['content-type'] = 'application/json' response = http.request request puts response.body end Node 이 예제에서는 Node.js의 JavaScript용 SDK를 사용합니다. 터미널에서 다음 명령을 실행합니다. npm install aws-sdk 이 샘플 코드는 문서 하나를 인덱싱합니다. region 및 domain의 값을 입력해야 합니다. var AWS = require('aws-sdk'); var region = ''; // e.g. us-west-1 var domain = ''; // e.g. search-domain.region.es.amazonaws.com var index = 'node-test'; var type = '_doc'; var id = '1'; var json = "title": "Moneyball", "director": "Bennett Miller", "year": "2011" indexdocument(json); function indexdocument(document) var endpoint = new AWS.Endpoint(domain); var request = new AWS.HttpRequest(endpoint, region); request.method = 'PUT'; request.path += index + '/' + type + '/' + id; request.body = JSON.stringify(document); request.headers['host'] = domain; request.headers['content-type'] = 'application/json'; 75
Go // Content-Length is only needed for DELETE requests that include a request // body, but including it for all requests doesn't seem to hurt anything. request.headers["content-length"] = request.body.length; var credentials = new AWS.EnvironmentCredentials('AWS'); var signer = new AWS.Signers.V4(request, 'es'); signer.addauthorization(credentials, new Date()); var client = new AWS.HttpClient(); client.handlerequest(request, null, function(response) console.log(response.statuscode + ' ' + response.statusmessage); var responsebody = ''; response.on('data', function (chunk) responsebody += chunk; ); response.on('end', function (chunk) console.log('response body: ' + responsebody); ); function(error) console.log('error: ' + error); ); 자격 증명이 효과가 없다면, 다음 명령을 이용해 터미널에서 내보내십시오. export AWS_ACCESS_KEY_ID="your-access-key" export AWS_SECRET_ACCESS_KEY="your-secret-key" export AWS_SESSION_TOKEN=""your-session-token" Go 이 예제에서는 Go용 AWS SDK을 사용하고 단일 문서를 인덱싱합니다. domain 및 region의 값을 입력해 야 합니다. package main import ( "fmt" "net/http" "strings" "time" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/signer/v4" ) func main() // Basic information domain := "" // e.g. index := "my-index" id := "1" endpoint := domain + region := "" // e.g. service := "es" for the Amazon Elasticsearch Service domain https://my-domain.region.es.amazonaws.com "/" + index + "/" + "_doc" + "/" + id us-east-1 // Sample JSON document to be included as the request body json := ` "title": "Thor: Ragnarok", "director": "Taika Waititi", "year": "2017" ` body := strings.newreader(json) // Get credentials from environment variables and create the AWS Signature Version 4 signer 76
Go credentials := credentials.newenvcredentials() signer := v4.newsigner(credentials) // An HTTP client for sending the request client := &http.client // Form the HTTP request req, err := http.newrequest(http.methodput, endpoint, body) if err!= nil fmt.print(err) // You can probably infer Content-Type programmatically, but here, we just say that it's JSON req.header.add("content-type", "application/json") // Sign the request, send it, and print the response signer.sign(req, body, service, region, time.now()) resp, err := client.do(req) if err!= nil fmt.print(err) fmt.print(resp.status + "\n") 자격 증명이 효과가 없다면, 다음 명령을 이용해 터미널에서 내보내십시오. export AWS_ACCESS_KEY_ID="your-access-key" export AWS_SECRET_ACCESS_KEY="your-secret-key" export AWS_SESSION_TOKEN=""your-session-token" 77
Amazon S3에서 Amazon ES로 스트리밍 데이터 로드 Amazon Elasticsearch Service로 스트 리밍 데이터 로드 다양한 소스에서 스트리밍 데이터를 Amazon Elasticsearch Service 도메인으로 로드할 수 있습니다. Amazon Kinesis Data Firehose 및 Amazon CloudWatch Logs 같은 일부 소스는 Amazon ES를 기본으로 지 원합니다. Amazon S3, Amazon Kinesis Data Streams, Amazon DynamoDB 같은 소스는 AWS Lambda 함 수를 이벤트 핸들러로 사용합니다. Lambda 함수는 새 데이터를 처리한 다음 도메인으로 스트리밍하여 응답 합니다. Note Lambda는 다양한 주요 프로그래밍 언어를 지원하며, 대부분의 AWS 리전에서 사용할 수 있습니다. 자세한 내용은 AWS Lambda Developer Guide의 Lambda 함수 구축과 AWS General Reference의 AWS Lambda 리전을 참조하십시오. 주제 Amazon S3에서 Amazon ES로 스트리밍 데이터 로드 (p. 78) Amazon Kinesis Data Streams에서 Amazon ES로 스트리밍 데이터 로드 (p. 83) Amazon DynamoDB에서 Amazon ES로 스트리밍 데이터 로드 (p. 85) Amazon Kinesis Data Firehose에서 Amazon ES로 스트리밍 데이터 로드 (p. 88) Amazon CloudWatch에서 Amazon ES로 스트리밍 데이터 로드 (p. 88) AWS IoT에서 Amazon ES로 데이터 로드 (p. 88) Amazon S3에서 Amazon ES로 스트리밍 데이터 로 드 Lambda를 이용해 Amazon S3에서 Amazon ES 도메인으로 데이터를 전송할 수 있습니다. S3 버킷에 도착한 새 데이터는 Lambda로 이벤트 알림을 트리거한 다음 사용자 지정 코드를 실행해 인덱싱합니다. 이러한 방식의 데이터 스트리밍은 대단히 유연합니다. 객체 메타데이터를 인덱싱할 수도 있고, 객체가 일반 텍스트라면 객체 본문의 일부 요소를 구문 분석하고 인덱싱할 수도 있습니다. 이 단원에는 정규식을 이용해 로그 파일을 구문 분석하고 매치를 인덱싱하는 단순한 Python 샘플 코드가 나와 있습니다. Tip Node.js에서 사용하는 더 강력한 코드를 알고 싶다면 GitHub의 amazon-elasticsearch-lambdasamples를 참조하십시오. 일부 Lambda 블루프린트에도 유용한 구문 분석 예제가 나와 있습니다. 사전 조건 계속하려면 먼저 다음 리소스를 확보해야 합니다. 사전 조건 설명 Amazon S3 버킷 자세한 내용은 Amazon Simple Storage Service 시작 안내서의 버킷 생성을 참조하십시오. 버킷은 Amazon ES 도메인과 같은 리전에 있어야 합니다. Amazon ES 도메인 Lambda 함수로 처리한 후의 데이터 대상 주소입니다. 자세한 내용은 Amazon ES 도메인 생성 (p. 10)을 참조하십시오. 78
Lambda 배포 패키지 만들기 Lambda 배포 패키지 만들기 배포 패키지는 코드와 종속 프로그램이 포함된 ZIP 또는 JAR 파일로 구성됩니다. 이 단원에는 Python 샘플 코드가 나와 있습니다. 다른 프로그래밍 언어는 AWS Lambda Developer Guide의 배포 패키지 생성을 참조 하십시오. 1. 디렉터리를 생성합니다. 이 샘플에서는 s3-to-es 이름을 사용합니다. 2. sample.py라는 디렉터리에서 파일을 생성합니다. import boto3 import re import requests from requests_aws4auth import AWS4Auth region = '' # e.g. us-west-1 service = 'es' credentials = boto3.session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) host = '' # the Amazon ES domain, including https:// index = 'lambda-s3-index' type = 'lambda-type' url = host + '/' + index + '/' + type headers = "Content-Type": "application/json" s3 = boto3.client('s3') # Regular expressions used to parse some simple log lines ip_pattern = re.compile('(\d+\.\d+\.\d+\.\d+)') time_pattern = re.compile('\[(\d+\/\w\w\w\/\d\d\d\d:\d\d:\d\d:\d\d\s-\d\d\d\d)\]') message_pattern = re.compile('\"(.+)\"') # Lambda execution starts here def handler(event, context): for record in event['records']: # Get the bucket name and key for the new file bucket = record['s3']['bucket']['name'] key = record['s3']['object']['key'] # Get, read, and split the file into lines obj = s3.get_object(bucket=bucket, Key=key) body = obj['body'].read() lines = body.splitlines() # Match the regular expressions to each line and index the JSON for line in lines: ip = ip_pattern.search(line).group(1) timestamp = time_pattern.search(line).group(1) message = message_pattern.search(line).group(1) document = "ip": ip, "timestamp": timestamp, "message": message r = requests.post(url, auth=awsauth, json=document, headers=headers) region과 host의 변수를 편집합니다. 3. 종속 항목을 설치합니다: cd s3-to-es pip install requests -t. 79
Lambda 함수 생성 pip install requests_aws4auth -t. 모든 Lambda 실행 환경에는 Boto3가 설치돼 있으며, 따라서 배포 패키지에 이를 포함할 필요가 없습니 다. Tip macos를 사용한다면 이러한 명령어가 정상적으로 작동하지 않을 수도 있습니다. 차선책으로 setup.cfg라는 파일을 s3-to-es 디렉터리에 추가하십시오. [install] prefix= 4. 애플리케이션 코드와 종속 항목을 패키지화합니다. zip -r lambda.zip * Lambda 함수 생성 배포 패키지를 만든 뒤에는 Lambda 함수를 생성할 수 있습니다. 함수를 만들 때는 이름, 실행 시간(예: Python 2.7)과 IAM 역할을 선택해야 합니다. IAM 역할은 함수에 대한 권한을 정의합니다. 자세한 내용은 AWS Lambda Developer Guide의 단순 Lambda 함수 생성을 참조하십시오. 이 예에서는 콘솔을 사용하는 것으로 가정합니다. 다음 스크린샷처럼 Python 2.7과 S3 읽기 권한 및 Amazon ES 쓰기 권한이 있는 역할을 선택합니다. 80
Lambda 함수 생성 함수를 생성했으면 이제 트리거를 추가해야 합니다. 이 예에서는 로그 파일이 S3 버킷에 도착할 때마다 코드 를 실행하려 합니다. 1. S3를 선택합니다. 2. 버킷을 선택합니다. 3. 이벤트 유형에서 PUT을 선택합니다. 4. 접두사에는 logs/를 입력합니다. 5. 필터 패턴에.log를 입력합니다. 6. 트리거 활성화를 선택합니다. 7. [추가]를 선택합니다. 81
Lambda 함수 테스트 마지막으로, 배포 패키지를 업로드합니다. 1. 핸들러에서 sample.handler를 입력합니다. 이 설정은 트리거 후 실행해야 하는 파일(sample.py)과 메서드(handler)를 Lambda에게 알려 줍니다. 2. 코드 항목 유형에서 ZIP 파일 업로드를 선택하고, 지시에 따라 배포 패키지를 업로드합니다. 3. Save를 선택합니다. 이제 사용자는 완벽한 리소스 모음, 즉 로그 파일용 버킷, 로그 파일이 버킷에 추가될 때마다 실행되는 함수, 구문 분석과 인덱싱을 수행하는 코드, 검색과 시각화를 위한 Amazon ES 도메인을 모두 확보하게 됩니다. Lambda 함수 테스트 함수를 만들었으면 이제 Amazon S3 버킷에 파일을 업로드해 함수를 테스트할 수 있습니다. 다음 샘플 로그 행을 이용해 sample.log라는 파일을 만드십시오. 12.345.678.90 - [10/Oct/2000:13:55:36-0700] "PUT /some-file.jpg" 12.345.678.91 - [10/Oct/2000:14:56:14-0700] "GET /some-file.jpg" 파일을 S3 버킷의 logs 폴더에 업로드합니다. 지침은 Amazon Simple Storage Service 시작 안내서의 버킷 에 객체 추가를 참조하십시오. 그런 다음 Amazon ES 콘솔이나 Kibana를 이용해 lambda-s3-index 인덱스에 문서가 두 개 있는지 확인 하십시오. 표준 검색 요청을 할 수도 있습니다. GET https://es-domain/lambda-index/_search?pretty "hits" : "total" : 2, "max_score" : 1.0, "hits" : [ "_index" : "lambda-s3-index", "_type" : "lambda-type", "_id" : "vtyxawibjwv_ttkeusdg", "_score" : 1.0, "_source" : "ip" : "12.345.678.91", "message" : "GET /some-file.jpg", "timestamp" : "10/Oct/2000:14:56:14-0700" "_index" : "lambda-s3-index", "_type" : "lambda-type", "_id" : "vjymawibjwv_ttkeucab", "_score" : 1.0, "_source" : "ip" : "12.345.678.90", "message" : "PUT /some-file.jpg", "timestamp" : "10/Oct/2000:13:55:36-0700" ] 82
Amazon Kinesis Data Streams에서 Amazon ES로 스트리밍 데이터 로드 Amazon Kinesis Data Streams에서 Amazon ES로 스트리밍 데이터 로드 Kinesis Data Streams에서 Amazon ES로 스트리밍 데이터를 로드할 수 있습니다. 데이터 스트림에 도착한 새 데이터는 Lambda으로 이벤트 알림을 트리거한 다음 사용자 지정 코드를 실행해 인덱싱합니다. 이 단원 에는 단순한 Python 샘플 코드가 있습니다. Node.js에서 사용하는 더 강력한 코드를 알고 싶다면 GitHub의 amazon-elasticsearch-lambda-samples를 참조하십시오. 사전 조건 계속하려면 먼저 다음 리소스를 확보해야 합니다. 사전 조건 설명 Amazon Kinesis 데이터 스트림 Lambda 함수의 이벤트 소스. 자세한 내용은 Kinesis 데이터 스트림을 참조하 십시오. Amazon ES 도메인 Lambda 함수로 처리한 후의 데이터 대상 주소입니다. 자세한 내용은 Amazon ES 도메인 생성 (p. 10)을 참조하십시오. IAM 역할 이 역할에는 다음과 같은 기본 Amazon ES, Kinesis 및 Lambda 권한이 있어야 합니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Action": [ "es:eshttppost", "es:eshttpput", "logs:createloggroup", "logs:createlogstream", "logs:putlogevents", "kinesis:getsharditerator", "kinesis:getrecords", "kinesis:describestream", "kinesis:liststreams" ], "Resource": "*" ] 역할은 다음과 같은 신뢰 관계를 맺고 있어야 합니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "Service": "lambda.amazonaws.com" "Action": "sts:assumerole" ] 83
Lambda 함수 생성 사전 조건 설명 자세한 내용은 IAM 사용 설명서의 IAM 역할 생성을 참조하십시오. Lambda 함수 생성 the section called Lambda 배포 패키지 만들기 (p. 79)의 지침을 따르되, kinesis-to-es라는 디렉터 리를 만들고 sample.py에는 다음과 같은 코드를 사용하십시오. import base64 import boto3 import json import requests from requests_aws4auth import AWS4Auth region = '' # e.g. us-west-1 service = 'es' credentials = boto3.session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) host = '' # the Amazon ES domain, including https:// index = 'lambda-kine-index' type = 'lambda-kine-type' url = host + '/' + index + '/' + type + '/' headers = "Content-Type": "application/json" def handler(event, context): count = 0 for record in event['records']: id = record['eventid'] timestamp = record['kinesis']['approximatearrivaltimestamp'] # Kinesis data is base64-encoded, so decode here message = base64.b64decode(record['kinesis']['data']) # Create the JSON document document = "id": id, "timestamp": timestamp, "message": message # Index the document r = requests.put(url + id, auth=awsauth, json=document, headers=headers) count += 1 return 'Processed ' + str(count) + ' items.' region과 host의 변수를 편집합니다. 다음과 같은 명령을 사용하면 종속 프로그램을 설치할 수 있습니다. cd kinesis-to-es pip install requests -t. pip install requests_aws4auth -t. 이제 the section called Lambda 함수 생성 (p. 80) 지침을 따르되, the section called 사전 조 건 (p. 83)에서 IAM 역할을 지정하고 트리거에는 다음 설정을 지정하십시오. Kinesis 스트림: 사용자의 Kinesis 스트림 배치 크기: 100 84
Lambda 함수 테스트 시작 위치: 수평 트리밍 자세한 내용은 Amazon Kinesis Data Streams 개발자 안내서의 Amazon Kinesis Data Streams 작업을 참조 하십시오. 이제 사용자는 완벽한 리소스 모음, 즉 Kinesis 데이터 스트림, 스트림에 새 데이터가 들어오면 실행되어 해 당 데이터를 인덱싱하는 함수, 검색과 시각화를 위한 Amazon ES 도메인을 모두 확보하게 됩니다. Lambda 함수 테스트 함수를 만든 뒤에는 AWS CLI에서 데이터 스트림에 새 레코드를 추가해 함수를 테스트할 수 있습니다. aws kinesis put-record --stream-name es-test --data "My test data." --partition-key partitionkey1 --region us-west-1 그런 다음 Amazon ES 콘솔이나 Kibana를 이용해 lambda-kine-index에 문서가 있는지 확인하십시오. 다음 요청을 사용할 수도 있습니다. GET https://es-domain/lambda-kine-index/_search "hits" : [ "_index": "lambda-kine-index", "_type": "lambda-kine-type", "_id": "shardid-000000000000:49583511615762699495012960821421456686529436680496087042", "_score": 1, "_source": "timestamp": 1523648740.051, "message": "My test data.", "id": "shardid-000000000000:49583511615762699495012960821421456686529436680496087042" ] Amazon DynamoDB에서 Amazon ES로 스트리밍 데이터 로드 AWS Lambda를 이용해 Amazon DynamoDB에서 Amazon ES 도메인으로 데이터를 전송할 수 있습니다. 데 이터베이스 테이블에 도착한 새 데이터는 Lambda로 이벤트 알림을 트리거한 다음 사용자 지정 코드를 실행 해 인덱싱합니다. 사전 조건 계속하려면 먼저 다음 리소스를 확보해야 합니다. 사전 조건 설명 DynamoDB 테이블 이 테이블에는 소스 데이터가 있습니다. 자세한 내용은 Amazon DynamoDB 개발자 안내서의 테이블 기본 작업을 참조하십시오. 85
Lambda 함수 생성 사전 조건 설명 테이블은 Amazon ES 도메인과 같은 리전에 위치하고, 새 이미지로 설정된 스 트림이 있어야 합니다. 자세한 내용은 스트림 활성화를 참조하십시오. Amazon ES 도메인 Lambda 함수로 처리한 후의 데이터 대상 주소입니다. 자세한 내용은 Amazon ES 도메인 생성 (p. 10)을 참조하십시오. IAM 역할 이 역할에는 다음과 같은 기본 Amazon ES, DynamoDB 및 Lambda 실행 권한 이 있어야 합니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Action": [ "es:eshttppost", "es:eshttpput", "dynamodb:describestream", "dynamodb:getrecords", "dynamodb:getsharditerator", "dynamodb:liststreams", "logs:createloggroup", "logs:createlogstream", "logs:putlogevents" ], "Resource": "*" ] 역할은 다음과 같은 신뢰 관계를 맺고 있어야 합니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "Service": "lambda.amazonaws.com" "Action": "sts:assumerole" ] 자세한 내용은 IAM 사용 설명서의 IAM 역할 생성을 참조하십시오. Lambda 함수 생성 the section called Lambda 배포 패키지 만들기 (p. 79)의 지침을 따르되, ddb-to-es라는 디렉터리를 만들고 sample.py에는 다음과 같은 코드를 사용하십시오. import boto3 import requests from requests_aws4auth import AWS4Auth region = '' # e.g. us-east-1 86
Lambda 함수 테스트 service = 'es' credentials = boto3.session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) host = '' # the Amazon ES domain, with https:// index = 'lambda-index' type = 'lambda-type' url = host + '/' + index + '/' + type + '/' headers = "Content-Type": "application/json" def handler(event, context): count = 0 for record in event['records']: # Get the primary key for use as the Elasticsearch ID id = record['dynamodb']['keys']['id']['s'] if record['eventname'] == 'REMOVE': r = requests.delete(url + id, auth=awsauth) else: document = record['dynamodb']['newimage'] r = requests.put(url + id, auth=awsauth, json=document, headers=headers) count += 1 return str(count) + ' records processed.' region과 host의 변수를 편집합니다. 다음과 같은 명령을 사용하면 종속 프로그램을 설치할 수 있습니다. cd ddb-to-es pip install requests -t. pip install requests_aws4auth -t. 이제 the section called Lambda 함수 생성 (p. 80) 지침을 따르되, the section called 사전 조 건 (p. 85)에서 IAM 역할을 지정하고 트리거에는 다음 설정을 지정하십시오. 테이블: 사용자의 DynamoDB 테이블 배치 크기: 100 시작 위치: 수평 트리밍 자세한 내용은 Amazon DynamoDB 개발자 안내서의 DynamoDB 테이블에서 새 항목 처리를 참조하십시오. 이제 사용자는 완벽한 리소스 모음, 즉 소스 데이터에 대한 DynamoDB 테이블, 테이블 변경 사항의 DynamoDB 스트림, 소스 데이터가 변경되면 실행되어 이러한 변경 사항을 인덱싱하는 함수, 검색과 시각화 를 위한 Amazon ES 도메인을 모두 확보하게 됩니다. Lambda 함수 테스트 함수를 만들었으면 이제 AWS CLI를 사용해 DynamoDB 테이블에 새 항목을 추가해 함수를 테스트할 수 있 습니다. aws dynamodb put-item --table-name es-test --item '"director": "S": "Kevin Costner""id": "S": "00001""title": "S": "The Postman"' --region us-west-1 그런 다음 Amazon ES 콘솔이나 Kibana를 이용해 lambda-index에 문서가 있는지 확인하십시오. 다음 요 청을 사용할 수도 있습니다. 87
Amazon Kinesis Data Firehose에 서 Amazon ES로 스트리밍 데이터 로드 GET https://es-domain/lambda-index/lambda-type/00001 "_index": "lambda-index", "_type": "lambda-type", "_id": "00001", "_version": 1, "found": true, "_source": "director": "S": "Kevin Costner" "id": "S": "00001" "title": "S": "The Postman" Amazon Kinesis Data Firehose에서 Amazon ES로 스트리밍 데이터 로드 Kinesis Data Firehose에서 Amazon ES를 대상으로 전송할 수 있습니다. Amazon ES로 스트리밍 데이터 를 로드하는 방법에 대한 자세한 내용은 Amazon Kinesis Data Firehose 개발자 안내서의 Kinesis Data Firehose 전송 스트림 생성 및 Amazon ES를 대상으로 선택을 참조하십시오. Note Amazon Kinesis Data Firehose는 현재 VPC 도메인 또는 Amazon ES 7.x 도메인을 지원하지 않습 니다. Amazon ES에 데이터를 로드하기 전에, 먼저 데이터 변환을 실행해야 할 수도 있습니다. Lambda 함수로 이 작업을 수행하는 방법에 대한 자세한 내용은 동일한 안내서의 데이터 변환을 참조하십시오. 전송 스트림을 구성할 때 Kinesis Data Firehose에서는 Amazon ES로 데이터를 보내고, Amazon S3에서 데 이터를 백업하고, Lambda로 데이터를 변환할 때 필요한 리소스 액세스 권한을 가진 "원클릭" IAM 역할을 사 용합니다. 이러한 역할을 수동으로 생성하려면 복잡하기 때문에, 제공된 역할을 사용하는 것이 좋습니다. Amazon CloudWatch에서 Amazon ES로 스트리밍 데이터 로드 CloudWatch Logs 구독을 사용하여 CloudWatch Logs에서 Amazon ES 도메인으로 스트리밍 데이터를 로 드할 수 있습니다. Amazon CloudWatch 구독에 대한 자세한 내용은 구독을 통한 로그 데이터 실시간 처리를 참조하십시오. 구성 정보는 Amazon CloudWatch 개발자 안내서의 CloudWatch Logs 데이터를 Amazon Elasticsearch Service로 스트리밍을 참조하십시오. AWS IoT에서 Amazon ES로 데이터 로드 AWS IoT에서 규칙을 사용하여 데이터를 전송할 수 있습니다. 자세한 내용은 AWS IoT 개발자 안내서에서 Amazon ES 작업을 참조하십시오. 88
URI 검색 Amazon Elasticsearch Service에서 데 이터 검색 여타 검색 엔진과 마찬가지로, Elasticsearch는 데이터를 검색하는 다양한 옵션을 제공합니다. 이 장에서는 Amazon ES를 사용하여 검색을 수행하는 몇 가지 일반적인 방법을 소개합니다. Postman을 사용하여 다양한 요청을 테스트할 수 있습니다. Amazon ES에 서명된 HTTP 요청을 전송하는 코드 샘플은 HTTP 요청에 서 명 (p. 69) 단원을 참조하십시오. Note 이 장의 모든 예제 요청은 Elasticsearch 6.x API에서 작동합니다. 일부 요청은 이전 버전의 Elasticsearch에서 작동하지 않을 수 있습니다. URI 검색 URI(Universal Resource Identifier) 검색은 가장 단순한 형태의 검색입니다. URL 검색에서는 쿼리를 HTTP 요청 파라미터로 지정합니다. GET https://search-my-domain.us-west-1.es.amazonaws.com/_search?q=house 샘플 응답은 다음과 같습니다. "took": 25, "timed_out": false, "_shards": "total": 10, "successful": 10, "skipped": 0, "failed": 0 "hits": "total": 85, "max_score": 6.6137657, "hits": [ "_index": "movies", "_type": "movie", "_id": "tt0077975", "_score": 6.6137657, "_source": "directors": [ "John Landis" ], "release_date": "1978-07-27T00:00:00Z", "rating": 7.5, "genres": [ "Comedy", "Romance" ], "image_url": "http://ia.media-imdb.com/images/m/ MV5BMTY2OTQxNTc1OF5BMl5BanBnXkFtZTYwNjA3NjI5._V1_SX400_.jpg", "plot": "At a 1962 College, Dean Vernon Wormer is determined to expel the entire Delta Tau Chi Fraternity, but those troublemakers have other plans for him.", 89
요청 본문 검색 ]... "title": "Animal House", "rank": 527, "running_time_secs": 6540, "actors": [ "John Belushi", "Karen Allen", "Tom Hulce" ], "year": 1978, "id": "tt0077975" 기본적으로 이 쿼리는 모든 색인의 모든 필드에서 검색어 house를 검색합니다. 검색 범위를 좁히려면 URI에 서 색인(movies) 및 문서 필드(title)를 지정합니다. GET https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search?q=title:house 이 요청에 추가 파라미터를 포함시킬 수 있지만, 지원되는 파라미터는 Elasticsearch 검색 옵션을 일부만 제 공합니다. 다음 요청은 20개 결과(기본 개수 10개가 아님)를 반환하고 연도 기준으로 정렬합니다(_score 기 준이 아님). GET https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search? q=title:house&size=20&sort=year:desc 요청 본문 검색 보다 복잡한 검색을 수행하려면 쿼리에 HTTP 요청 본문 및 Elasticsearch DSL(Domain-Specific Language) 을 사용합니다. 쿼리 DSL을 사용하면 전체 범위의 Elasticsearch 검색 옵션을 지정할 수 있습니다. 다음 match 쿼리는 마지막 URI 검색 (p. 89) 예제와 유사합니다. POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search "size": 20, "sort": "year": "order": "desc" "query": "query_string": "default_field": "title", "query": "house" Note _search API는 요청 본문 검색에 HTTP GET 및 POST를 허용하지만, 모든 HTTP 클라이언트가 GET 요청에 요청 본문을 추가하는 것을 지원하지는 않습니다. POST가 보다 범용적 선택입니다. 많은 경우에 전체 필드는 아니지만 여러 필드를 검색해야 합니다. multi_match 쿼리를 사용합니다. 90
필드 부스팅 POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search "size": 20, "query": "multi_match": "query": "house", "fields": ["title", "plot", "actors", "directors"] 필드 부스팅 특정 필드를 "부스팅"하여 검색 관련성을 개선할 수 있습니다. 부스트는 한 필드의 일치 항목을 다른 필드의 일치 항목보다 가중하는 배수입니다. 다음 예제에서는 title 필드에서 john과 일치하는 항목이 _score에 미치는 영향이 plot 필드의 일치 항목보다 2배, actors 또는 directors 필드의 일치 항목보다 4배 높습 니다. 그러면 결과에서 John Wick, John Carter 같은 영화는 검색 결과의 거의 맨 위에 있고, John Travolta가 주인공인 영화는 거의 맨 아래에 있습니다. POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search "size": 20, "query": "multi_match": "query": "john", "fields": ["title^4", "plot^2", "actors", "directors"] 검색 결과 페이지 매김 많은 수의 검색 결과를 표시해야 하는 경우 from 파라미터를 사용하여 페이지 매김을 구현할 수 있습니다. 다음 요청은 검색 결과의 0 기반 인덱스 목록에서 20 39개 결과를 반환합니다. POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search "from": 20, "size": 20, "query": "multi_match": "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] 검색 결과 강조 표시 highlight 옵션은 Elasticsearch에게 쿼리가 하나 이상의 필드와 일치할 경우 hits 배열 내에 추가 객체를 반환하도록 지시합니다. POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search "size": 20, "query": "multi_match": 91
검색 결과 강조 표시 "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] "highlight": "fields": "plot": 쿼리가 plot의 내용과 일치할 경우 히트는 다음과 같이 표시됩니다. "_index": "movies", "_type": "movie", "_id": "tt0091541", "_score": 11.276199, "_source": "directors": [ "Richard Benjamin" ], "release_date": "1986-03-26T00:00:00Z", "rating": 6, "genres": [ "Comedy", "Music" ], "image_url": "http://ia.media-imdb.com/images/m/ MV5BMTIzODEzODE2OF5BMl5BanBnXkFtZTcwNjQ3ODcyMQ@@._V1_SX400_.jpg", "plot": "A young couple struggles to repair a hopelessly dilapidated house.", "title": "The Money Pit", "rank": 4095, "running_time_secs": 5460, "actors": [ "Tom Hanks", "Shelley Long", "Alexander Godunov" ], "year": 1986, "id": "tt0091541" "highlight": "plot": [ "A young couple struggles to repair a hopelessly dilapidated <em>house</em>." ] 기본적으로 Elasticsearch는 일치 문자열을 <em> 태그로 묶고, 일치 항목 주위로 최대 100자의 컨텍트스를 제공하고, 마침표, 공백, 줄바꿈을 식별하여 내용을 분할합니다. 이러한 설정은 모두 사용자 지정이 가능합니 다. POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search "size": 20, "query": "multi_match": "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] "highlight": 92
Count API "fields": "plot": "pre_tags": "<strong>", "post_tags": "</strong>", "fragment_size": 200, "boundary_chars": ".,!? " Count API 문서 내용에는 관심이 없고 일치 항목 수만 알고 싶은 경우 _search API 대신 _count API를 사용할 수 있 습니다. 다음 요청에서는 query_string 쿼리를 사용하여 로맨틱 코미디를 식별합니다. POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_count "query": "query_string": "default_field": "genres", "query": "romance AND comedy" 샘플 응답은 다음과 같습니다. "count": 564, "_shards": "total": 5, "successful": 5, "skipped": 0, "failed": 0 93
Amazon Elasticsearch Service 인덱스 스냅샷 작업 스냅샷은 클러스터의 인덱스와 상태의 백업입니다. 상태에는 클러스터 설정, 노드 정보, 인덱스 설정 및 샤드 할당이 포함됩니다. Amazon Elasticsearch Service에서 스냅샷은 자동과 수동의 두 가지 형태로 제공됩니다. 자동 스냅샷은 클러스터 복구 전용입니다. 빨간색 클러스터 상태 (p. 150) 또는 기타 데이터 손실 시 도메 인을 복원 (p. 99)하는 데 사용할 수 있습니다. Amazon ES는 추가 비용 없이 자동화된 스냅샷을 사전 구성된 Amazon S3 버킷에 저장합니다. 수동 스냅샷은 클러스터 복구 또는 한 클러스터에서 다른 클러스터로 데이터 이동 시 사용합니다. 이름에 서 알 수 있듯이 수동 스냅샷을 시작해야 합니다. 이러한 스냅샷은 자체 Amazon S3 버킷에 저장되며 표준 S3 요금이 적용됩니다. 자체 관리형 Elasticsearch 클러스터의 스냅샷이 있는 경우 해당 스냅샷을 사용하 여 Amazon ES 도메인으로 마이그레이션할 수도 있습니다. 모든 Amazon ES 도메인은 자동 스냅샷을 생성하지만 빈도는 다릅니다. Elasticsearch 5.3 이상을 실행하는 도메인의 경우 Amazon ES는 시간별 자동 스냅샷을 생성하고 최대 336 개의 스냅샷을 14일 동안 보관합니다. Elasticsearch 5.1 이하를 실행하는 도메인의 경우 Amazon ES는 일별 자동 스냅샷을 생성하고(지정한 시 간 동안) 최대 14개의 스냅샷을 30일 동안 보관합니다. 클러스터가 빨간색 상태가 되면 Amazon ES는 자동 스냅샷 생성을 중지합니다. 2주 내에 문제를 해결하지 않으면 클러스터의 데이터가 영구적으로 손실될 수 있습니다. 문제 해결 단계는 the section called 빨간색 클러스터 상태 (p. 150) 단원을 참조하십시오. Tip 많은 사용자에게 인덱스 및 스냅샷 관리에 Curator를 사용하는 것이 편리합니다. pip를 사용하여 Curator를 설치합니다. pip install elasticsearch-curator Curator에는 고급 필터링 기능이 있어 복잡한 클러스터에 대한 관리 작업을 간소하게 처리할 수 있 습니다. Amazon ES는 Elasticsearch 버전 5.1 이상을 실행 중인 도메인의 Curator를 지원합니다. 명 령줄 인터페이스(CLI) 또는 Python API로서 Curator를 사용할 수 있습니다. CLI를 사용하는 경우 명 령줄에서 자격 증명을 내보내고 다음과 같이 curator.yml을 구성합니다. client: hosts: search-my-domain.us-west-1.es.amazonaws.com port: 443 use_ssl: True aws_region: us-west-1 aws_sign_request: True ssl_no_validate: False timeout: 60 logging: loglevel: INFO Python API를 사용하는 Lambda 함수 샘플은 Curator를 사용하여 데이터 회전 (p. 144)을 보십시 오. 94
수동 스냅샷 필수 조건 주제 수동 스냅샷 필수 조건 (p. 95) 수동 스냅샷 리포지토리 등록 (p. 96) 수동 스냅샷 생성 (p. 98) 스냅샷 복원 (p. 99) 수동 스냅샷 필수 조건 인덱스 스냅샷을 수동으로 생성하려면 IAM 및 Amazon S3를 사용해야 합니다. 스냅샷을 생성하기 전에 다음 필수 조건을 충족하는지 확인하십시오. 사전 조건 설명 S3 버킷 Amazon ES 도메인에 대한 수동 스냅샷을 저장합니다. 버킷의 이름을 기록해 둡니다. 이 이름은 두 곳에서 필요합니다. IAM 역할에 연결된 IAM 정책의 Resource 명령문 스냅샷 리포지토리를 등록하는 데 사용되는 Python 클라이언트 자세한 내용은 Amazon Simple Storage Service 시작 안내서의 버킷 생성을 참조하십시 오. Important Glacier 수명 주기 규칙을 이 버킷에 적용하지 마십시오. 수동 스냅샷은 Glacier 스토리지 클래스를 지원하지 않습니다. IAM 역할 권한을 Amazon Elasticsearch Service에 위임합니다. 이 장의 나머지 부분에서는 이 역할 을 TheSnapshotRole이라고 부릅니다. 다음 예에서 보듯이, 역할의 신뢰 관계는 Principal 문에서 Amazon Elasticsearch Service를 지정해야 합니다. "Version": "2012-10-17", "Statement": [ "Sid": "", "Effect": "Allow", "Principal": "Service": "es.amazonaws.com" "Action": "sts:assumerole" ] 역할에는 다음 정책이 연결되어야 합니다. "Version": "2012-10-17", "Statement": [ "Action": [ "s3:listbucket" ], "Effect": "Allow", "Resource": [ 95
수동 스냅샷 리포지토리 등록 사전 조건 설명 ] "arn:aws:s3:::s3-bucket-name" ] "Action": [ "s3:getobject", "s3:putobject", "s3:deleteobject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::s3-bucket-name/*" ] 자세한 내용은 IAM 사용 설명서의 고객 관리형 정책 생성 및 관리형 정책 추가 단원을 참 조하십시오. 권한 스냅샷 리포지토리를 등록하려면 IAM 역할을 맡을 수 있어야 합니다. es:eshttpput 작 업에도 액세스해야 합니다. 다음 정책에는 이러한 권한이 포함됩니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Action": "iam:passrole", "Resource": "arn:aws:iam::123456789012:role/thesnapshotrole" "Effect": "Allow", "Action": "es:eshttpput", "Resource": "arn:aws:es:region:123456789012:domain/my-domain/*" ] TheSnapshotRole을 수행할 수 있는 iam:passrole 권한이 없다면, 다음과 같은 일반 오류가 발생할 수 있습니다. $ python register-repo.py "Message":"User: arn:aws:iam::123456789012:user/myuseraccount is not authorized to perform: iam:passrole on resource: arn:aws:iam::123456789012:role/thesnapshotrole" 수동 스냅샷 리포지토리 등록 수동 인덱스 스냅샷을 생성하려면 Amazon Elasticsearch Service에 스냅샷 리포지토리를 등록해야 합니다. 이 일회성 작업을 수행하려면 TheSnapshotRole에서 설명하는 것처럼 the section called 수동 스냅샷 필 수 조건 (p. 95)에 액세스할 수 있는 자격 증명을 이용해 AWS 요청에 서명해야 합니다. curl은 AWS 요청 서명을 지원하지 않기 때문에 이 작업에 사용할 수 없습니다. 대신 샘플 Python 클라이언 트 (p. 97), Postman이나 다른 방법으로 서명 요청 (p. 69)을 전송해 스냅샷 리포지토리를 등록하십시오. 요청은 다음과 같은 형식을 취합니다. 96
샘플 Python 클라이언트 PUT elasticsearch-domain-endpoint/_snapshot/my-snapshot-repo "type": "s3", "settings": "bucket": "s3-bucket-name", "region": "region", "role_arn": "arn:aws:iam::123456789012:role/thesnapshotrole" 스냅샷 디렉터리 등록은 일회성 작업이지만, 한 도메인에서 다른 도메인으로 마이그레이션하려면 기존 도메 인과 새 도메인에서 동일한 스냅샷 리포지토리를 등록해야 합니다. Important S3 버킷이 us-east-1 리전에 있는 경우 "region": "us-east-1" 대신 "endpoint": "s3.amazonaws.com"을 사용해야 합니다. 스냅샷 리포지토리를 위해 S3 관리형 키로 서버 측 암호화를 활성화하려면 "server_side_encryption": true를 "settings" JSON에 추가합니다. 도메인이 VPC에 상주하는 경우, 요청이 스냅샷 리포지토리를 등록하려면 컴퓨터가 VPC에 연결되어야 합니다. VPC 액세스는 네트워크 구성에 따라 다르지만, VPN 또는 회사 네트워크 연결이 필요할 수 있 습니다. Amazon ES 도메인에 도달할 수 있는지 알아보려면 웹 브라우저에서 https://your-vpcdomain.region.es.amazonaws.com으로 이동하여 기본 JSON 응답을 받을 수 있는지 확인합니다. 샘플 Python 클라이언트 다음 샘플 Python 코드를 register-repo.py와 같은 Python 파일로 저장합니다. 클라이언트는 Python용 AWS SDK(Boto3), 요청 및 requests-aws4auth 패키지가 필요합니다. 클라이언트는 다른 스냅샷 작업을 위 한 주석 처리된 예제를 포함하고 있습니다. Tip Java 기반 코드 샘플은 HTTP 요청 서명 (p. 69)에서 이용할 수 있습니다. 코드에서 다음 변수를 업데이트해야 합니다. host, region, path 및 payload. import boto3 import requests from requests_aws4auth import AWS4Auth host = '' # include https:// and trailing / region = '' # e.g. us-west-1 service = 'es' credentials = boto3.session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) # Register repository path = '_snapshot/my-snapshot-repo' # the Elasticsearch API endpoint url = host + path payload = "type": "s3", "settings": "bucket": "s3-bucket-name", "region": "us-west-1", "role_arn": "arn:aws:iam::123456789012:role/thesnapshotrole" 97
수동 스냅샷 생성 headers = "Content-Type": "application/json" r = requests.put(url, auth=awsauth, json=payload, headers=headers) print(r.status_code) print(r.text) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Take snapshot path = '_snapshot/my-snapshot-repo/my-snapshot' url = host + path r = requests.put(url, auth=awsauth) print(r.text) # Delete index path = 'my-index' url = host + path r = requests.delete(url, auth=awsauth) print(r.text) # Restore snapshots (all indices) path = '_snapshot/my-snapshot-repo/my-snapshot/_restore' url = host + path r = requests.post(url, auth=awsauth) print(r.text) # Restore snapshot (one index) path = '_snapshot/my-snapshot-repo/my-snapshot/_restore' url = host + path payload = "indices": "my-index" headers = "Content-Type": "application/json" r = requests.post(url, auth=awsauth, json=payload, headers=headers) print(r.text) 수동 스냅샷 생성 스냅샷은 즉각적으로 이루어지지 않습니다. 완료하는 데 시간이 걸리며 클러스터의 완벽한 특정 시점 보기 를 나타내지 않습니다. 스냅샷이 진행 중인 동안에도 문서를 인덱스 처리하고 클러스터에 다른 요청을 할 수 있지만 일반적으로 새로운 문서 및 기존 문서의 업데이트는 해당 스냅샷에 포함되지 않습니다. 스냅샷은 Elasticsearch에서 해당 스냅샷을 시작한 시점에 존재한 기본 샤드를 포함합니다. 스냅샷 스레드 풀의 크기에 따라 서로 다른 시간에 스냅샷에 다른 샤드가 포함될 수 있습니다. Elasticsearch 스냅샷은 증분식이며, 마지막으로 성공한 스냅샷 이후로 변경된 데이터만 저장합니다. 이 증분 적 특성은 자주 사용되는 스냅샷과 그 반대의 스냅샷 간의 디스크 사용량 차이가 거의 없는 경우가 많다는 의 미이기도 합니다. 즉, 일주일에 한 번 시간별로 스냅샷을 가져올 경우(총 168개의 스냅샷) 주말에 단일 스냅 샷을 가져오는 것보다 훨씬 많은 디스크 공간을 사용할 수는 없습니다. 또한 스냅샷을 자주 가져올수록 완료 하는 데 걸리는 시간이 줄어듭니다. 일부 Elasticsearch 사용자는 매 30분마다 스냅샷을 가져옵니다. 98
스냅샷 복원 스냅샷을 생성할 때 다음 2가지 정보를 지정합니다. 스냅샷 리포지토리의 이름 스냅샷의 이름 이 장의 예제에서는 편의상 그리고 간단하게 하기 위해 일반적인 HTTP 클라이언트인 curl을 사용합니다. 하지만 액세스 정책이 IAM 사용자 또는 역할을 지정하는 경우에는 스냅샷 요청에 서명해야 합니다. 샘플 Python 클라이언트 (p. 97)의 주석 처리된 예제를 사용하여 curl 명령이 사용하는 동일한 엔드포인트에 서 명된 HTTP 요청을 할 수 있습니다. 스냅샷을 수동으로 생성하려면 1. 현재 스냅샷 생성이 진행 중인 경우 스냅샷을 생성할 수 없습니다. 확인하려면 다음 명령을 실행합니다. curl -XGET 'elasticsearch-domain-endpoint/_snapshot/_status' 2. 수동으로 스냅샷을 생성하려면 다음 명령을 실행합니다. curl -XPUT 'elasticsearch-domain-endpoint/_snapshot/repository/snapshot-name' Note 스냅샷 생성에 필요한 시간은 Amazon ES 도메인의 크기에 따라 늘어납니다. 스냅샷 작업이 길게 실행되면 경우에 따라 504 GATEWAY_TIMEOUT 같은 오류가 발생합니다. 이러한 오류는 무시하고 작업이 성공적으로 완료될 때까지 기다릴 수 있습니다. 다음 명령을 사용하여 도메인의 모든 스냅샷 상태를 확인합니다. curl -XGET 'elasticsearch-domain-endpoint/_snapshot/repository/_all?pretty' 스냅샷 복원 Warning 인덱스 별칭을 사용하는 경우, 인덱스를 삭제하기 전에 별칭에 요청 쓰기를 중단하십시오(또는 그 별칭을 다른 인덱스로 전환하십시오). 쓰기 중단 요청은 다음과 같은 상황을 피하도록 해 줍니다. 1. 인덱스를 삭제하면 별칭도 삭제됩니다. 2. 현재 지워진 별칭에 잘못된 쓰기 요청 때문에 그 별칭과 동일한 이름을 가진 새 인덱스가 생성됩 니다. 3. 새 인덱스에 지정하는 이름과 충돌하기 때문에 그 별칭을 더 이상 사용할 수 없습니다. 별칭을 다른 인덱스로 전환하는 경우 스냅샷에서 복원할 때 "include_aliases": false를 지 정하십시오. 스냅샷을 복원하려면 1. 복원할 스냅샷을 식별합니다. 모든 스냅샷 리포지토리를 보려면 다음 명령을 실행합니다. curl -XGET 'elasticsearch-domain-endpoint/_snapshot?pretty' 리포지토리를 식별한 후, 다음 명령을 실행하여 모든 스냅샷을 봅니다. 99
스냅샷 복원 curl -XGET 'elasticsearch-domain-endpoint/_snapshot/repository/_all?pretty' Note 대부분의 자동 스냅샷은 cs-automated 리포지토리에 저장됩니다. 도메인이 유휴 시 데이터 를 암호화하는 경우 cs-automated-enc 리포지토리에 저장됩니다. 찾고 있는 수동 스냅샷 리 포지토리가 보이지 않으면 도메인에 이 수동 스냅샷 리포지토리를 등록 (p. 96)했는지 확인 하십시오. 2. (선택 사항) Amazon ES 도메인에 열려 있는 모든 인덱스를 삭제하거나 이름을 바꿉니다. 클러스터의 인 덱스와 스냅샷의 인덱스 간에 이름 충돌이 없는 경우 이 단계를 수행할 필요가 없습니다. 이미 같은 이름의 인덱스가 있는 Elasticsearch 클러스터로 인덱스 스냅샷을 복원할 수는 없습니다. 현 재 Amazon ES는 Elasticsearch _close API를 지원하지 않으므로 다음과 같은 대안 중 하나를 사용해 야 합니다. 동일한 Amazon ES 도메인에서 인덱스를 삭제한 후 스냅샷을 복원합니다. 스냅샷에서 인덱스를 복원할 때 인덱스 이름을 변경 (p. 154)하고 나중에 다시 인덱스를 만듭니다. 스냅샷을 다른 Amazon ES 도메인에 복원합니다(수동 스냅샷만 가능). 다음 예제는 특정 도메인에 대한 기존 인덱스를 모두 삭제하는 방법을 보여 줍니다. curl -XDELETE 'elasticsearch-domain-endpoint/_all' 하지만 모든 인덱스를 복원할 계획이 아니라면 한 인덱스만 삭제해야 할 수 있습니다. curl -XDELETE 'elasticsearch-domain-endpoint/index-name' 3. 스냅샷을 복원하려면 다음 명령을 실행합니다. curl -XPOST 'elasticsearch-domain-endpoint/_snapshot/repository/snapshot/_restore'.kibana 인덱스의 특별 권한 때문에, 자동 스냅샷에서 복원을 시도할 경우 모든 인덱스를 복원하려는 시도가 실패합니다. 다음 예제에서는 my-index 스냅샷 리포지토리에 있는 2017-snapshot에서 인덱 스 cs-automated만 복원합니다. curl -XPOST 'elasticsearch-domain-endpoint/_snapshot/cs-automated/2017-snapshot/ _restore' -d '"indices": "my-index"' -H 'Content-Type: application/json' 또는.kibana 인덱스를 제외한 모든 인덱스를 복원할 수 있습니다. curl -XPOST 'elasticsearch-domain-endpoint/_snapshot/cs-automated/2017-snapshot/ _restore' -d '"indices": "*,-.kibana"' -H 'Content-Type: application/json' Note 기본 샤드 중 일부만 관련 인덱스에 사용할 수 있는 경우, 스냅샷의 state가 PARTIAL이 될 수 있습 니다. 이 값은 최소한 샤드 하나의 데이터가 제대로 저장되지 않았음을 의미합니다. 부분 스냅샷에 서도 복원할 수는 있지만, 그보다 오래된 스냅샷을 사용하여 누락된 인덱스를 복원해야 합니다. 100
Elasticsearch 업데이트 Note Elasticsearch 버전 업그레이드는 서비스 소프트웨어 업데이트와 다릅니다. Amazon ES 도메인에 대한 서비스 소프트웨어 업데이트에 대한 자세한 내용은 Amazon ES 도메인 관리 (p. 26) 단원을 참 조하십시오. Amazon ES는 버전 5.1 이상을 실행하는 도메인에 대해 인플레이스 Elasticsearch 업그레이드를 제공합 니다. Amazon Kinesis Data Firehose 또는 Amazon CloudWatch Logs 같은 서비스를 사용하여 데이터를 Amazon ES로 스트리밍하는 경우, 마이그레이션하기 전에 이러한 서비스가 새 버전의 Elasticsearch를 지원 하는지 확인하십시오. 현재 Amazon ES는 다음 업그레이드 경로를 지원합니다. 구 버전 새 버전 6.8 7.1 Important Elasticsearch 7.x에는 수많은 주요 변경 사항이 포함되어 있습니다. 현재 위치 업그레이드를 시작하기 전에 6.8 도메인의 수동 스냅샷을 생성 (p. 94)하여 테스 트 7.1 도메인에서 복원하고, 해당 테스트 도메인을 사용하여 잠재적인 업그레 이드 문제를 식별하는 것이 좋습니다. Elasticsearch 6.x와 같이 인덱스에는 하나의 매핑 유형만 포함될 수 있지만 해 당 유형의 이름은 _doc여야 합니다. 결과적으로 특정 API(예: _bulk API)는 더 이상 요청 본문에 매핑 유형이 필요하지 않습니다. 새 인덱스의 경우 자체 호스팅된 Elasticsearch 7.x의 기본 샤드 수는 1입니다. Amazon ES 7.x 도메인은 이전 기본값인 5를 유지합니다. Amazon Kinesis Data Firehose는 현재 Amazon ES 7.x 도메인을 지원하지 않 습니다. 6.x 6.x 5.6 6.x Important 버전 6.x에서 생성된 인덱스는 더 이상 여러 개의 매핑 유형을 지원하지 않습니 다. 버전 5.x에서 생성된 인덱스는 6.x 클러스터로 복원될 때 계속 여러 매핑 유 형을 지원합니다. 클라이언트 코드를 통해 인덱스당 매핑 유형 하나만 생성할 수 있는지 확인하십시오. Elasticsearch 5.6에서 6.x로 업그레이드할 때 가동 중지를 최소화하기 위 해 Amazon ES는.kibana 인덱스를.kibana-6으로 다시 인덱싱하고,.kibana를 삭제하고,.kibana라는 별칭을 생성하여 새 인덱스를 새 별칭에 매핑합니다. 5.x 5.6 업그레이드 프로세스는 세 단계로 구성됩니다. 1. 업그레이드 전 점검 Amazon ES가 일련의 점검을 수행하여 업그레이드를 차단할 수 있는 문제가 있는지 확인하고 이러한 점검이 성공하지 않을 경우 다음 단계를 진행하지 않습니다. 101
업그레이드 문제 해결 2. 스냅샷 Amazon ES가 Elasticsearch 클러스터의 스냅샷을 만들고 스냅샷이 성공하지 않을 경우 다음 단 계를 진행하지 않습니다. 업그레이드가 실패할 경우 Amazon ES가 이 스냅샷을 사용해 클러스터를 원래 상태로 복원합니다. 이 스냅샷에 대한 자세한 내용은 the section called 업그레이드 후에는 다운그레이드 할 수 없음 (p. 154)을 참조하십시오. 3. 업그레이드 Amazon ES가 업그레이드를 시작합니다. 15분에서 몇 시간까지 걸릴 수 있습니다. 일부 또 는 모든 업그레이드 도중 Kibana를 사용하지 못할 수 있습니다. 업그레이드 문제 해결 인플레이스 Elasticsearch 업그레이드는 정상 상태 도메인이 필요합니다. 도메인은 업그레이드 자격이 없거 나 매우 다양한 이유로 업그레이드가 실패할 수 있습니다. 다음 표에는 가장 일반적인 문제가 나와 있습니다. 문제 설명 노드당 샤드가 너무 많음 Elasticsearch의 7.x 버전에서 기본 설정된 노드당 샤드 수는 1,000개 이하입니 다. 현재 클러스터의 노드가 이 설정을 초과하면 Amazon ES에서 업그레이드할 수 없습니다. 이 오류가 발생한 경우 몇 가지 옵션이 있습니다. 더 많은 데이터 노드를 클러스터에 추가합니다. _cluster/settings/cluster.max_shards_per_node 설정을 늘립니 다. _shrink API (p. 160)를 사용하여 노드의 샤드 수를 줄입니다. 처리 중 상태의 도메인 도메인이 구성 변경 도중에 있습니다. 작업이 완료된 후 업그레이드 자격을 확 인하십시오. 빨간색 클러스터 상태 클러스터에서 하나 이상의 인덱스가 빨간색입니다. 문제 해결 단계는 the section called 빨간색 클러스터 상태 (p. 150) 단원을 참조하십시오. 높은 오류율 Elasticsearch 클러스터가 요청을 처리하려고 시도할 때 다수의 5xx 오류를 반 환합니다. 이 문제는 일반적으로 너무 많은 동시 읽기 또는 쓰기 요청의 결과입 니다. 클러스터로 가는 트래픽을 줄이거나 도메인을 확장할 것을 고려하십시오. 브레인 분할 브레인 분할은 Elasticsearch 클러스터가 여러 개의 마스터 노드를 가지고 자 체적으로는 절대로 다시 조인되지 않는 2개의 클러스터로 분할되어 있다는 의 미입니다. 권장 수의 전용 마스터 노드 (p. 137)를 사용하면 브레인 분할을 방 지할 수 있습니다. 브레인 분할로부터 복구하기 위해 도움이 필요하면 AWS Support에 문의하십시오. 마스터 노드가 없음 Amazon ES가 클러스터의 마스터 노드를 찾을 수 없습니다. 도메인에서 다중 AZ (p. 29)를 사용하는 경우 가용 영역 장애로 인해 클러스터가 쿼럼을 상실하 고 새 마스터 노드 (p. 137)를 선택하지 못할 수 있습니다. 문제가 자체적으로 해결되지 않을 경우 AWS Support에 문의하십시오. 대기 중 작업이 너무 많 음 마스터 노드에 부하가 너무 높아 대기 중 작업이 많습니다. 클러스터로 가는 트 래픽을 줄이거나 도메인을 확장할 것을 고려하십시오. 손상된 스토리지 볼륨 하나 이상의 노드의 디스크 볼륨이 제대로 기능하지 않습니다. 이 문제는 흔히 높은 오류율, 대기 작업이 너무 많음 등 다른 문제와 함께 발생합니다. 이 문제 가 단독으로 발생하고 자체적으로 해결되지 않을 경우 AWS Support에 문의하 십시오. KMS 키 문제 도메인을 암호화하는 데 사용된 KMS 키가 액세스 불가능하거나 없습니다. 자 세한 내용은 the section called 유휴 시 데이터를 암호화하는 도메인 모니터 링 (p. 47) 단원을 참조하십시오. 102
업그레이드 시작 문제 설명 진행 중인 스냅샷 도메인이 현재 스냅샷을 생성하고 있습니다. 스냅샷이 완료된 후 업그레이드 자 격을 확인하십시오. 또한 수동 스냅샷 리포지토리를 나열하고, 해당 리포지토 리에서 스냅샷을 나열하고, 수동 스냅샷을 생성할 수 있는지도 확인하십시오. Amazon ES가 스냅샷이 진행 중인지 확인할 수 없는 경우 업그레이드가 실패할 수 있습니다. 스냅샷 시간 초과 또는 실패 업그레이드 전 스냅샷 생성이 너무 오래 걸렸거나 실패했습니다. 클러스터 상태 를 확인한 후 다시 시도하십시오. 문제가 지속될 경우 AWS Support에 문의하십 시오. 호환되지 않는 인덱스 하나 이상의 인덱스가 대상 Elasticsearch 버전과 호환되지 않습니다. 인덱스를 이전 버전(예: 2.3)의 Elasticsearch에서 마이그레이션한 경우 이 문제가 발생할 수 있습니다. 인덱스를 다시 생성한 후 다시 시도하십시오. 높은 디스크 사용량 클러스터의 디스크 사용량이 90%를 초과합니다. 데이터를 삭제하거나 도메인 을 확장한 후 다시 시도하십시오. 높은 JVM 사용량 JVM 메모리 압력이 75%를 초과합니다. 클러스터로 가는 트래픽을 줄이거나 도 메인을 확장한 후 다시 시도하십시오. Kibana 별칭 문제.kibana 가 이미 별칭으로 구성되고 호환되지 않는 인덱스(예를 들어 Kibana 의 이전 버전 중 하나)에 매핑되어 있습니다. 다시 인덱싱한 후 다시 시도하십시 오. 빨간색 Kibana 상태 Kibana 상태가 빨간색입니다. 업그레이드가 완료되면 Kibana를 사용해보십시 오. 상태가 지속될 경우 수동으로 해결한 후 다시 시도하십시오. 기타 Amazon ES 서비스 문제 Amazon ES 자체에 문제가 있을 경우 도메인이 업그레이드 자격이 없는 것으로 표시될 수 있습니다. 도메인에 상기 조건이 하나도 적용되지 않지만 문제가 하 루를 넘게 지속될 경우 AWS Support에 문의하십시오. 업그레이드 시작 업그레이드 프로세스는 되돌릴 수 없으며 일시 중지 또는 취소할 수 없습니다. 업그레이드 도중에는 도메인 에서 구성을 변경할 수 없습니다. 업그레이드를 시작하기 전에 진행해도 좋은지 다시 한 번 확인하십시오. 동 일한 단계를 사용해 실제로 업그레이드를 시작하지 않고 업그레이드 전 점검을 수행할 수 있습니다. 도메인을 새 버전의 Elasticsearch로 업그레이드하려면(콘솔) 1. 도메인의 수동 스냅샷을 생성 (p. 94)합니다. 이 스냅샷은 이전 Elasticsearch 버전 사용으로 돌아가고 싶 은 경우 새 도메인에서 복원 (p. 99)할 수 있는 백업의 역할을 수행합니다. 2. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. 3. Analytics에서 Elasticsearch Service를 선택합니다. 4. 탐색 창의 My domains(내 도메인)에서 업그레이드할 도메인을 선택합니다. 5. Upgrade domain(도메인 업그레이드)를 선택합니다. 6. 작업에서 업그레이드, 제출, 계속.을 차례로 선택합니다. 7. 개요 탭으로 돌아가 Upgrade status(업그레이드 상태)를 선택하여 업그레이드 상태를 모니터링합니다. 도메인을 새 버전의 Elasticsearch로 업그레이드하려면(AWS CLI 및 SDK) 다음 작업을 사용하여 도메인에 올바른 Elasticsearch 버전을 식별하고, 인플레이스 업그레이드를 시작하고, 업그레이드 전 점검을 수행하고, 진행 상태를 확인할 수 있습니다. 103
스냅샷을 사용하여 데이터를 마이그레이션 get-compatible-elasticsearch-versions (GetCompatibleElasticsearchVersions) upgrade-elasticsearch-domain (UpgradeElasticsearchDomain) get-upgrade-status (GetUpgradeStatus) get-upgrade-history (GetUpgradeHistory) 자세한 내용은 AWS CLI Command Reference 및 Amazon ES 구성 API 참조 (p. 181) 단원을 참조하십시 오. 스냅샷을 사용하여 데이터를 마이그레이션 인플레이스 업그레이드는 도메인을 새 Elasticsearch 버전으로 업그레이드하는 더 쉽고 빠르며 안정적인 방 법입니다. 스냅샷은 5.1 이전 버전의 Elasticsearch에서 마이그레이션하거나 완전히 새 클러스터로 마이그레 이션하려는 경우 적합한 옵션입니다. 다음 표에는 스냅샷을 통해 데이터를 다른 Elasticsearch 버전을 사용하는 도메인으로 마이그레이션하는 방 법이 나와 있습니다. 스냅샷 생성 및 복원에 대한 자세한 내용은 인덱스 스냅샷 작업 (p. 94) 단원을 참조하십 시오. 구 버전 새 버전 마이그레이션 프로세스 6.x 7.1 1. 7.0에 대한 주요 변경 사항을 검토하여 인덱스 또는 애플리 케이션을 조정할 필요가 있는지 확인하십시오. 다른 고려 사 항은 Elasticsearch 업데이트 (p. 101)의 표 단원을 참조하 십시오. 2. 6.x 도메인의 수동 스냅샷을 생성합니다. 3. 7.1 도메인을 생성합니다. 4. 원래 도메인의 스냅샷을 7.1 도메인에 복원합니다. 5. 원래 도메인이 더 이상 필요 없는 경우에는 삭제합니다. 삭 제하지 않으면 해당 도메인에 계속 요금이 부과될 수 있습니 다. 6.x 6.8 1. 6.x 도메인의 수동 스냅샷을 생성합니다. 2. 6.8 도메인을 생성합니다. 3. 원래 도메인의 스냅샷을 6.8 도메인에 복원합니다. 4. 원래 도메인이 더 이상 필요 없는 경우에는 삭제합니다. 삭 제하지 않으면 해당 도메인에 계속 요금이 부과될 수 있습니 다. 5.x 6.x 1. 6.0에 대한 주요 변경 사항을 검토하여 인덱스 또는 애플리 케이션을 조정할 필요가 있는지 확인하십시오. 다른 고려 사 항은 Elasticsearch 업데이트 (p. 101)의 표 단원을 참조하 십시오. 2. 5.x 도메인의 수동 스냅샷을 생성합니다. 3. 6.x 도메인을 생성합니다. 4. 원래 도메인의 스냅샷을 6.x 도메인에 복원합니다. 5. 5.x 도메인이 더 이상 필요 없는 경우에는 삭제합니다. 삭제 하지 않으면 해당 도메인에 계속 요금이 부과될 수 있습니 다. 5.x 5.6 1. 5.x 도메인의 수동 스냅샷을 생성합니다. 2. 5.6 도메인을 생성합니다. 104
스냅샷을 사용하여 데이터를 마이그레이션 구 버전 새 버전 마이그레이션 프로세스 3. 원래 도메인의 스냅샷을 5.6 도메인에 복원합니다. 4. 원래 도메인이 더 이상 필요 없는 경우에는 삭제합니다. 삭 제하지 않으면 해당 도메인에 계속 요금이 부과될 수 있습니 다. 2.3 6.x Elasticsearch 2.3 스냅샷은 6.x와 호환되지 않습니다. 데이터를 2.3에서 6.x로 직접 마이그레이션하려면 새 도메인에서 인덱스 를 수동으로 다시 만들어야 합니다. 또는 이 표의 2.3 -> 5.x 단계를 따라 새 5.x 도메인에서 _reindex 작업을 수행하여 2.3 인덱스를 5.x 인덱스로 변환한 후 5.x -> 6.x 단계를 따를 수 있습니다. 2.3 5.x 1. 5.0에 대한 주요 변경 사항을 검토하여 인덱스 또는 애플리 케이션을 조정할 필요가 있는지 확인하십시오. Note 현재 Elasticsearch 마이그레이션 플러그인을 사용 할 수 없습니다. 2. 2.3 도메인의 수동 스냅샷을 생성합니다. 3. 5.x 도메인을 생성합니다. 4. 2.3 도메인의 스냅샷을 5.x 도메인에 복원합니다. 5. 2.3 도메인이 더 이상 필요 없는 경우에는 삭제합니다. 삭제 하지 않으면 해당 도메인에 계속 요금이 부과될 수 있습니 다. 1.5 5.x Elasticsearch 1.5 스냅샷은 5.x와 호환되지 않습니다. 데이터를 1.5에서 5.x로 마이그레이션하려면 새 도메인에서 인덱스를 수 동으로 다시 만들어야 합니다. Important 1.5 스냅샷은 2.3과 호환되지만, Amazon ES 2.3 도메 인에서는 _reindex 작업을 지원하지 않습니다. 인덱 스를 다시 만들 수는 없기 때문에 1.5 도메인에서 만든 인덱스는 2.3 스냅샷에서 5.x 도메인으로 복원할 수 없 습니다. 1.5 2.3 1. _plugin/migration Elasticsearch 플러그인을 사용하여 2.3 버전으로 직접 업그레이드할 수 있는지 알아보십시오. 마이그레이션 전에 데이터를 변경해야 할 수 있습니다. a. 웹 브라우저에서 http://domain_endpoint/ _plugin/migration/을 엽니다. b. Run checks now(지금 확인 실행)를 선택합니다. c. 결과를 검토하고, 필요하면 지침에 따라 데이터를 변경합 니다. 2. 1.5 도메인의 수동 스냅샷을 생성합니다. 3. 2.3 도메인을 생성합니다. 4. 1.5 도메인의 스냅샷을 2.3 도메인에 복원합니다. 5. 1.5 도메인이 더 이상 필요 없는 경우에는 삭제합니다. 삭제 하지 않으면 해당 도메인에 계속 요금이 부과될 수 있습니 다. 105
Kibana Kibana 및 Logstash 이 장에서는 Kibana 및 Logstash에 Amazon Elasticsearch Service를 사용할 때 고려해야 할 문제를 설명합 니다. 주제 Kibana (p. 106) Logstash 플러그인을 사용하여 대량 데이터 로드 (p. 109) Kibana Kibana는 Elasticsearch와 연동되도록 설계된 인기 있는 오픈소스 시각화 도구입니다. Amazon ES는 각 Amazon ES 도메인에 Kibana를 설치합니다. Amazon ES 콘솔의 도메인 대시보드에서 Kibana 링크를 찾을 수 있습니다. URL은 elasticsearch-domain-endpoint/_plugin/kibana/입니다. 이 기본 Kibana 설 치를 이용한 쿼리는 제한 시간이 300초입니다. 다음 단원에서는 일부 Kibana 일반 사용 사례에 대해 다룹니다. the section called Kibana에 대한 액세스 제어 (p. 106) the section called WMS 맵 서버를 사용하도록 Kibana 구성 (p. 109) the section called Amazon ES에 로컬 Kibana 서버 연결 (p. 109) Kibana에 대한 액세스 제어 Kibana는 IAM 사용자와 역할을 기본으로 지원하지는 않지만, Amazon ES가 Kibana: 액세스 제어를 위한 다 양한 솔루션을 제공합니다. 도메인 구성 액세스 제어 옵션 퍼블릭 액세스 구성 Kibana에 대한 인증 (p. 111). 프록시 서버 (p. 106)를 이용하거나 이용하지 않고 IP 기반 액세스 정책 (p. 51)을 구성합니다. VPC 액세스 구성 Kibana에 대한 인증 (p. 111). 프록시 서버를 이용하거나 이용하지 않고 오픈 액세스 정책 을 구성하고, 보안 그룹을 이용해 액세스를 제어합니다. 자세 한 내용은 the section called VPC 도메인 액세스 정책에 대 하여 (p. 128) 단원을 참조하십시오. 프록시를 사용하여 Kibana에서 Amazon ES에 액세스 Note 이 프로세스는 도메인이 퍼블릭 액세스를 사용하며 Kibana에 대한 인증 (p. 111)를 사용하고 싶지 않을 때만 적용됩니다. the section called Kibana에 대한 액세스 제어 (p. 106) 단원을 참조하십 시오. Kibana는 JavaScript 애플리케이션이므로 요청은 사용자의 IP 주소에서 발생합니다. 각 사용자에게 Kibana 액세스 권한을 주기 위해 필요한 화이트리스트의 IP 주소 수가 늘어나기 때문에, IP 기반 액세스 제어는 실용 적이지 않을 수 있습니다. 한 가지 해결 방법은 Kibana와 Amazon ES 사이에 프록시 서버를 배치하는 것입니 106
Kibana에 대한 액세스 제어 다. 그런 다음 하나의 IP 주소인 프록시의 요청만 허용하는 IP 기반 액세스 정책을 추가할 수 있습니다. 다음 다이어그램은 이 구성을 보여 줍니다. 1. 이것이 Amazon ES 도메인입니다. IAM은 이 도메인에 대해 인증된 액세스 권한을 제공합니다. 추가 IP 기 반 액세스 정책은 프록시 서버에 대한 액세스를 제공합니다. 2. 이 프록시 서버는 Amazon EC2 인스턴스에서 실행됩니다. 3. 다른 애플리케이션은 서명 버전 4 서명 프로세스를 사용하여 인증 요청을 Amazon ES로 보낼 수 있습니 다. 4. Kibana 클라이언트는 프록시를 통해 Amazon ES 도메인에 연결합니다. 이러한 유형의 구성을 활성화하려면 역할 및 IP 주소를 지정하는 리소스 기반 정책이 필요합니다. 다음은 샘 플 정책입니다. "Version": "2012-10-17", "Statement": [ "Resource": "arn:aws:es:us-west-2:111111111111:domain/my-domain/*", "Principal": "AWS": "arn:aws:iam::111111111111:role/allowedrole1" "Action": [ "es:eshttpget" ], 107
Kibana에 대한 액세스 제어 "Effect": "Allow" ] "Effect": "Allow", "Principal": "AWS": "*" "Action": "es:*", "Condition": "IpAddress": "aws:sourceip": [ "123.456.789.123" ] "Resource": "arn:aws:es:us-west-2:111111111111:domain/my-domain/*" 탄력적 IP 주소를 사용하여 프록시 서버를 실행하는 EC2 인스턴스를 구성하는 것이 좋습니다. 이러한 방식 으로 필요한 경우 인스턴스를 대체하고 동일한 퍼블릭 IP 주소를 계속 연결할 수 있습니다. 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서의 탄력적 IP 주소를 참조하십시오. 프록시 서버 및 Kibana에 대한 인증 (p. 111)를 사용한다면, Kibana와 Amazon Cognito용 설정을 추가해 redirect_mismatch 오류를 방지해야 할 수도 있습니다. 다음 nginx.conf 예를 참조하십시오. server listen 443; server_name $host; rewrite ^/$ https://$host/_plugin/kibana redirect; ssl_certificate ssl_certificate_key /etc/nginx/cert.crt; /etc/nginx/cert.key; ssl on; ssl_session_cache builtin:1000 shared:ssl:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; location /_plugin/kibana # Forward requests to Kibana proxy_pass https://$kibana_host/_plugin/kibana; # Handle redirects to Cognito proxy_redirect https://$cognito_host https://$host; # Update cookie domain and path proxy_cookie_domain $kibana_host $host; proxy_cookie_path / /_plugin/kibana/; # Response buffer settings proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; location ~ \/(log sign fav forgot change saml oauth2) # Forward requests to Cognito proxy_pass https://$cognito_host; # Handle redirects to Kibana 108
WMS 맵 서버를 사용하도록 Kibana 구성 proxy_redirect https://$kibana_host https://$host; # Update cookie domain proxy_cookie_domain $cognito_host $host; WMS 맵 서버를 사용하도록 Kibana 구성 라이선스 제한으로 인해, Amazon ES 도메인에 기본 설치된 Kibana가 Elasticsearch 5.x 이상을 사용하 는 경우에는 타일 맵 시각화를 위한 맵 서버가 포함되어 있지 않습니다. 다음 절차에 따라 WMS(Web Map Service) 맵 서버를 사용하도록 Kibana를 구성하십시오. WMS 맵 서버를 사용하도록 Kibana를 구성하려면: 1. Kibana를 엽니다. https://console.aws.amazon.com/es/의 도메인 요약 정보에서 Kibana 링크를 찾을 수 있습니다. 2. 관리를 선택합니다. 3. 고급 설정을 선택합니다. 4. visualization:tilemap:wmsdefaults를 찾은 다음 편집 버튼을 선택하여 기본값을 수정합니다. 5. 6. [enabled]를 [true]로 바꾸고 [url]은 유효한 WMS 맵 서버의 URL로 변경합니다. (선택 사항) visualization:tilemap:wmsdefaults를 찾은 다음 편집 버튼을 선택하여 기본값을 수정합니다. 7. (선택 사항) ["layers": "0"]을 표시하려는 맵 계층 목록(쉼표로 구분)으로 변경합니다. 계층은 맵 서 비스에 따라 다릅니다. 대개 기본값 0이면 적절합니다. 8. 저장 버튼을 선택합니다. 새 기본값을 시각화에 적용하려면 Kibana를 다시 로드해야 할 수 있습니다. Note 맵 서비스에는 종종 라이선스 요금이 부과되거나 제한이 따릅니다. 어떤 맵 서버를 지정하든 간에 그러한 부분은 모두 사용자의 책임입니다. 미국 지질조사국의 맵 서비스로 테스트해 보면 유용합니 다. Amazon ES에 로컬 Kibana 서버 연결 상당한 시간을 투자하여 자체 Kibana 인스턴스를 구성한 경우, Amazon ES에서 제공하는 기본 Kibana 인스 턴스 대신(또는 추가로) 그 인스턴스를 사용할 수 있습니다. 로컬 Kibana 서버를 Amazon ES에 연결하려면: config/kibana.yml을 다음과 같이 변경합니다. kibana_index: ".kibana" elasticsearch_url: "http://elasticsearch_domain:80" http 접두사를 사용하고 명시적으로 포트 80을 지정해야 합니다. Logstash 플러그인을 사용하여 대량 데이터 로드 Logstash에서는 대량 API와 S3 플러그인을 사용하여 Amazon ES 도메인에 데이터를 업로드할 수 있는 편리 한 방법을 제공합니다. Elasticsearch에서 제공하는 기타 모든 표준 Logstash 입력 플러그인도 지원됩니다. 109
Logstash 플러그인을 사용하여 대량 데이터 로드 또한 Amazon ES는 표준 Elasticsearch 출력 플러그인과 Logstash 이벤트에 서명하여 Amazon ES로 내보내 는 logstash-output-amazon-es 플러그인 등 두 가지 Logstash 출력 플러그인을 지원합니다. Logstash의 고유한 로컬 인스턴스를 설치하고 Logstash 구성 파일을 다음과 같이 변경하여 Amazon ES와 통합하도록 해야 합니다. 구성 필드 입력 출력 플러그인 설명 bucket 입력 Amazon ES 도메인에 로드하려는 데이터가 포함된 Amazon S3 버킷을 지정합니다. region 입력 Amazon S3 버킷이 있는 AWS 리전을 지정합니다. hosts 결과 대상 Amazon ES 도메인의 서비스 엔드포인트를 지정합 니다. ssl 결과 SSL을 사용하여 Amazon ES에 연결할지 여부를 지정합 니다. 이 예에서는 아래 작업을 수행하도록 Logstash를 구성합니다. 출력 플러그인이 Amazon ES 엔드포인트 가리키기 S3에서 입력 플러그인이 wikipedia-stats-log 버킷 가리키기 SSL을 사용하여 Amazon ES에 연결 input s3 bucket => "wikipedia-stats-log" access_key_id => "lizards" secret_access_key => "lollipops" region => "us-east-1" output elasticsearch hosts => "search-logs-demo0-cpxczkdpi4bkb4c44g3csyln5a.us-east-1.es.example.com" ssl => true Note 이전 예의 서비스 요청에는 서명이 되어 있어야 합니다. 요청 서명에 대한 자세한 내용은 the section called Amazon ES 요청 서명 및 인증 (p. 52) 단원을 참조하십시오. logstash-outputamazon-es 출력 플러그인을 사용하여 Logstash 이벤트에 서명하고 해당 이벤트를 Amazon ES로 내보냅니다. 지침은 플러그인 README를 참조하십시오. 110
사전 조건 Kibana에 대한 Amazon Cognito 인증 Amazon Elasticsearch Service는 Amazon Cognito를 사용해 Kibana (p. 106)의 사용자 이름과 암호를 보호 합니다. 이 인증 기능은 선택 사항이며 Elasticsearch 5.1 이상을 이용한 도메인에서만 사용할 수 있습니다. 인증을 구성하지 않아도 (p. 51)IP 기반의 액세스 정책과 (p. 106)프록시 서버Amazon Cognito를 이용해 Kibana를 보호할 수 있습니다. 인증 프로세스의 많은 부분은 Amazon Cognito에서 진행되지만 이 장에서 Amazon ES 도메인과 호환되도록 Amazon Cognito 리소스를 구성하는 지침과 요건을 알려드립니다. 표준 요금은 모든 Amazon Cognito 리소 스에 적용됩니다. Tip Kibana에 Amazon Cognito 인증을 사용하도록 도메인을 처음 구성하는 경우 콘솔을 사용할 것을 권 합니다. Amazon Cognito 리소스는 사용자 지정 기능이 뛰어난데, 콘솔은 사용자에게 중요한 기능 을 식별하고 이해하는 데 도움이 됩니다. 주제 사전 조건 (p. 111) Amazon ES 도메인 구성 (p. 113) 인증된 역할 허용 (p. 115) 자격 증명 공급자 구성 (p. 115) (선택 사항) 세분화된 액세스 구성 (p. 117) (선택 사항) 로그인 페이지 사용자 지정 (p. 119) (선택 사항) 어드밴스 보안 구성 (p. 119) 테스트 (p. 119) 제한 사항 (p. 119) 일반적인 구성 문제 (p. 120) Kibana에 대한 Amazon Cognito 인증 비활성화 (p. 122) Kibana에 Amazon Cognito 인증을 사용하는 도메인 삭제 (p. 122) 사전 조건 Kibana에 대한 Amazon Cognito 인증을 구성하기 전에 충족해야 하는 사전 조건이 여럿 있습니다. Amazon ES 콘솔은 이런 리소스의 생성을 간소화해 주지만, 각 리소스의 목적을 이해해야 구성과 문제 해결에 도움이 됩니다. Kibana에 대한 Amazon Cognito 인증에는 다음 리소스가 필요합니다. Amazon Cognito 사용자 풀 Amazon Cognito ID 풀 AmazonESCognitoAccess 정책이 연결된 IAM 역할 Note 사용자 풀과 자격 증명 풀은 동일한 AWS 리전에 위치해 있어야 합니다. 동일한 사용자 풀과 자격 증명 풀 및 IAM 역할을 이용해 여러 Amazon ES 도메인에 Kibana에 대한 Amazon Cognito 인증을 추가할 수 있습니다. 자세한 내용은 the section called 제한 사항 (p. 119) 단원을 참조하십시오. 111
사용자 풀 소개 사용자 풀 소개 사용자 풀의 주된 기능은 사용자 디렉터리를 만들고 관리하는 것, 그리고 사용자가 가입하고 로그인하게 하 는 것 두 가지입니다. 사용자 풀을 생성하는 방법은 Amazon Cognito 개발자 안내서의 사용자 풀 생성을 참조 하십시오. Amazon ES에 사용할 사용자 풀을 생성할 때는 다음 사항을 고려하십시오. Amazon Cognito 사용자 풀에 도메인 이름이 있어야 합니다. Amazon ES는 이 도메인 이름을 이용해 사용 자를 Kibana에 액세스하는 로그인 페이지로 리디렉션합니다. 사용자 풀은 도메인 이름 외에 다른 기본값 이 아닌 구성은 필요하지 않습니다. 이름, 생년월일, 이메일 주소, 전화번호 등 풀의 필수 표준 속성을 지정해야 합니다. 사용자 풀을 만든 후에 는 이런 속성을 변경할 수 없으므로 이때 중요한 속성을 선택해야 합니다. 사용자 풀을 만드는 동안 사용자가 자기 계정을 만들 수 있는지 여부, 계정 암호의 최소 강도, 멀티 팩터 인 증 활성화 여부 등을 선택하십시오. 외부 자격 증명 공급자를 이용할 계획이라면 이런 설정은 중요하지 않 습니다. 기술적으로는 사용자 풀을 자격 증명 공급자로도 사용할 수 있고 동시에 외부 자격 증명 공급자로 도 사용할 수 있지만, 대부분은 어느 한쪽을 선호합니다. 사용자 풀 ID는 region_id의 형식입니다. AWS CLI 또는 AWS SDK로 Amazon ES를 구성할 생각이라면 ID를 기록에 두십시오. 자격 증명 풀 소개 자격 증명 풀을 사용하면 로그인 후 제한적 권한의 임시 역할을 사용자에게 할당할 수 있습니다. 자격 증명 풀을 생성하는 방법은 Amazon Cognito 개발자 안내서의 자격 증명 풀을 참조하십시오. Amazon ES에 사용 할 자격 증명 풀을 생성할 때는 다음 사항을 고려하십시오. Amazon Cognito 콘솔을 사용할 경우 인증되지 않은 자격 증명에 대한 액세스 활성화 확인란을 선택해야 자격 증명 풀을 만들 수 있습니다. 자격 증명 풀을 만들고 Amazon ES 도메인을 구성 (p. 113)하고 나면 Amazon Cognito에서 이 설정을 비활성화합니다. 자격 증명 풀에 외부 자격 증명 공급자를 추가할 필요는 없습니다. Amazon Cognito 인증을 사용하려고 Amazon ES를 구성할 때는 방금 만든 사용자 풀을 사용할 자격 증명 풀을 구성합니다. 자격 증명 풀을 만든 다음에는 인증 및 인증되지 않은 IAM 역할을 선택해야 합니다. 이러한 역할은 로그인 전후 사용자의 액세스 정책을 지정합니다. Amazon Cognito 콘솔을 사용하는 경우 이런 역할이 자동으로 생성됩니다. 인증 역할을 만든 후에는 ARN을 기록해 두십시오. arn:aws:iam::123456789012:role/ Cognito_identitypoolAuth_Role의 형식입니다. 자격 증명 풀 ID는 region:id-id-id-id-id의 형식입니다. AWS CLI 또는 AWS SDK로 Amazon ES를 구성할 생각이라면 ID를 기록에 두십시오. IAM 역할 소개 Amazon ES는 권한이 있어야 Amazon Cognito 사용자와 자격 증명 풀을 구성하고 이것들을 인증에 사용할 수 있습니다. 이를 위해 AWS 관리형 정책인 AmazonESCognitoAccess를 사용할 수 있습니다. 콘솔을 이 용해 Amazon ES 도메인을 생성하거나 구성할 경우 IAM 역할이 자동으로 생성되어 이 정책을 연결합니다. AWS CLI 혹은 AWS SDK 중 하나를 이용하는 경우에는 Amazon ES 도메인을 구성할 때 사용자가 직접 역할 을 생성하고 정책을 연결하며 이 역할에 대한 ARN을 지정해야 합니다. 역할은 다음과 같은 신뢰 관계를 맺고 있어야 합니다. "Version": "2012-10-17", "Statement": [ 112
Amazon ES 도메인 구성 ] "Effect": "Allow", "Principal": "Service": "es.amazonaws.com" "Action": "sts:assumerole" 방법은 IAM 사용 설명서의 AWS 서비스에 대한 권한을 위임할 역할 생성 및 IAM 정책 연결 및 분리를 참조하 십시오. Amazon ES 도메인 구성 사전 조건을 마친 후 Kibana에 Amazon Cognito를 사용하기 위해 Amazon ES 도메인을 구성할 수 있습니다. Note Amazon Cognito를 모든 AWS 리전에서 사용할 수 있는 것은 아닙니다. 지원되는 리전의 목록은 AWS 리전 및 엔드포인트를 참조하십시오. Amazon ES에 사용한 것과 똑같은 리전을 Amazon Cognito에 사용할 필요는 없습니다. Amazon Cognito 인증 구성(콘솔) 콘솔에서는 IAM 역할 (p. 112)이 자동으로 생성되기 때문에 구성하기가 가장 간단합니다. 콘솔로 Kibana에 대한 Amazon Cognito 인증을 사용하는 도메인을 만들려면 표준 Amazon ES 권한 외에도 다음과 같은 권한 모음이 있어야 합니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Action": [ "iam:getrole", "iam:passrole", "iam:createrole", "iam:attachrolepolicy", "ec2:describevpcs", "cognito-identity:listidentitypools", "cognito-idp:listuserpools" ], "Resource": "*" ] IAM 역할 (p. 112)이 이미 존재한다면 다음과 같이 더 적은 권한만 필요합니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Action": [ "ec2:describevpcs", "cognito-identity:listidentitypools", "cognito-idp:listuserpools" ], "Resource": "*" 113
Amazon Cognito 인증 구성(AWS CLI) ] "Effect": "Allow", "Action": [ "iam:getrole", "iam:passrole" ], "Resource": "arn:aws:iam::123456789012:role/cognitoaccessforamazones" Kibana에 대한 Amazon Cognito 인증을 구성하려면(콘솔) 1. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. 2. Analytics에서 Elasticsearch 서비스를 선택합니다. 3. 탐색 창의 My domains(내 도메인)에서 구성할 도메인을 선택합니다. 4. Configure cluster(클러스터 구성)를 선택합니다. 5. Kibana authentication(kibana 인증)에서 Enable Amazon Cognito for authentication(amazon Cognito 인증 활성화)를 선택하십시오. 6. 리전의 경우 Amazon Cognito 사용자 풀과 자격 증명 풀이 포함된 리전을 선택하십시오. 7. Cognito 사용자 풀에는 사용자 풀을 하나 선택하거나 만듭니다. 자세한 지침은 the section called 사용 자 풀 소개 (p. 112) 단원을 참조하십시오. 8. Cognito 자격 증명 풀의 경우 자격 증명 풀을 하나 선택하거나 만듭니다. 자세한 지침은 the section called 자격 증명 풀 소개 (p. 112) 단원을 참조하십시오. Note Create new user pool(새 사용자 풀 생성) 및 Create new identity pool(새 자격 증명 풀 생성) 링 크는 Amazon Cognito 콘솔로 연결되며, 이런 리소스를 수동으로 만들어야 합니다. 이 프로세 스는 자동이 아닙니다. 자세한 내용은 the section called 사전 조건 (p. 111) 단원을 참조하 십시오. 9. IAM 역할의 경우 기본값을 사용(권장)하거나 새 이름을 입력합니다. 이 역할의 목적을 자세히 알아보려 면 the section called IAM 역할 소개 (p. 112) 단원을 참조하십시오. 10. 제출을 선택합니다. 도메인이 처리를 마친 후 추가 구성 단계는 the section called 인증된 역할 허용 (p. 115) 및 the section called 자격 증명 공급자 구성 (p. 115)를 참조하십시오. Amazon Cognito 인증 구성(AWS CLI) Amazon ES 도메인을 구성하려면 --cognito-options 파라미터를 사용합니다. 다음 구문은 createelasticsearch-domain 및 update-elasticsearch-domain-config 명령 둘 다에서 사용됩니다: --cognito-options Enabled=true,UserPoolId="user-pool-id",IdentityPoolId="identity-poolid",RoleArn="arn:aws:iam::123456789012:role/CognitoAccessForAmazonES" 예 다음은 CognitoAccessForAmazonES 역할을 이용하여 Kibana에 Amazon Cognito 인증을 사용하는 도메 인을 us-east-1 리전에 만들어 Cognito_Auth_Role에 도메인 액세스를 제공하는 예입니다. aws es create-elasticsearch-domain --domain-name my-domain --region us-east-1 --accesspolicies ' "Version":"2012-10-17", "Statement":["Effect":"Allow","Principal":"AWS": ["arn:aws:iam::123456789012:role/ 114
Amazon Cognito 인증 구성(AWS SDK) Cognito_Auth_Role"]"Action":"es:ESHttp*","Resource":"arn:aws:es:useast-1:123456789012:domain/*" ]' --elasticsearch-version "6.0" --elasticsearchcluster-config InstanceType=m4.xlarge.elasticsearch,InstanceCount=1 --ebs-options EBSEnabled=true,VolumeSize=10 --cognito-options Enabled=true,UserPoolId="us-east-1_123456789",IdentityPoolId="useast-1:12345678-1234-1234-1234-123456789012",RoleArn="arn:aws:iam::123456789012:role/ CognitoAccessForAmazonES" 도메인이 처리를 마친 후 추가 구성 단계는 the section called 인증된 역할 허용 (p. 115) 및 the section called 자격 증명 공급자 구성 (p. 115)를 참조하십시오. Amazon Cognito 인증 구성(AWS SDK) AWS SDK(Android 및 ios SDK 제외)는 Amazon ES 구성 API 참조 (p. 181) 및 CognitoOptions 작업에 대한 CreateElasticsearchDomain 파라미터를 비롯하여 UpdateElasticsearchDomainConfig에 정의된 모든 작업을 지원합니다. AWS SDK 설치 및 사용에 대한 자세한 내용은 AWS 소프트웨어 개발 키 트를 참조하십시오. 도메인이 처리를 마친 후 추가 구성 단계는 the section called 인증된 역할 허용 (p. 115) 및 the section called 자격 증명 공급자 구성 (p. 115)를 참조하십시오. 인증된 역할 허용 기본적으로 the section called 자격 증명 풀 소개 (p. 112)의 지침에 따라 구성한 인증된 IAM 역할은 Kibana 액세스에 필요한 권한이 없습니다. 역할에 추가 권한을 부여해야 합니다. 자격 증명 기반의 (p. 50) 정책에 이런 권한을 포함시킬 수도 있으나, 인증된 사용자가 모든 Amazon ES 도메 인에 액세스할 권한을 원하는 경우가 아니라면 리소스 기반 (p. 49)의 정책을 도메인 하나에 연결하는 것이 더 흔한 접근 방식입니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "AWS": [ "arn:aws:iam::123456789012:role/cognito_identitypoolauth_role" ] "Action": [ "es:eshttp*" ], "Resource": "arn:aws:es:region:123456789012:domain/domain-name/*" ] Amazon ES 도메인에 리소스 기반 정책을 추가하는 방법에 대한 자세한 내용은 the section called 액세스 정책 구성 (p. 18) 단원을 참조하십시오. 자격 증명 공급자 구성 Kibana에 Amazon Cognito 인증을 사용하려고 도메인을 구성할 때, Amazon ES는 사용자 풀에 앱 클라이언 트를 추가하고 그 사용자 풀을 자격 증명 풀에 인증 공급자로 추가합니다. 다음은 Amazon Cognito 콘솔의 앱 클라이언트 설정 페이지에 보이는 스크린샷입니다. 115
자격 증명 공급자 구성 Warning 앱 클라이언트의 이름을 바꾸거나 삭제하지 마십시오. 사용자 풀을 어떻게 구성했느냐에 따라 사용자 계정을 수동으로 만들어야 할 수도 있고, 사용자가 직접 스스 로의 계정을 만들게 할 수도 있습니다. 이러한 설정이 허용되는 경우 추가 조치가 필요 없습니다. 그러나 외 부 자격 증명 공급자 사용을 선호하는 사람들이 많습니다. SAML 2.0 자격 증명 공급자를 활성화하려면 SAML 메타데이터 문서를 제공해야 합니다. Login with Amazon, Facebook, Google 같은 소셜 자격 증명 공급자를 사용하려면 이런 공급자들에게서 받은 앱 ID와 앱 암호를 가지고 있어야 합니다. 자격 증명 공급자는 자유롭게 조합하여 사용할 수 있습니다. 공급자를 추가 하면 아래 스크린샷에 보이는 대로 로그인 페이지에 옵션이 추가됩니다. 사용자 풀을 구성하는 가장 쉬운 방법은 Amazon Cognito 콘솔을 사용하는 것입니다. 외부 자격 증명 공급자 를 추가하려면 자격 증명 공급자 페이지를 사용하고, Amazon ES 도메인의 앱 클라이언트에 자격 증명 공급 자를 활성화하거나 비활성화려면 앱 클라이언트 설정 페이지를 사용하십시오. 예를 들어 자신의 SAML 자격 증명 공급자를 사용하고 Cognito 사용자 풀을 자격 증명 공급자로 비활성화하려는 경우가 있을 수 있습니다. 116
(선택 사항) 세분화된 액세스 구성 방법은 Amazon Cognito 개발자 안내서의 사용자 풀의 연동 사용 및 사용자 풀 앱에 대한 자격 증명 공급자 설정 지정을 참조하십시오. (선택 사항) 세분화된 액세스 구성 기본 자격 증명 풀 설정은 로그인한 모든 사용자를 동일한 IAM 역할(Cognito_identitypoolAuth_Role) 에 할당한다는 사실을 눈치채셨을 것입니다. 다시 말해 모든 사용자는 동일한 AWS 리소스에 액세스할 수 있 습니다. 더 세분화된 액세스 제어를 원할 경우(예를 들어, 귀하 조직의 분석가에게는 Amazon ES 도메인 여 덟 개에 모두 액세스할 권한을 주고 그 외 모든 사용자는 다섯 개에만 액세스 권한을 주는 경우), 다음 두 가지 옵션 중에서 선택할 수 있습니다. 사용자 그룹을 생성하고 자격 증명 공급자가 사용자 인증 토큰을 기반으로 IAM 역할을 선택하도록 구성합 니다. 자격 증명 공급자가 하나 이상의 규칙을 기반으로 IAM 역할을 선택하도록 구성합니다. 다음 스크린샷에 보이는 것처럼 Amazon Cognito 콘솔의 자격 증명 풀 편집 페이지를 이용해 이러한 옵션을 구성합니다. 117
사용자 그룹과 토큰 사용자 그룹과 토큰 사용자 그룹을 생성할 때 그 그룹의 구성원에 대한 IAM 역할을 선택합니다. 그룹 생성에 대한 자세한 내용은 Amazon Cognito 개발자 안내서에서 사용자 그룹을 참조하십시오. 118
규칙 사용자 그룹을 하나 이상 만든 후 인증 공급자를 구성하여 사용자에게 자격 증명 풀의 기본 역할 대신 그룹 역할을 할당할 수 있습니다. 토큰으로부터 역할 선택을 선택합니다. 그런 다음 기본 인증된 역할 사용 또는 거부 중 하나를 선택하여 자격 증명 풀이 그룹의 일부가 아닌 사용자를 취급하는 방식을 지정합니다. 규칙 규칙은 기본적으로 Amazon Cognito가 순차적으로 평가하는 일련의 if 문입니다. 예를 들어 사용자의 이메 일 주소에 @corporate이 포함된 경우, Amazon Cognito는 그 사용자를 Role_A로 할당합니다. 사용자의 이 메일 주소에 @subsidiary가 포함된 경우에는 Role_B로 할당합니다. 그렇지 않은 경우 사용자에게 기본 인증된 역할을 할당합니다. 자세한 내용은 Amazon Cognito 개발자 안내서의 규칙 기반 매핑을 사용하여 사용자에게 역할 할당을 참조 하십시오. (선택 사항) 로그인 페이지 사용자 지정 Amazon Cognito 콘솔의 UI 사용자 지정 페이지에서는 사용자 지정 로고를 업로드하고 로그인 페이지에 대 한 CSS를 변경할 수 있습니다. CSS 속성에 대한 지침 및 전체 목록은 Amazon Cognito 개발자 안내서의 사 용자 풀에 대한 앱 UI 사용자 지정 설정 지정을 참조하십시오. (선택 사항) 어드밴스 보안 구성 Amazon Cognito 사용자 풀은 멀티 팩터 인증, 손상된 자격 증명 확인, 조정 인증과 같은 어드밴스 보안 기능 을 지원합니다. 자세한 내용은 Amazon Cognito 개발자 안내서의 테이블 관리를 참조하십시오. 테스트 구성에 만족하면 사용자 경험이 기대에 부합하는지 확인하십시오. Kibana에 액세스하려면 1. 웹 브라우저에서 https://elasticsearch-domain/_plugin/kibana/로 이동합니다. 2. 3. 선호하는 자격 증명을 사용하여 로그인합니다. Kibana가 로드되면 인덱스 패턴을 한 개 이상 구성합니다. Kibana는 이러한 패턴을 사용하여 분석할 인 덱스를 식별하기 때문입니다. *를 입력하고 다음 단계를 선택한 후 Create index pattern(인덱스 패턴 생 성)을 선택합니다. 4. 데이터를 검색하거나 탐색하려면 Discover(검색)를 선택합니다. 이 과정의 어느 단계든 실패하면 the section called 일반적인 구성 문제 (p. 120)에서 문제 해결 정보를 확 인하십시오. 제한 사항 Amazon Cognito에는 다양한 리소스에 대한 소프트웨어 제한이 있습니다. 많은 수의 Amazon ES 도메인에 Kibana 인증을 사용하려면 Amazon Cognito의 제한 값을 확인하고 필요에 따라 한도 증가를 요청하십시오. 각 Amazon ES 도메인은 사용자 풀에 앱 클라이언트를 추가하여 자격 증명 풀에 인증 공급자를 추가합니다. 10개 이상의 도메인에 Kibana 인증을 사용할 경우 "자격 인증 풀당 최대 Amazon Cognito 사용자 풀 공급자" 제한에 걸릴 수도 있습니다. 제한을 초과할 경우 Kibana에 Amazon Cognito 인증을 사용하려고 구성을 시도 하는 모든 Amazon ES 도메인은 처리 중 구성 상태에 고착될 수 있습니다. 119
일반적인 구성 문제 일반적인 구성 문제 다음 표는 일반적인 구성 문제와 해결책 목록입니다. Amazon ES 구성 문제 솔루션 Amazon ES can't create the role(콘솔) 올바른 IAM 권한이 없습니다. the section called Amazon Cognito 인증 구성(콘솔) (p. 113)에 지정된 권한을 추가하십 시오. User is not authorized to perform: iam:passrole on resource CognitoAccessForAmazonES(콘솔) IAM 역할 (p. 112)에 대한 iam:passrole 권한이 없습니다. 사용자 계정에 다음 정책을 연결합니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Action": [ "iam:passrole" ], "Resource": "arn:aws:iam::123456789012:role/ service-role/cognitoaccessforamazones" ] 또는 IAMFullAccess 정책을 연결할 수 있습니다. User is not authorized to perform: cognitoidentity:listidentitypools on resource Amazon Cognito에 대한 읽기 권한이 없습니다. 사용자 계정에 AmazonCognitoReadOnly 정책을 연결하십시오. An error occurred (ValidationException) when calling the CreateElasticsearchDomain operation: Amazon Elasticsearch must be allowed to use the passed role Amazon ES가 IAM 역할의 신뢰 관계에 지정되지 않았습니다. 역할이 the section called IAM 역할 소개 (p. 112)에 지정 된 신뢰 관계를 사용하는지 확인하십시오. 또는 콘솔을 이용해 Amazon Cognito 인증을 구성하십시오. 콘솔에서 자동으로 역 할을 만들어줍니다. An error occurred (ValidationException) when calling the CreateElasticsearchDomain operation: User is not authorized to perform: cognito-idp:action on resource: user pool --cognito-options에 지정된 역할에 Amazon Cognito 액세스 권한이 없습니다. 역할에 AWS 관리 AmazonESCognitoAccess 정책이 연결되었는지 확인하십시 오. 또는 콘솔을 이용해 Amazon Cognito 인증을 구성하십시오. 콘솔에서 자동으로 역할을 만들어줍니다. An error occurred (ValidationException) when calling the CreateElasticsearchDomain operation: User pool does not exist Amazon ES가 사용자 풀을 찾을 수 없습니다. 사용자 풀을 생 성했고 ID가 올바른지 확인합니다. ID를 찾으려면 Amazon Cognito 콘솔을 이용하거나 다음 AWS CLI 명령을 이용합니다. 120
일반적인 구성 문제 문제 솔루션 aws cognito-idp list-user-pools --max-results 60 -region region An error occurred (ValidationException) when calling the CreateElasticsearchDomain operation: IdentityPool not found Amazon ES가 자격 증명 풀을 찾을 수 없습니다. 사용자 풀을 생성했고 ID가 올바른지 확인합니다. ID를 찾으려면 Amazon Cognito 콘솔을 이용하거나 다음 AWS CLI 명령을 이용합니다. An error occurred (ValidationException) when calling the CreateElasticsearchDomain operation: Domain needs to be specified for user pool 사용자 풀에 도메인 이름이 없습니다. Amazon Cognito 콘솔 또 는 다음 AWS CLI 명령을 이용해 도메인 이름을 구성할 수 있습 니다. aws cognito-identity list-identity-pools --maxresults 60 --region region aws cognito-idp create-user-pool-domain --domain name --user-pool-id id Kibana 액세스 문제 솔루션 로그인 페이지에 선호하는 자격 증명 공 급자가 보이지 않습니다. the section called 자격 증명 공급자 구성 (p. 115)에 지정한 대로 Amazon ES 앱 클라이언트에 자격 증명 공급자를 활성화 했는지 확인하십시오. 로그인 페이지가 나의 조직과 연결된 것 처럼 보이지 않습니다. the section called (선택 사항) 로그인 페이지 사용자 지 정 (p. 119) 단원을 참조하십시오. 나의 로그인 자격 증명이 통하지 않습니 다. the section called 자격 증명 공급자 구성 (p. 115)에 지정한 대로 자격 증명 공급자를 구성했는지 확인하십시오. 사용자 풀을 자격 증명 공급자로 사용하는 경우, 계정이 존재하 고 Amazon Cognito 콘솔의 User and groups(사용자 및 그룹) 페이지에서 확인을 받았는지 확인하십시오. Kibana가 전혀 로드되지 않거나 올바로 작동하지 않습니다. Amazon Cognito 인증된 역할이 Kibana에 액세스하고 사용하 려면 그 도메인에 대한 es:eshttp* 권한이 필요합니다(/*). the section called 인증된 역할 허용 (p. 115)에 지정된 대로 액세스 정책을 추가했는지 확인하십시오. Invalid identity pool configuration. Check assigned IAM roles for this pool. Amazon Cognito가 인증된 역할을 위임할 수 없습니다. 자격 증 명 풀에 새 역할을 만들지 않고 기존에 있던 역할을 사용한 경 우, 인증 역할에 대한 신뢰 관계를 수정하십시오. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "Federated": "cognito-identity.amazonaws.com" "Action": "sts:assumerolewithwebidentity" ] 121
Kibana에 대한 Amazon Cognito 인증 비활성화 문제 솔루션 또는 Amazon Cognito 콘솔을 사용하여 새 역할을 생성할 수 있 습니다. Token is not from a supported provider of this identity pool. 이 일반적인 오류는 사용자 풀에서 앱 클라이언트를 삭제할 때 발생합니다. 새 브라우저 세션에서 Kibana를 열어 보십시오. Kibana에 대한 Amazon Cognito 인증 비활성화 다음 절차에 따라 Kibana에 대한 Amazon Cognito 인증을 비활성화합니다. Kibana에 대한 Amazon Cognito 인증을 비활성화하려면(콘솔) 1. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. 2. Analytics에서 Elasticsearch 서비스를 선택합니다. 3. 4. 탐색 창의 My domains(내 도메인)에서 구성할 도메인을 선택합니다. Configure cluster(클러스터 구성)를 선택합니다. 5. Kibana authentication(kibana 인증)에서 Enable Amazon Cognito for authentication(amazon Cognito 인증 활성화) 확인란을 지우십시오. 제출을 선택합니다. 6. Important Amazon Cognito 사용자 풀과 자격 증명 풀이 더 이상 필요하지 않으면 삭제하십시오. 그렇지 않으 면 계속 요금이 부과될 수 있습니다. Kibana에 Amazon Cognito 인증을 사용하는 도메인 삭제 Kibana에 Amazon Cognito 인증을 이용하는 도메인이 처리 중 구성 상태에서 고착되지 않게 하려면, Amazon ES 도메인을 먼저 삭제한 다음 연결된 Amazon Cognito 사용자 풀과 자격 증명 풀을 삭제해야 합니 다. 122
차이 알림 이 알림 기능은 하나 이상의 Elasticsearch 인덱스의 데이터가 특정 조건을 충족하면 사용자에게 알립니다. 예를 들어 애플리케이션이 1시간에 HTTP 503 오류를 6개 이상 기록하면 이메일을 받거나, 지난 20분간 인 덱싱된 새 문서가 없으면 개발자에게 호출할 수 있습니다. 시작하려면 Kibana를 열고 Alerting(알림)을 선택 합니다. 알림을 사용하려면 Elasticsearch 6.2 이상이 필요합니다. 이 기능의 전체 설명서는 Open Distro for Elasticsearch documentation에서 확인할 수 있습니다. 차이 Elasticsearch용 Open Distro와 비교했을 때, Amazon Elasticsearch Service 알림 기능에는 Amazon SNS 지 원 및 고정된 설정이라는 두 가지 눈에 띄는 차이가 있습니다. Amazon SNS 지원 Amazon ES는 알림에 Amazon SNS를 지원합니다. Amazon SNS와의 이 통합은 표준 대상(Slack, 사용자 지정 웹후크, Amazon Chime) 외에도, 알림 기능이 이메일을 전송하고, 문자 메시지를 보내며, 심지어 SNS 주제를 사용하여 AWS Lambda 함수를 실행할 수도 있음을 뜻합니다. Amazon SNS에 대한 자세한 내용은 Amazon Simple Notification Service 개발자 안내서를 참조하십시오. Amazon SNS를 대상으로 추가하려면 1. Kibana를 엽니다. 2. Alerting(알림)을 선택합니다. 3. 대상 탭을 선택한 후, 대상 추가를 선택합니다. 4. 대상의 고유한 이름을 입력합니다. 5. 유형에서 Amazon SNS를 선택합니다. 6. &SNS; 주제 ARN을 입력합니다. 7. 최소한 다음과 같은 신뢰 관계 및 권한이 있는 계정의 IAM 역할에 대한 ARN을 입력합니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "Service": "es.amazonaws.com" "Action": "sts:assumerole" ] "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Action": "sns:publish", "Resource": "sns-topic-arn" ] 123
알림 설정 8. 생성을 선택합니다. 알림 설정 Elasticsearch용 Open Distro에서 _cluster/settings API(예: opendistro.alerting.monitor.max_monitors)를 사용하여 특정 알림 설정을 수정할 수 있습니다. Amazon ES에서는 이러한 설정을 변경할 수 없습니다. 124
샘플 호출 Amazon Elasticsearch Service에 대한 SQL 지원 Amazon Elasticsearch Service에 대한 SQL 지원을 사용하면 JSON 기반 Elasticsearch 쿼리 DSL이 아닌 SQL을 사용하여 데이터를 쿼리할 수 있습니다. 이 기능은 SQL에 이미 익숙하거나 도메인을 SQL을 사용하 는 애플리케이션과 통합하려는 경우에 유용합니다. SQL 지원은 Elasticsearch 6.5 이상을 실행하는 도메인에서 사용할 수 있습니다. 전체 설명서는 Open Distro for Elasticsearch 문서에서 확인할 수 있습니다. 샘플 호출 SQL을 사용하여 데이터를 쿼리하려면 다음 형식을 사용하여 _opendistro/_sql에 HTTP 요청을 전송합 니다. POST elasticsearch_domain/_opendistro/_sql "query": "SELECT * FROM my-index LIMIT 50" 참고 사항 및 차이점 _opendistro/_sql에 대한 호출은 인덱스 이름을 요청 본문에 포함하므로 대량, mget 및 msearch API와 동일한 액세스 정책 고려 사항 (p. 58)을 갖습니다. 항상 그렇듯이, API에 권한을 부여할 때는 최소 권한의 원 칙을 따릅니다. JDBC 드라이버 JDBC(Java Database Connectivity) 드라이버를 사용하여 Amazon ES 도메인을 선호하는 비즈니스 인텔리 전스(BI) 애플리케이션과 통합할 수 있습니다. 시작하려면 GitHub 리포지토리를 참조하십시오. 다음 표에는 드라이버에 대한 버전 호환성이 요약되어 있습니다. Elasticsearch 버전 JDBC 드라이버 버전 7.1 1.0.0 6.8 0.9.0 6.7 0.9.0 6.5 0.9.0 125
Amazon Elasticsearch Service 도메인 에 대한 VPC 지원 가상 사설 클라우드(VPC)는 사용자의 AWS 계정 전용 가상 네트워크입니다. VPC는 AWS 클라우드에서 다 른 가상 네트워크와 논리적으로 분리되어 있습니다. Amazon ES 도메인과 같은 AWS 리소스를 VPC에서 시 작할 수 있습니다. Amazon ES 도메인을 VPC 안에 배치하면 인터넷 게이트웨이, NAT 디바이스 또는 VPN 연결 없이 VPC 내부 에서 Amazon ES와 다른 서비스 간에 보안 통신이 가능합니다. 모든 트래픽이 AWS 클라우드 내에서 안전하 게 보호됩니다. 논리적 격리로 인해 퍼블릭 엔드포인트를 사용할 때에 비해, VPC에 상주하는 도메인에는 보 안 계층이 하나 추가됩니다. VPC를 지원하기 위해 Amazon ES는 엔드포인트를 사용자의 VPC의 서브넷 1개 또는 2개에 배치합니다. 서 브넷은 VPC의 IP 주소 범위입니다. 도메인에서 다중 가용 영역 (p. 29)을 활성화한 경우 Amazon ES가 엔드 포인트를 서브넷 두 개에 배치합니다. 서브넷은 동일한 리전의 서로 다른 가용 영역에 있어야 합니다. 가용 영역을 한 개만 사용하는 경우 Amazon ES가 엔드포인트를 서브넷 한 개에만 배치합니다. 다음 그림은 가용 영역 한 개에 대한 VPC 아키텍처를 보여 줍니다. 다음 그림은 가용 영역 두 개에 대한 VPC 아키텍처를 보여 줍니다. 126
또한 Amazon ES는 각 데이터 노드에 대해 탄력적 네트워크 인터페이스(ENI)를 VPC에 배치합니다. Amazon ES는 ENI마다 서브넷의 IPv4 주소 범위에서 프라이빗 IP 주소를 할당합니다. 또한 IP 주소에 퍼 블릭 DNS 호스트 이름(도메인 엔드포인트)을 할당합니다. 퍼블릭 DNS 서비스를 사용하여 엔드포인트(즉 DNS 호스트 이름)을 데이터 노드의 적절한 IP 주소로 확인해야 합니다. enablednssupport 옵션을 true(기본값)로 설정하여 VPC가 Amazon 제공 DNS 서버를 사용하는 경우, Amazon ES 엔드포인트 확인이 성공합니다. VPC가 프라이빗 DNS 서버를 사용하고 서버가 신뢰할 수 있는 퍼블릭 DNS 서버에 도달하여 DNS 호스트 이름을 확인할 수 있는 경우에도 Amazon ES 엔드포인트 확인이 성공합니다. IP 주소는 변경될 수 있으므로, 항상 올바른 데이터 노드에 액세스할 수 있도록 주기적으로 도메인 엔드포인 트를 확인해야 합니다. DNS 확인 주기를 1분으로 설정할 것을 권장합니다. 클라이언트를 사용하는 경우, 클 라이언트 내 DNS 캐시도 삭제되는지 확인해야 합니다. Note Amazon ES는 VPC에서 IPv6 주소를 지원하지 않습니다. IPv6가 활성화된 VPC를 사용할 수 있지 만 도메인은 IPv4 주소를 사용하게 됩니다. 주제 제한 (p. 128) VPC 도메인 액세스 정책에 대하여 (p. 128) VPC 도메인 테스트 (p. 129) 시작하기 전에: VPC 액세스 사전 요구 사항 (p. 130) 127
제한 VPC 만들기 (p. 130) VPC 서브넷에서 IP 주소 예약 (p. 131) VPC 액세스를 위한 서비스 연결 역할 (p. 132) 퍼블릭 액세스에서 VPC 액세스로 마이그레이션 (p. 132) Amazon VPC 문서 (p. 133) 제한 현재, VPC에서 Amazon ES 도메인을 운영할 경우 다음과 같은 제약이 있습니다. VPC에서 도메인을 시작할 수도 있고 퍼블릭 엔드포인트를 사용할 수도 있지만 두 방법을 동시에 사용할 수는 없습니다. 도메인을 만들 때 한 가지를 선택해야 합니다. VPC에서 새 도메인을 시작할 경우 나중에 해당 도메인이 퍼블릭 엔드포인트를 사용하도록 변경할 수 없 습니다. 반대도 마찬가지입니다. 퍼블릭 엔드포인트를 사용하여 도메인을 만들 경우 나중에 해당 도메인을 VPC 안에 배치할 수 없습니다. 대신에 새 도메인을 만들어 데이터를 마이그레이션해야 합니다. 전용 테넌시를 사용하는 VPC 내에서 도메인을 실행할 수 없습니다. Default로 설정된 테넌시와 함께 VPC 를 사용해야 합니다. 도메인을 한 VPC에 배치한 후 다른 VPC로 이전할 수 없습니다. 하지만 서브넷 및 보안 그룹 설정을 변경 할 수 있습니다. VPC 도메인을 생성할 때, CIDR 블록에 10.x.x.x 또는 172.x.x.x를 사용하는 서브넷을 선택해야 합니다. 퍼블릭 도메인과 비교하면, VPC 도메인은 Amazon ES 콘솔에 더 적은 정보를 표시합니다. 특히 Cluster health(클러스터 상태) 탭에는 샤드 정보가 포함되지 않으며 Indices(인덱스) 탭은 아예 표시되지 않습니다. 현재 Amazon ES는 VPC 액세스 도메인에 대한 Amazon Kinesis Data Firehose와의 통합을 지원하지 않습 니다. Amazon ES와 함께 이 서비스를 사용하려면 퍼블릭 액세스 도메인을 사용해야 합니다. VPC에 상주하는 도메인에 대한 Kibana의 기본 설치에 액세스하려면 사용자가 VPC에 액세스할 수 있 어야 합니다. 이 프로세스는 네트워크 구성에 따라 다르지만, VPN 또는 관리 네트워크 연결 또는 프록 시 서버 사용이 필요할 수 있습니다. 자세한 내용은 the section called VPC 도메인 액세스 정책에 대하 여 (p. 128), Amazon VPC 사용 설명서 및 the section called Kibana에 대한 액세스 제어 (p. 106) 단원 을 참조하십시오. VPC 도메인 액세스 정책에 대하여 Amazon ES 도메인을 VPC에 배치할 경우 강력한 내부 보안 계층이 제공됩니다. 퍼블릭 액세스를 통해 도메 인을 생성할 때는 엔드포인트가 다음과 같은 형식을 따릅니다. https://search-domain-name-identifier.region.es.amazonaws.com "퍼블릭"이라는 단어에서 알 수 있듯이 이 엔드포인트는 사용자가 액세스 권한을 제어할 수 있더라 도 (p. 48)(제어해야 합니다) 인터넷에 연결된 디바이스라면 모두 액세스할 수 있습니다. 웹 브라우저에서 엔 드포인트에 액세스하는 경우에는 Not Authorized 메시지가 수신될 수도 있지만 요청이 도메인에 전달됩 니다. VPC 액세스를 통해 도메인을 생성할 때도 엔드포인트가 아래와 같이 퍼블릭 엔드포인트와 비슷한 모습을 보입니다. https://vpc-domain-name-identifier.region.es.amazonaws.com 하지만 웹 브라우저에서 엔드포인트에 액세스하려고 하면 요청 시간 제한에 걸릴 수도 있습니다. 따라서 기본적인 GET 요청을 실행할 때도 컴퓨터를 VPC에 연결할 수 있어야 합니다. VPC 연결은 종종 VPN, 관 리형 네트워크 또는 프록시 서버의 형식을 따릅니다. 다양한 형식에 대한 자세한 내용은 Amazon VPC 사 128
VPC 도메인 테스트 용 설명서에서 시나리오 및 예제를 참조하십시오. 개발 중심 예제는 the section called VPC 도메인 테스 트 (p. 129) 단원을 참조하십시오. 위와 같은 연결 요건에 더하여 VPC에서는 보안 그룹을 통해 도메인 액세스를 관리할 수 있습니다. 많은 사용 사례에서 이러한 보안 기능의 조합이면 충분하며 도메인에 개방적 액세스 정책을 적용하는 데 염려가 없을 것입니다. 개방적 액세스 정책이 인터넷에 접속한 누구나 Amazon ES 도메인에 액세스하도록 허용한다는 의미는 아닙 니다. 오히려 요청이 Amazon ES 도메인에 전달되어 연결된 보안 그룹이 요청을 허용하는 경우에 한해 도메 인이 추가 보안 검사 없이 요청을 수락한다는 것을 의미합니다. 추가 보안 계층으로 IAM 사용자 또는 역할을 지정하는 액세스 정책 사용을 권장합니다. 이러한 정책을 적용 한다는 것은 보안 그룹이 요청을 허용하고, 또한 유효한 자격 증명으로 서명되어야만 도메인이 해당 요청을 수락한다는 의미입니다. Note 보안 그룹은 이미 IP기반 액세스 정책을 사용하므로 VPC에 상주하는 Amazon ES 도메인에 IP 기반 액세스 정책을 적용할 수는 없습니다. 퍼블릭 액세스를 사용하는 경우에도 IP 기반 정책을 사용할 수 있습니다. VPC 도메인 테스트 VPC의 향상된 보안 기능을 통해 도메인 연결 및 기본 테스트 실행 작업을 실현할 수 있습니다. 이미 Amazon ES VPC 도메인이 있고 VPN 서버를 생성하지 않으려면 다음 프로세스를 시도합니다. 1. 도메인의 액세스 정책에 대해 Do not require signing request with IAM credential(iam 자격 증명으로 서명 요청이 필요하지 않음)을 선택합니다. 테스트를 마친 후에는 언제든 이 설정을 업데이트할 수 있습니다. 2. Amazon ES 도메인과 동일한 VPC, 서브넷 및 보안 그룹에 Amazon Linux Amazon EC2 인스턴스를 생성 합니다. 이 인스턴스는 테스트용이며 거의 작업할 필요가 없으므로 t2.micro와 같은 저렴한 비용의 인스턴스 유 형을 선택합니다. 인스턴스에 퍼블릭 IP 주소를 할당하고 새 키 페어를 생성하거나 기존 키 페어를 선택합 니다. 새 키를 생성하는 경우 ~/.ssh 디렉터리로 다운로드합니다. 인스턴스 생성에 대한 자세한 내용은 Amazon EC2 Linux 인스턴스 시작하기를 참조하십시오. 3. VPC에 인터넷 게이트웨이를 추가합니다. 4. VPC의 라우팅 테이블에서 새 라우팅을 추가합니다. 대상 주소에서 컴퓨터의 퍼블릭 IP 주소를 포함하는 CIDR 블록을 지정합니다. 대상에서 방금 생성한 인터넷 게이트웨이를 지정합니다. 예를 들어 컴퓨터에 123.123.123.123/32를 지정하거나 컴퓨터 범위에 123.123.123.0/24를 지정 할 수 있습니다. 5. 보안 그룹의 경우 두 가지 인바운드 규칙을 지정합니다. 유형 프로토콜 포트 범위 소스 SSH(22) TCP(6) 22 your-cidr-block HTTPS(443) TCP(6) 443 your-securitygroup-id 첫 번째 규칙은 SSH를 EC2 인스턴스로 가져옵니다. 두 번째는 EC2 인스턴스가 HTTPS를 통해 Amazon ES 도메인과 통신할 수 있게 허용합니다. 6. 터미널에서 다음 명령을 실행합니다. 129
사전 조건 ssh -i ~/.ssh/your-key.pem ec2-user@your-ec2-instance-public-ip -N -L 9200:vpc-youramazon-es-domain.region.es.amazonaws.com:443 이 명령은 https://localhost:9200에 대한 요청을 EC2 인스턴스를 통해 Amazon ES 도메인으로 전달하는 SSH 터널을 생성합니다. Elasticsearch는 기본적으로 포트 9200의 트래픽을 수신 대기합니다. 이 포트를 지정하면 로컬 Elasticsearch 설치를 시뮬레이션하지만 원하는 포트를 사용합니다. 이 명령은 피드백을 제공하지 않고 무제한 실행됩니다. 이를 중단하려면 Ctrl + C를 누릅니다. 7. 웹 브라우저에서 https://localhost:9200/_plugin/kibana/로 이동합니다. 보안 예외를 인정해야 할 수 있습니 다. 또는 curl, Postman 또는 자주 사용하는 프로그래밍 언어를 사용하여 https://localhost:9200에 요청을 보낼 수 있습니다. Tip 인증서 불일치로 인해 curl 오류가 발생하는 경우 --insecure 플래그를 시도합니다. 이 접근 방식 대신에 도메인이 AWS Cloud9를 지원하는 리전에 있는 경우, 도메인과 동일한 VPC에 EC2 환 경을 생성하고, Amazon ES 도메인 구성에 환경의 보안 그룹을 추가하고, 보안 그룹에 5단계의 HTTPS 규칙 을 추가하고, AWS Cloud9에서 웹 기반 Bash를 사용하여 curl 명령을 실행할 수 있습니다. 시작하기 전에: VPC 액세스 사전 요구 사항 VPC와 새 Amazon ES 도메인 간 연결을 활성화하기 전에 다음 작업을 수행해야 합니다. VPC 생성 VPC를 만들려면, Amazon VPC 콘솔, AWS CLI를 사용하거나 또는 AWS SDK 중 하나를 사용할 수 있습 니다. 자세한 내용은 VPC 만들기 (p. 130) 단원을 참조하십시오. VPC가 이미 있는 경우에는 이 단계를 건너뛸 수 있습니다. IP 주소 예약 Amazon ES는 VPC의 서브넷에 네트워크 인터페이스를 배치하여 도메인과 VPC 간 연결을 활성화합니다. 각 네트워크 인터페이스에는 IP 주소가 연결됩니다. 서브넷에서 네트워크 인터페이스용 IP 주소를 충분히 예약해야 합니다. 자세한 내용은 VPC 서브넷에서 IP 주소 예약 (p. 131) 단원을 참조하십시오. VPC 만들기 VPC를 만들려면, Amazon VPC 콘솔, AWS CLI 또는 AWS SDK 중 하나를 사용할 수 있습니다. VPC에 서브 넷이 한 개 있어야 하며, 다중 가용 영역 (p. 29)을 활성화할 경우에는 두 개가 있어야 합니다. 두 서브넷은 동 일한 리전의 서로 다른 가용 영역에 있어야 합니다. 다음 절차에서는 Amazon VPC 콘솔을 사용하여 퍼블릭 서브넷 1개를 포함하는 VPC를 만들고, 서브넷용 IP 주소를 예약하고, 보안 그룹을 생성하여 Amazon ES 도메인에 대한 액세스를 제어하는 방법을 설명합니다. 다른 VPC 구성은 Amazon VPC 사용 설명서의 시나리오 및 예제를 참조하십시오. VPC(콘솔)를 만들려면 1. https://console.aws.amazon.com/vpc/에서 AWS Management Console에 로그인해 Amazon VPC 콘솔 을 실행합니다. 2. 탐색 창에서 [VPC Dashboard]를 선택합니다. 130
VPC 서브넷에서 IP 주소 예약 3. [Start VPC Wizard]를 선택합니다. 4. [Select a VPC Configuration] 페이지에서 [VPC with a Single Public Subnet]을 선택합니다. 5. [VPC with a Single Public Subnet] 페이지에서 기본값을 유지하고 [Create VPC]를 선택합니다. 6. 나타나는 확인 메시지에서 [Close]를 선택합니다. 7. Amazon ES 도메인에서 다중 가용 영역 (p. 29)을 활성화하려는 경우 동일한 리전의 다른 가용 영역에 두 번째 서브넷을 생성해야 합니다. 그렇지 않으면 8단계로 건너뛰십시오. a. 탐색 창에서 서브넷을 선택합니다. b. [Create Subnet]을 선택합니다. c. 서브넷 생성 대화 상자에서 선택적으로 나중에 서브넷을 식별하기 위한 이름 태그를 생성할 수 있습 니다. d. VPC에서 방금 생성한 VPC를 선택합니다. e. 가용 영역에서 첫 번째 서브넷과는 다른 가용 영역을 선택합니다. 두 서브넷의 가용 영역은 동일한 리전에 있어야 합니다. f. IPv4 CIDR 블록에서 CIDR 블록을 유지 관리 작업 시 사용하는 데 충분한 수의 Amazon ES용 IP 주 소를 제공하도록 구성합니다. 자세한 내용은 VPC 서브넷에서 IP 주소 예약 (p. 131) 단원을 참조 하십시오. Note VPC 액세스를 사용하는 Amazon ES 도메인은 IPv6 주소를 지원하지 않습니다. IPv6가 활 성화된 VPC를 사용할 수 있지만 ENI는 IPv4 주소를 갖습니다. g. [Yes, Create]를 선택합니다. 8. 탐색 창에서 [Subnets]을 선택합니다. 9. 서브넷 목록에서 서브넷(7단계에서 두 번째 서브넷을 생성한 경우 두 서브넷)이 있는지 찾아봅니다. Available IPv4(사용 가능한 IPv4) 열에서 충분한 수의 IP 주소가 있는지 확인합니다. 10. 서브넷 ID와 가용 영역을 기록해 둡니다. 추후 Amazon ES 도메인을 시작하고 VPC에 Amazon EC2 인 스턴스를 추가할 때 이 정보가 필요합니다. 11. Amazon VPC 보안 그룹을 생성합니다. Amazon ES 도메인에 대한 액세스를 제어하는 데 이 보안 그룹 을 사용합니다. a. 탐색 창에서 [Security Groups]를 선택합니다. b. [Create Security Group]을 선택합니다. c. Create Security Group(보안 그룹 생성) 대화 상자에서 이름 태그, 그룹 이름 및 설명을 입력합니다. VPC에서 VPC의 ID를 선택합니다. d. [Yes, Create]를 선택합니다. 12. 보안 그룹의 네트워크 수신 규칙을 정의합니다. 이 규칙은 Amazon ES 도메인에 연결하도록 허용합니 다. a. 탐색 창에서 Security Groups(보안 그룹)를 선택한 후 방금 생성한 보안 그룹을 선택합니다. b. 페이지 하단에서 Inbound Rules(인바운드 규칙) 탭을 선택합니다. c. 편집을 선택하고 HTTPS(443)를 선택합니다. d. 저장을 선택합니다. 이제 Amazon VPC에서 Amazon ES 도메인을 시작 (p. 10)할 준비가 되었습니다. VPC 서브넷에서 IP 주소 예약 Amazon ES는 VPC의 서브넷(다중 가용 영역 (p. 29)을 활성화한 경우 VPC의 서브넷 두 개)에 네트워크 인 터페이스를 배치하여 도메인을 VPC에 연결합니다. 각 네트워크 인터페이스에는 IP 주소가 연결됩니다. 131
VPC 액세스를 위한 서비스 연결 역할 Amazon ES 도메인을 만들기 전에 VPC 서브넷에서 네트워크 인터페이스를 수용하는 데 충분한 IP 주소를 사용 가능해야 합니다. Amazon ES에 필요한 IP 주소 수는 다음 요소에 따라 달라집니다. 도메인 내 데이터 노드 수. (마스터 노드는 개수에 포함되지 않습니다.) 가용 영역의 수. 가용 영역 두 개 또는 세 개를 활성화할 경우 서브넷당 한 개의 가용 영역에 필요한 IP 주소 수의 절반 또는 1/3개만 필요합니다. 기본 공식은 다음과 같습니다. 각 서브넷에 예약된 IP 주소 수 = 노드 수 곱하기 3, 나누기 가용 영역 수. 예제 도메인에 10개의 데이터 노드가 있고 가용 영역이 두 개인 경우, IP 개수는 10 / 2 * 3 = 15입니다. 도메인에 10개의 데이터 노드가 있고 가용 영역이 한 개인 경우, IP 개수는 10 * 3 = 30입니다. 도메인을 만들 때 Amazon ES가 IP 주소를 예약합니다. Amazon EC2 콘솔(https:// console.aws.amazon.com/ec2/)의 네트워크 인스턴스 섹션에서 네트워크 인터페이스 및 연결된 IP 주소를 볼 수 있습니다. 설명 열은 네트워크 인터페이스와 연결된 Amazon ES 도메인을 보여줍니다. Tip Amazon ES 예약 IP 주소에 전용 서브넷을 생성하는 것이 좋습니다. 전용 서브넷을 사용하면 다른 애플리케이션 및 서비스와 중복을 방지하고 향후 클러스터를 확장해야 할 경우 추가 IP 주소 예약이 가능하게 할 수 있습니다. 자세히 알아보려면 VPC에서 서브넷 만들기 단원을 참조하십시오. VPC 액세스를 위한 서비스 연결 역할 서비스 연결 역할은 서비스가 사용자 대신 리소스를 생성하고 관리할 수 있도록 권한을 위임하는 독특한 유 형의 IAM 역할입니다. Amazon ES가 VPC에 액세스하고, 도메인 엔드포인트를 생성하고, VPC의 서브넷에 네트워크 인터페이스를 배치하려면 서비스 연결 역할이 필요합니다. Amazon ES 콘솔을 사용하여 VPC에서 도메인을 만들면 Amazon ES가 자동으로 역할을 생성합니다. 이 자 동 생성이 성공하려면 사용자가 iam:createservicelinkedrole 작업에 대한 권한을 보유해야 합니다. 자세히 알아보려면 IAM 사용 설명서의 서비스 연결 역할 권한을 참조하십시오. Amazon ES가 역할을 생성하면 IAM 콘솔을 사용하여 이 역할 (AWSServiceRoleForAmazonElasticsearchService)을 볼 수 있습니다. Note 퍼블릭 엔드포인트를 사용하는 도메인을 만들 경우, 서비스 연결 역할이 필요하지 않으므로 Amazon ES가 이 역할을 생성하지 않습니다. 이 역할 권한에 대한 모든 정보와 삭제하는 방법은 서비스 연결 역할 사용 (p. 266) 단원을 참조하십시오. 퍼블릭 액세스에서 VPC 액세스로 마이그레이션 도메인을 만들 때 도메인이 퍼블릭 엔드포인트를 사용할지 또는 VPC에 상주할지 여부를 지정합니다. 도메 인을 만든 후에는 이 옵션을 변경할 수 없습니다. 대신에 새 도메인을 만들고 수동으로 다시 인덱싱하거나 데 이터를 마이그레이션할 수 있습니다. 스냅샷이 데이터를 마이그레이션하는 편리한 방법을 제공합니다. 스냅 샷 생성 및 복원에 대한 자세한 내용은 인덱스 스냅샷 작업 (p. 94) 단원을 참조하십시오. 132
Amazon VPC 문서 Amazon VPC 문서 Amazon VPC에는 Amazon VPC를 생성하고 사용하는 방법을 설명하는 자체 문서 세트가 있습니다. 다음 표 에 Amazon VPC 설명서로 연결되는 링크가 나와 있습니다. 설명 설명서 Amazon VPC 사용을 시작하는 방법 Amazon VPC 시작 안내서 AWS Management 콘솔를 통해 Amazon VPC를 사 용하는 방법 Amazon VPC 사용 설명서 모든 Amazon VPC 명령의 전체 설명 Amazon EC2 명령줄 레퍼런스 (Amazon VPC 명령 은 Amazon EC2 참조의 일부임) Amazon VPC API 작업, 데이터 형식 및 오류의 전체 Amazon EC2 API Reference (Amazon VPC API 작 설명 업은 Amazon EC2 참조의 일부임) 선택적인 IPsec VPN 연결 사용자 측의 게이트웨이 를 구성하는 네트워크 관리자를 위한 정보 AWS Site-to-Site VPN 네트워크 관리자 안내서 Amazon Virtual Private Cloud에 대한 자세한 내용은 Amazon Virtual Private Cloud 단원을 참조하십시오. 133
Amazon ES 도메인 크기 조정 Amazon Elasticsearch Service 모범 사례 이 장에서는 Amazon Elasticsearch Service 도메인 운영에 대한 몇 가지 모범 사례를 설명하고, 많은 사용 사 례에 적용되는 일반 지침을 제공합니다. 프로덕션 도메인은 다음 표준을 준수해야 합니다. 제한된 리소스 기반 액세스 정책 (p. 49)을 도메인에 적용하고, 구성 API와 Elasticsearch API에 대한 액세 스를 부여할 때 최소 권한 원칙 을 준수합니다. 각 인덱스 (p. 65)대해 최소 한 개의 복제본인 Elasticsearch 기본을 구성합니다. 세 개의 전용 마스터 노드 (p. 137)를 사용합니다. 세 개의 가용 영역에 도메인을 배포합니다. 이 구성을 통해 Amazon ES는 복제본 샤드를 해당 기본 샤드와 다른 가용 영역에 분산할 수 있습니다. 세 개의 가용 영역을 갖는 리전 목록과 기타 고려 사항을 보려면 the section called 다중 AZ 도메인 구성 (p. 29) 단원을 참조하십시오. Amazon Elasticsearch Service에 대한 최신 버전이 제공되면 최신 Elasticsearch 버전으로 업그레이 드 (p. 101)합니다. 최신 서비스 소프트웨어가 제공되면 업데이트 (p. 28)합니다. 워크로드에 맞게 도메인 크기를 조정합니다. 스토리지 볼륨, 샤드 크기, 데이터 노드 권장 사항은 the section called Amazon ES 도메인 크기 조정 (p. 134) 및 페타바이트 규모 (p. 142) 단원을 참조하십시 오. 전용 마스터 노드 권장 사항은 the section called 전용 마스터 노드 (p. 137) 단원을 참조하십시오. 서비스에 제공되는 최신 세대 인스턴스를 사용합니다. 예를 들어 I2 인스턴스가 아니라 I3 인스턴스를 사용 하십시오. 프로덕션 도메인에 확장 가능한 인스턴스를 사용하지 마십시오. 예를 들어 T2 인스턴스를 사용하지 마십 시오. 해당 네트워크 구성에 적합한 경우 VPC에 도메인을 생성 (p. 126)합니다. 도메인에 기밀 데이터가 저장되는 경우 저장 시 데이터 암호화 (p. 46) 및 노드 간 암호화 (p. 48)를 사용합 니다. 자세한 내용은 이 장의 나머지 단원을 참조하십시오. 주제 Amazon ES 도메인 크기 조정 (p. 134) 전용 마스터 노드 (p. 137) 권장되는 CloudWatch 경보 (p. 140) Amazon ES 도메인 크기 조정 Amazon ES 도메인 크기를 조정하는 완벽한 방법은 존재하지 않지만 스토리지 요구 사항, 서비스 및 Elasticsearch 자체에 대해 이해한 다음 시작하면 하드웨어 요구 사항에 빈틈 없이 대응하는 초기 예상치를 수립할 수 있습니다. 이러한 예상치는 도메인 크기 조정의 가장 중요한 측면인 주요 워크로드로 도메인 크기 조정 테스트와 해당 성능 모니터링을 위한 유용한 시작점을 제공할 수 있습니다. 주제 스토리지 요구 사항 계산 (p. 135) 샤드 수 선택 (p. 136) 134
스토리지 요구 사항 계산 인스턴스 유형 선택 및 테스트 (p. 136) 스토리지 요구 사항 계산 대부분의 Elasticsearch 워크로드는 두 가지 범주 중 하나로 분류됩니다. 장기 인덱스: 데이터를 하나 이상의 Elasticsearch 인덱스로 처리하는 코드를 작성한 다음 소스 데이터가 변경됨에 따라 해당 인덱스를 주기적으로 업데이트합니다. 몇 가지 일반적인 예로 웹 사이트, 문서 및 전자 상거래 검색이 있습니다. 롤링 인덱스: 2주 동안 보관되는 일일 인덱스 세트와 같이 데이터가 인덱싱 기간과 보존 기간 동안 임시 인 덱스 세트로 계속 유입됩니다. 몇 가지 일반적인 예로 로그 분석, 시계열 처리 및 클릭스트림 분석이 있습 니다. 장기 인덱스 워크로드의 경우 디스크에 있는 소스 데이터를 검사하여 스토리지 공간이 어느 정도 소비되었는 지 쉽게 확인할 수 있습니다. 데이터를 여러 소스에서 가져온 경우 소스를 모두 추가하면 됩니다. 롤링 인덱스의 경우 주요 기간 동안 생성된 데이터의 양에 보존 기간을 곱할 수 있습니다. 예를 들어, 시간당 200MiB의 로그 데이터를 생성하면 하루에 4.7GiB가 생성되고 보존 기간이 2주이면 이 기간 동안 66GiB의 데이터가 생성됩니다. 그러나 소스 데이터의 크기는 스토리지 요구 사항의 한 측면일 뿐입니다. 다음 사항도 고려해야 합니다. 1. 복제본 수: 각 복제본은 전체 인덱스가 복사된 것으로 동일한 디스크 공간이 필요합니다. 기본적으로 각 Elasticsearch 인덱스에는 한 개의 복제본이 포함됩니다. 데이터 손실을 방지하기 위해 하나 이상을 포함 하는 것이 좋습니다. 또한 복제본은 검색 성능을 향상시켜 주므로 읽기 워크로드가 과중한 경우 여러 개를 사용할 수 있습니다. 2. Elasticsearch 인덱싱 오버헤드: 인덱스의 디스크 크기는 상황에 따라 다르지만 대개 소스 데이터보다 10% 정도 큽니다. 데이터 인덱싱 후 _cat/indices API 및 pri.store.size 값을 사용하여 정확한 오 버헤드를 계산할 수 있습니다. 또한 _cat/allocation API도 유용한 요약을 제공합니다. 3. 운영 체제 예약 공간: 기본적으로 Linux는 중요한 프로세스와 시스템 복구를 위해, 그리고 디스크 단편화 문제를 방지할 목적으로 root 사용자가 사용할 수 있도록 파일 시스템의 5%를 예약합니다. 4. Amazon ES 오버헤드: Amazon ES는 세그먼트 병합, 로그 및 기타 내부 작업을 위해 각 인스턴스마다 스 토리지 공간 20%(최대 20GiB)를 예약해 둡니다. 이 20GiB의 최대값 때문에 예약된 총 공간은 도메인의 인스턴스 수에 따라 크게 달라질 수 있습니다. 예를 들어, 도메인에 3개의 m4.xlarge.elasticsearch 인스턴스가 포함될 수 있으며 각 스토리지 공간이 500GiB인 경우 총 공간은 1.46TiB입니다. 이 경우 예약된 총 공간은 60GiB에 불과합니다. 다른 도메인에 10개의 m3.medium.elasticsearch 인스턴스가 포함될 수 있으며 각 스토리지 공간이 100GiB인 경우 총 공간은 0.98TiB입니다. 여기서 첫 번째 도메인이 50% 더 커도 예약된 총 공간은 200GiB입니다. 다음 수식에서 인스턴스당 100GiB 미만의 스토리지 공간을 사용하는 도메인에 대해 정확한 오버헤드를 측정하는 "최악의 경우" 예상치를 적용하여 더 큰 인스턴스에 대해 초과 할당합니다. 요약하면 지정된 기간에 66GiB의 데이터가 있고 한 개의 복제본이 필요한 경우 최소 스토리지 요구 사항은 66 * 2 * 1.1 / 0.95 / 0.8 = 191GiB에 근사합니다. 이 계산은 다음과 같이 일반화할 수 있습니다. 소스 데이터 * (1 + 복제본 수) * (1 + 인덱싱 오버헤드) / (1 - Linux 예약 공간) / (1 - Amazon ES 오버헤드) = 최소 스토리지 요구 사항 또는 아래와 같이 약식 버전을 사용할 수도 있습니다. 소스 데이터 * (1 + 복제본 수) * 1.45 = 최소 스토리지 요구 사항 부족한 스토리지 공간은 클러스터를 불안정하게 만드는 가장 일반적인 원인 중 하나이므로 인스턴스 유형, 인스턴스 수 및 스토리지 볼륨을 선택 (p. 136)할 때 개수를 대조 확인해야 합니다. 135
샤드 수 선택 Note 최소 스토리지 요구 사항이 1PB를 초과하는 경우 페타바이트 규모 (p. 142) 단원을 참조하십시오. 샤드 수 선택 스토리지 요구 사항을 이해했으면 인덱싱 전략을 조사할 수 있습니다. 각 Elasticsearch 인덱스는 몇 개의 샤 드로 분할됩니다. 기존 인덱스에 대한 기본 샤드 수는 쉽게 변경할 수 없으므로, 첫 번째 문서를 인덱싱하기 전에 샤드 수를 결정해야 합니다. 샤드 수를 선택하는 가장 중요한 목적은 클러스터의 모든 데이터 노드에서 인덱스를 균등하게 분산시키는 것 입니다. 하지만 이러한 샤드는 너무 크거나 너무 많아서는 안 됩니다. 경험상 샤드 크기는 10 50GiB 사이로 유지하는 것이 좋습니다. 크기가 큰 샤드는 Elasticsearch 오류 발생 시 복구가 어렵기는 합니다. 하지만 각 샤드는 일정량의 CPU와 메모리를 사용하기 때문에 크기가 작은 샤드가 너무 많이 있으면 성능 문제와 메모 리 부족 오류가 발생할 수 있습니다. 즉, 샤드는 기본 Amazon ES 인스턴스가 처리할 수 있을 정도로 작아야 하지만 너무 작아 하드웨어에 불필요한 부담을 주어서도 안 됩니다. 예를 들어, 66GiB의 데이터가 있다고 가정해 봅니다. 시간이 지남에 따라 그 수가 늘어날 것으로 예상하지 않 으며 샤드를 각각 30GiB 정도로 유지하려고 합니다. 따라서 샤드 수는 약 66 * 1.1/30 = 3개가 되어야 합니다. 이 계산은 다음과 같이 일반화할 수 있습니다. (소스 데이터 + 늘어날 공간) * (1 + 인덱싱 오버헤드) / 원하는 샤드 크기 = 대략적인 기본 샤드 수 이 수식은 시간이 지남에 따라 성장 보정에 유용합니다. 동일한 67GiB의 데이터가 내년에 4배가 될 것으로 예상한다면 대략적인 샤드 수는 (66 + 198) * 1.1/30 = 10개가 됩니다. 하지만 아직 추가로 198GiB의 데이터 가 필요하지는 않습니다. 향후 이 준비 작업을 통해 현재 엄청난 양의 CPU와 메모리를 소비하는 너무 작은 크기의 샤드를 생성하지 않는지 확인하십시오. 이 경우 샤드당 66 * 1.1/10개 샤드 = 7.26GiB가 필요해 추가 리소스를 소비하지만 거의 권장 크기 범위에 미치지 못합니다. 샤드가 6개인 중간 정도의 접근 방식을 고려 할 수 있으며, 이 경우 현재 12GiB 샤드, 향후 48GiB 샤드가 남게 됩니다. 그런 다음 다시 샤드 3개로 시작하 여 샤드가 50GiB를 초과하면 데이터를 다시 인덱싱하는 것이 좋습니다. 인스턴스 유형 선택 및 테스트 스토리지 요구 사항을 계산하고 필요한 샤드 수를 선택한 후에는 하드웨어 결정을 시작할 수 있습니다. 하드 웨어 요구 사항은 워크로드에 따라 크게 달라지기는 하지만 몇 가지 기본적인 권장 사항을 제공하겠습니다. 일반적으로 각 인스턴스 유형에 대한 스토리지 한도 (p. 241)는 가벼운 워크로드에 필요한 CPU와 메모리 양에 매핑됩니다. 예를 들어, m4.large.elasticsearch 인스턴스는 최대 512GiB의 EBS 볼륨 크기, 2개 의 vcpu 코어 및 8GiB의 메모리를 사용합니다. 클러스터에 샤드가 많이 있거나, 집계를 과도하게 수행하거 나, 문서를 자주 업데이트하거나, 쿼리를 많이 처리하는 경우 해당 리소스가 충분하지 않을 수 있습니다. 클 러스터가 이러한 범주 중 하나에 속한다고 생각되면 각 100GiB의 스토리지 요구 사항에 맞게 2개의 vcpu 코어와 8GiB의 메모리에 근접한 구성으로 시작해 보십시오. Tip 각 인스턴스 유형에 할당되는 하드웨어 리소스 요약은 Amazon Elasticsearch Service 요금을 참조 하십시오. 하지만 이러한 리소스도 부족할 수 있습니다. 일부 Elasticsearch 사용자는 자신의 요구 사항을 충족시키기 위해 이와 같은 리소스가 여러 번 필요했다고 보고했습니다. 워크로드에 적합한 올바른 하드웨어를 찾는다는 것은 초기 예상치를 치밀하게 작성하고, 주요 워크로드를 통해 테스트한 후 조정하고, 다시 테스트하는 것을 의미합니다. 1. 시작할 때 브레인 분할 문제 등 잠재적인 Elasticsearch 문제를 피하기 위해 최소 3개의 인스턴스를 선택하 는 것이 좋습니다. 3개의 전용 마스터 노드 (p. 137)가 있는 경우 복제를 위해 최소 2개의 데이터 노드를 사용하는 것이 좋습니다. 2. 스토리지 요구 사항이 184GiB이고 권장되는 최소 인스턴스 수가 3개인 경우 184/3 = 61GiB 수식 을 사용하여 각 인스턴스에 필요한 스토리지 양을 찾으십시오. 이 예에서는 클러스터를 위해 3개의 m4.large.elasticsearch 인스턴스를 선택했고 각 인스턴스는 90GiB의 EBS 스토리지 볼륨을 사용 136
전용 마스터 노드 하므로 시간이 지나면서 늘어나는 요구 사항에 대한 안전망과 공간을 확보할 수 있습니다. 이 구성은 6개 의 vcpu 코어와 24GiB의 메모리를 제공하므로 더 가벼운 워크로드에 적합합니다. 보다 실질적인 예로 14TiB의 스토리지 요구 사항과 과도한 워크로드를 고려해 보겠습니다. 이 경우 2 * 144 = 288개의 vcpu 코어 및 8 * 144 = 1152GiB의 메모리로 시작하도록 선택할 수 있습니다. 이러한 수 치는 약 18개의 i3.4xlarge.elasticsearch 인스턴스에 해당합니다. 이렇게 빠른 로컬 스토리지가 필요 없는 경우에는 각각 1TiB의 EBS 스토리지 볼륨을 사용하여 r5.4xlarge.elasticsearch 인스턴 스 18개로 테스트할 수도 있습니다. 귀하의 클러스터가 수백 테라바이트의 데이터를 포함한다면 페타바이트 규모 (p. 142) 단원을 참조하십 시오. 3. 클러스터를 구성한 후에는 인덱스를 추가 (p. 65)하고, 실제 데이터 세트를 사용하여 주요 클라이언트 테 스트를 수행하고, CloudWatch 지표를 모니터링 (p. 34)하여 클러스터가 워크로드를 처리하는 방식을 확인 할 수 있습니다. 4. 성능이 요구 사항을 충족하고 테스트에 성공했으며 CloudWatch 지표가 정상이면 클러스터 사용 준비를 마친 것입니다. 반드시 CloudWatch 경보를 설정 (p. 140)하여 비정상적인 리소스가 사용되는지를 검사 하십시오. 성능이 기대 이하이고 테스트에 실패했거나 CPUUtilization 또는 JVMMemoryPressure가 높은 경우 다른 인스턴스 유형을 선택(또는 인스턴스 추가)하여 계속 테스트해 보십시오. 인스턴스를 추가함에 따라 Elasticsearch에서는 자동으로 클러스터 전체에 샤드 배포를 다시 조정합니다. 성능이 떨어진 클러스터에서 부족 용량을 측정하는 것보다 성능이 높은 클러스터에서 초과 용량을 측정하 는 것이 더 쉬우므로, 필요한 것보다 더 큰 클러스터에서 테스트하면서 크기를 작게 조정하면 활동량이 많 은 기간에는 추가 리소스로 안정적인 작동을 보장하는 효율적인 클러스터를 얻을 수 있습니다. 프로덕션 클러스터나 상태가 복잡한 클러스터는 전용 마스터 노드 (p. 137)의 이점을 활용하여 성능과 클러 스터의 안정성을 향상시킵니다. 전용 마스터 노드 Amazon Elasticsearch Service는 전용 마스터 노드를 사용하여 클러스터 안정성을 증가합니다. 전용 마스터 노드는 클러스터 관리 작업을 수행하지만 데이터를 보유하지 않거나 데이터 업로드 요청에 응답하지 않습니 다. 클러스터 관리 작업을 오프로드하면 도메인의 안정성이 높아집니다. 각 프로덕션 Amazon ES 도메인에 대해 전용 마스터 노드 3개를 할당하는 것이 좋습니다. 1. 1개의 전용 마스터 노드는 오류 발생 시 사용할 백업이 없음으로 의미합니다. 2. 2개의 전용 마스터 노드는 오류 발생 시 클러스터에 새 마스터 노드를 선택하는 데 필요한 노드 쿼럼이 없 음을 의미합니다. 쿼럼은 전용 마스터 노드 수/2 + 1(가장 가까운 정수로 반올림)이며 도메인을 생성할 때 Amazon ES는 discovery.zen.minimum_master_nodes로 설정됩니다. 이 경우 2/2 + 1 = 2입니다. 전용 마스터 노드 1개에 오류가 발생했고 백업이 1개만 존재하기 때문에 클러 스터에 쿼럼이 없어 새 마스터를 선택할 수 없습니다. 3. 권장되는 3개의 전용 마스터 노드는 마스터 노드에 오류가 발생했을 때 2개의 백업 노드와 새 마스터를 선 택할 수 있는 필수 쿼럼(2)을 제공합니다. 4. 네 개의 전용 마스터 노드는 세 개일 때보다 나은 점이 없으며 가용 영역이 두 개인 리전에서 다중 가용 영 역 (p. 29)(AZ)을 사용하는 경우 문제가 발생할 수 있습니다. 1개의 마스터 노드에서 오류가 발생하면 쿼럼(3)이 있어 새 마스터를 선택합니다. 2개의 마스터 노드에 서 오류가 발생하면 3개의 전용 마스터 노드와 마찬가지로 해당 쿼럼이 손실됩니다. 각 가용 영역에 두 개의 전용 마스터 노드가 있고 영역이 서로 통신할 수 없으면 어느 영역도 새 마스터 를 선택할 수 있는 쿼럼이 없습니다. 137
전용 마스터 노드 5. 3개뿐만 아니라 5개의 전용 마스터 노드를 사용하면 쿼럼을 유지 관리하는 동안 2개의 노드를 잃게 되지 만, 언제든 1개의 전용 마스터 노드만 활성 상태이므로 이 구성에서는 4개의 유휴 노드에 대해 비용이 지 불된다는 의미가 됩니다. 많은 고객들이 이 수준의 장애 조치 보호를 과하게 사용하고 있습니다. Note 귀하의 클러스터에 새 마스터 노드를 선택하는 데 필요한 쿼럼이 없는 경우, 클러스터에 대한 읽기 및 쓰기 요청이 모두 실패로 끝납니다. 이 동작은 Elasticsearch의 기본값과 다릅니다. 전용 마스터 노드는 다음 클러스터 관리 작업을 수행합니다. 클러스터의 모든 노드 추적 클러스터에 있는 인덱스 수 추적 각 인덱스에 속한 샤드 수 추적 클러스터에 있는 노드에 대한 라우팅 정보 유지 상태 변경(인덱스 생성, 클러스터에서 노드 추가 또는 제거) 후 클러스터 상태 업데이트 클러스터의 모든 노드 간에 클러스터 상태 변경 사항 복제 하트비트 신호를 보내 모든 클러스터 노드의 상태를 모니터링(정기적인 신호는 클러스터에 있는 데이터 노드의 가용성을 모니터링함) 다음 그림은 10개의 인스턴스가 있는 Amazon ES 도메인을 보여줍니다. 인스턴스 중 7개는 데이터 노드이고 3개는 전용 마스터 노드입니다. 전용 마스터 노드 중 하나만 활성 상태이고, 회색으로 표시된 전용 마스터 노 드 2개는 활성 상태인 전용 마스터 노드에서 장애가 발생한 경우 백업으로 사용하기 위해 대기 중입니다. 모 든 데이터 업로드 요청은 데이터 노드 7개에서 처리하고 모든 클러스터 관리 작업은 활성 상태인 전용 마스 터 노드로 오프로드됩니다. 138
전용 마스터 노드 전용 마스터 노드가 검색 및 쿼리 요청을 처리하지 않더라도 전용 마스터 노드의 크기는 자신이 관리할 수 있 는 인스턴스, 인덱스 및 샤드의 수와 밀접한 관련이 있습니다. 프로덕션 클러스터의 경우 전용 마스터 노드에 대해 다음과 같은 인스턴스 유형이 권장됩니다. 다음 권장 사항은 일반적인 워크로드를 기반으로 한 것이며 필요에 따라 달라질 수 있습니다. 샤드나 필드 매핑이 여러 개인 클러스터는 대규모 인스턴스 유형을 활용할 수 있습니다. 전용 마스터 노드 지표 (p. 140)를 모니터링하여 대규모 인스턴스 유형을 사용해야 하는지를 확인합니다. 인스턴스 수 권장되는 최소 전용 마스터 인스턴스 유형 1 10 c5.large.elasticsearch 10 30 c5.xlarge.elasticsearch 30 75 c5.2xlarge.elasticsearch 75 200 r5.4xlarge.elasticsearch 특정 구성 변경이 전용 마스터 노드에 영향을 주는 방식에 대한 자세한 내용은 the section called 구성 변 경 정보 (p. 26) 단원을 참조하십시오. 인스턴스 수 한도에 대한 자세한 내용은 the section called 클러스터 및 인스턴스 제한 (p. 241) 단원을 참조하십시오. 139
권장되는 CloudWatch 경보 vcpu, 메모리 및 요금을 비롯한 특정 인스턴스 유형에 대한 자세한 내용은 Amazon Elasticsearch 인스턴 스 요금을 참조하십시오. 권장되는 CloudWatch 경보 CloudWatch 경보는 CloudWatch 지표가 일정 시간 동안 지정된 값을 초과하면 조치를 수행합니다. 예를 들 어, 클러스터 상태가 1분 이상 red인 경우 AWS에서 이메일을 보내도록 설정할 수 있습니다. 이 단원에는 몇 가지 권장되는 경보와 이에 대응하는 방법이 포함되어 있습니다. 경보 설정에 대한 자세한 내용은 Amazon CloudWatch 사용 설명서의 Amazon CloudWatch 경보 생성을 참 조하십시오. 경보 문제 ClusterStatus.red 최대값은 1분, 연속 횟수 1번 동안 >= 1임 하나 이상의 기본 샤드와 복제본이 노드에 할당되지 않았습니다. the section called 빨간색 클러스터 상태 (p. 150) 단원을 참조하십시오. ClusterStatus.yellow 하나 이상의 복제 샤드가 노드에 할당되지 않았습니다. the section called 노 최대값은 1분, 연속 횟수 란색 클러스터 상태 (p. 152) 단원을 참조하십시오. 1번 동안 >= 1임 FreeStorageSpace 최 소값은 1분, 연속 횟수 1 번 동안 <= 20480임 클러스터 속 노드의 여유 스토리지 공간이 20GiB까지 떨어졌습니다. the section called 사용 가능한 스토리지 공간 부족 (p. 152) 단원을 참조하십시 오. 이 값은 MiB 단위이므로 20480이 아닌 각 노드에 대한 총 스토리지 공간의 25%로 설정하는 것이 좋습니다. 연속 1회, 5분간 클러스터가 쓰기 요청을 차단하고 있습니다. the section called ClusterIndexWritesBlocked ClusterBlockException (p. 152) 단원을 참조하십시오. >= 1 Nodes 최소값은 1일, 연 속 횟수 1번 동안 < x임 x는 클러스터의 노드 수입니다. 이 경보는 클러스터에서 하나 이상의 노드가 하루 동안 연결되지 않았음을 나타냅니다. the section called 실패한 클러스터 노드 (p. 153) 단원을 참조하십시오. AutomatedSnapshotFailure 자동 스냅샷에 오류가 발생했습니다. 이런 오류는 red 클러스터 상태로 인해 최대값은 1분, 연속 횟수 자주 발생했습니다. the section called 빨간색 클러스터 상태 (p. 150) 단원 1번 동안 >= 1임 을 참조하십시오. 모든 자동 스냅샷과 오류에 대한 일부 정보 요약을 위해 다음을 시도해 볼 수도 있습니다. GET domain_endpoint/_snapshot/cs-automated/_all CPUUtilization 평균 값은 15분, 연속 횟수 3번 동안 >= 80%임 100% CPU 사용률은 드물지 않지만 평균값이 높게 지속되는 것은 문제가 있습 니다. 더 큰 인스턴스 유형을 사용하거나 인스턴스 추가를 고려하십시오. JVMMemoryPressure 최대값은 5분, 연속 횟수 3번 동안 >= 80%임 사용량이 늘어나면 클러스터에서 메모리 부족 오류가 발생할 수 있습니다. 수 직 확장을 고려하십시오. Amazon ES는 Java 힙에 인스턴스 RAM의 절반을 사 용합니다(최대 힙 크기 32GiB). 인스턴스를 최대 64GiB의 RAM까지 수직 확장 할 수 있으며 인스턴스를 추가하면 수평 확장도 가능합니다. MasterCPUUtilization 전용 마스터 노드 (p. 137)에 더 큰 인스턴스 유형의 사용을 고려하십시오. 클 평균값은 15분, 연속 횟수 러스터 안정성 및 블루/그린(Blue/Green) 배포 (p. 26)의 역할로 인해 전용 마스 3번 동안 >= 50%임 터 노드는 데이터 노드보다 평균 CPU 사용량이 낮아야 합니다. 140
권장되는 CloudWatch 경보 경보 문제 MasterJVMMemoryPressure 최대값은 15분, 연속 횟수 1번 동안 >= 80%임 KMSKeyError는 1분, 연 속 횟수 1번 동안 >= 1임 도메인에서 유휴 시 데이터를 암호화하는 데 사용된 KMS 암호화 키가 비활성 화되었습니다. 정상 작동으로 복원하려면 다시 활성화해야 합니다. 자세한 내 용은 the section called 저장 데이터 암호화 (p. 46) 단원을 참조하십시오. KMSKeyInaccessible는 도메인에서 유휴 시 데이터를 암호화하는 데 사용된 KMS 암호화 키가 삭제되 1분, 연속 횟수 1번 동안 었거나 Amazon ES에 대한 권한 부여를 취소했습니다. 이 상태에서 도메인을 >= 1임 복구할 수 없지만 수동 스냅샷이 있는 경우 이를 사용하여 새 도메인으로 마이 그레이션할 수 있습니다. 자세한 내용은 the section called 저장 데이터 암호 화 (p. 46) 단원을 참조하십시오. Note 지표를 보려면 CloudWatch 지표 모니터링 (p. 34)을 참조하십시오. 141
Amazon Elasticsearch Service를 위한 페타바이트 규모 Amazon Elasticsearch Service에서 최대 3PB의 도메인 스토리지를 제공합니다. 각각의 스토리지가 15TB인 i3.16xlarge.elasticsearch 인스턴스 유형 200개를 포함한 도메인을 구성할 수 있습니다. 현저한 규 모 차이로 인해 이 크기의 도메인 권장 사항은 일반적인 권장 사항 (p. 134)과 다릅니다. 이 단원에서는 도메 인 생성, 비용, 스토리지, 샤드 크기에 대한 고려 사항을 설명합니다. 이 단원에는 i3.16xlarge.elasticsearch 인스턴스 유형이 자주 나오지만, 그 밖에도 몇 가지 다른 인스 턴스 유형을 사용하여 총 도메인 스토리지를 1PB까지 만들 수 있습니다. Tip AWS 데이터베이스 블로그에는 페타바이트급 도메인 생성 및 운영에 대한 훌륭한 게시물이 있습니 다. 도메인 생성 이 크기의 도메인은 도메인당 40개의 인스턴스라는 기본 한도를 초과합니다. 도메인당 최대 200개의 인 스턴스까지 서비스 한도 증가를 요청하려면 AWS Support 센터에서 요청을 생성하십시오. 요금 이 크기의 도메인을 생성하기 전에 Amazon Elasticsearch Service 요금 페이지를 통해 연관된 비용이 예 상치와 일치하는지 확인합니다. 스토리지 i3 인스턴스 유형은 빠른 로컬 NVMe(Non-Volatile Memory Express) 스토리지를 제공하기 위해 특별하 게 설계되었습니다. 이 로컬 스토리지는 Amazon Elastic Block Store와 비교하여 성능상 상당한 이점이 있기 때문에 Amazon ES에서 이러한 인스턴스 유형을 선택할 때 EBS 볼륨은 옵션이 아닙니다. EBS 스 토리지를 선호한다면 r5.12xlarge.elasticsearch 등 다른 인스턴스 유형을 사용하십시오. 샤드 크기 및 개수 일반적인 Elasticsearch 지침은 샤드당 50GB를 초과하지 말라는 것입니다. 대형 도메인 및 i3.16xlarge.elasticsearch 인스턴스에 제공되는 리소스를 수용하는 데 필요한 샤드 수를 고려해 볼 때 100GB 크기의 샤드를 권장합니다. 예를 들어 450TB의 소스 데이터가 있고 한 개의 복제본이 필요한 경우 최소 스토리지 요구 사항은 450TB * 2 * 1.1 / 0.95 = 1.04PB에 가깝습니다. 이 계산에 대한 설명은 the section called 스토리지 요구 사항 계산 (p. 135) 단원을 참조하십시오. 1.04PB/15TB = 70개의 인스턴스가 있지만 스스로 에게 스토리지 안전망을 제공하고 시간 경과에 따른 데이터 양 차이를 고려하기 위해 80개 이상의 i3.16xlarge.elasticsearch 인스턴스를 선택할 수 있습니다. 각 인스턴스는 최소 스토리지 요구 사항에 20GiB를 더 추가하지만 이 크기의 디스크에서 20GiB는 거의 무시해도 될 정도입니다. 샤드 수 제어는 까다롭습니다. Elasticsearch 사용자는 하루 간격으로 종종 인덱스를 교체하고 1~2주 동 안 데이터를 보관합니다. 이때 '활성'과 '비활성' 샤드를 구분하면 유용합니다. 활성화된 샤드는 아주 능동 적으로 읽고 씁니다. 비활성화된 샤드는 가끔 읽기 요청에 응하지만 대체로 유휴 상태입니다. 일반적으 로 활성화된 샤드의 수는 몇천 이하여야 합니다. 활성화된 샤드의 수가 10,000을 넘어가면 성능 및 안정 성에 치명적인 위협이 될 수 있습니다. 기본 샤드 수를 계산하려면 공식으로 450,000GB * 샤드당 1.1/100GB = 4,950개 샤드를 사용하십시 오. 복제본을 설명하기 위해서 그 수를 2배로 늘리면 9,900샤드가 되는데 모든 샤드가 활성화 상태라면 이는 주요한 문제가 됩니다. 만일 인덱스를 교체하여 어느 날이든 샤드의 7분의 1 혹은 14분의 1(각각 1414 혹은 707샤드)만이 활성화 상태라면 클러스터는 정상적으로 작동합니다. 항상 그렇듯이 도메인 규 142
모를 결정하고 구성하는 가장 중요한 단계는 실질적인 데이터 세트를 사용하여 대표적인 클라이언트 테 스트를 수행하는 것입니다. 143
샘플 코드 Curator를 사용하여 Amazon Elasticsearch Service에서 데이터 회 전 이 장에는 AWS Lambda 및 Curator를 사용하여 인덱스와 스냅샷을 관리하는 샘플 코드가 나와 있습니다. Curator에는 수많은 필터가 있으므로 60일 이전에 생성된 인덱스나 완료되지 않은 스냅샷 등 특정 기준에 맞 는 인덱스와 스냅샷을 찾는 데 유용합니다. Curator는 흔히 CLI(명령줄 인터페이스)로 사용되지만, Python API도 있기 때문에 Lambda 함수에 사용할 수 있습니다. Lambda 함수 구성 및 배포 패키지 생성에 대한 자세한 내용은 the section called Amazon S3에서 Amazon ES로 스트리밍 데이터 로드 (p. 78) 단원을 참조하십시오. 더 자세한 내용은 AWS Lambda Developer Guide 단원을 참조하십시오. 이 장에서는 샘플 코드, 기본 설정, 트리거 및 권한만 다룹니다. 주제 샘플 코드 (p. 144) 기본 설정 (p. 147) 트리거 (p. 147) 권한 (p. 147) 샘플 코드 아래의 샘플 코드는 Curator와 공식 Python Elasticsearch 클라이언트를 사용하여 30일 이상 지난 데 이터임을 나타내는 타임스탬프가 이름에 들어 있는 인덱스를 모두 삭제합니다. 예를 들어, 이름이 mylogs-2014.03.02인 인덱스는 삭제됩니다. 만일 이 인덱스를 오늘 만들었어도 삭제됩니다. 이 필터는 인덱 스 이름으로 수명을 판단하기 때문입니다. 이 코드에는 생성일로 수명을 판단하는 등 주석 처리된 그 밖의 공통 필터 예제도 들어 있습니다. AWS Python용 SDK(Boto3) 및 requests-aws4auth 라이브러리에서 Amazon ES에 대한 요청에 서명합니다. Warning 이 단원의 두 가지 코드 샘플은 모두 데이터를 삭제하며, 대량의 데이터가 삭제될 가능성이 있습니 다. 코드 동작에 만족할 때까지는 중요하지 않은 도메인에서 각 샘플을 수정하면서 테스트하십시오. 인덱스 삭제 import boto3 from requests_aws4auth import AWS4Auth from elasticsearch import Elasticsearch, RequestsHttpConnection import curator host = '' # For example, search-my-domain.region.es.amazonaws.com region = '' # For example, us-west-1 service = 'es' credentials = boto3.session().get_credentials() 144
샘플 코드 awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) # Lambda execution starts here. def lambda_handler(event, context): # Build the Elasticsearch client. es = Elasticsearch( hosts = ['host': host, 'port': 443], http_auth = awsauth, use_ssl = True, verify_certs = True, connection_class = RequestsHttpConnection ) # A test document. document = "title": "Moneyball", "director": "Bennett Miller", "year": "2011" # Index the test document so that we have an index that matches the timestring pattern. # You can delete this line and the test document if you already created some test indices. es.index(index="movies-2017.01.31", doc_type="movie", id="1", body=document) index_list = curator.indexlist(es) # Filters by age, anything with a time stamp older than 30 days in the index name. index_list.filter_by_age(source='name', direction='older', timestring='%y.%m.%d', unit='days', unit_count=30) # Filters by naming prefix. # index_list.filter_by_regex(kind='prefix', value='my-logs-2017') # Filters by age, anything created more than one month ago. # index_list.filter_by_age(source='creation_date', direction='older', unit='months', unit_count=1) print("found %s indices to delete" % len(index_list.indices)) # If our filtered list contains any indices, delete them. if index_list.indices: curator.deleteindices(index_list).do_action() host 및 region의 값을 업데이트해야 합니다. 다음 코드 샘플은 2주일 이상 된 스냅샷을 모두 삭제합니다. 또한 새 스냅샷을 캡처합니다. 스냅샷 삭제 import boto3 from datetime import datetime from requests_aws4auth import AWS4Auth from elasticsearch import Elasticsearch, RequestsHttpConnection import logging import curator # Adding a logger isn't strictly required, but helps with understanding Curator's requests and debugging. logger = logging.getlogger('curator') logger.addhandler(logging.streamhandler()) logger.setlevel(logging.info) 145
샘플 코드 host = '' # For example, search-my-domain.region.es.amazonaws.com region = '' # For example, us-west-1 service = 'es' credentials = boto3.session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) now = datetime.now() # Clunky, but this approach keeps colons out of the URL. date_string = '-'.join((str(now.year), str(now.month), str(now.day), str(now.hour), str(now.second))) snapshot_name = 'my-snapshot-prefix-' + date_string repository_name = 'my-repo' # Lambda execution starts here. def lambda_handler(event, context): # Build the Elasticsearch client. es = Elasticsearch( hosts = ['host': host, 'port': 443], http_auth = awsauth, use_ssl = True, verify_certs = True, connection_class = RequestsHttpConnection, timeout = 120 # Deleting snapshots can take a while, so keep the connection open for long enough to get a response. ) try: # Get all snapshots in the repository. snapshot_list = curator.snapshotlist(es, repository=repository_name) # Filter by age, any snapshot older than two weeks. # snapshot_list.filter_by_age(source='creation_date', direction='older', unit='weeks', unit_count=2) # Delete the old snapshots. curator.deletesnapshots(snapshot_list, retry_interval=30, retry_count=3).do_action() except (curator.exceptions.snapshotinprogress, curator.exceptions.nosnapshots, curator.exceptions.failedexecution) as e: print(e) # Split into two try blocks. We still want to try and take a snapshot if deletion failed. try: # Get the list of indices. # You can filter this list if you didn't want to snapshot all indices. index_list = curator.indexlist(es) # Take a new snapshot. This operation can take a while, so we don't want to wait for it to complete. curator.snapshot(index_list, repository=repository_name, name=snapshot_name, wait_for_completion=false).do_action() except (curator.exceptions.snapshotinprogress, curator.exceptions.failedexecution) as e: print(e) host, region, snapshot_name 및 repository_name의 값을 업데이트해야 합니다. 출력이 너무 자세하 다고 생각되면 logging.info를 logging.warn으로 변경할 수 있습니다. 스냅샷을 캡처하고 삭제하는 데는 시간이 걸리기 때문에 이 코드는 연결 및 Lambda 제한 시간에 더 민감하 며, 따라서 로깅 코드도 더 많습니다. Elasticsearch 클라이언트에는 제한 시간이 120초로 설정되어 있습니 146
기본 설정 다. DeleteSnapshots 함수가 Amazon ES 도메인에서 응답을 받는 데 이보다 오래 걸리는 경우, 이 값을 늘려야 할 수 있습니다. 이와 함께 Lambda 함수의 제한 시간도 기본값인 3초에서 더 늘려야 합니다. 권장되 는 값은the section called 기본 설정 (p. 147) 단원을 참조하십시오. 기본 설정 이 장의 코드 샘플에는 다음 설정을 사용하는 것이 좋습니다. 샘플 코드 메모리 제한 시간 인덱스 삭제 128MB 10초 스냅샷 삭제 128MB 3분 트리거 이 함수는 특정 이벤트(예: Amazon S3에 파일 업로드)에 대응하는 대신 예약 작동하도록 되어 있습니다. 이 러한 함수를 더 자주 또는 더 간헐적으로 실행할 수 있습니다. 샘플 코드 서비스 규칙 유형 예제 표현식 인덱스 삭제 CloudWatch 이벤트 예약 표현식 요금(1일) 스냅샷 삭제 CloudWatch 이벤트 예약 표현식 속도(4시간) 권한 이 장의 Lambda 함수는 둘 다 모든 Lambda 함수에 필요한 기본 로깅 권한과 함께 Amazon ES 도메인에 대 한 HTTP 메서드 권한을 요구합니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Action": "logs:createloggroup", "Resource": "arn:aws:logs:us-west-1:123456789012:*" "Effect": "Allow", "Action": [ "logs:createlogstream", "logs:putlogevents" ], "Resource": [ "arn:aws:logs:us-west-1:123456789012:log-group:/aws/lambda/your-lambda-function:*" ] "Effect": "Allow", "Action": [ "es:eshttppost", 147
권한 "es:eshttpget", "es:eshttpput", "es:eshttpdelete" ] ], "Resource": "arn:aws:es:us-west-1:123456789012:domain/my-domain/*" 148
Kibana에 액세스할 수 없습니다. Amazon Elasticsearch Service 문제 해결 이 단원에서는 일반적인 Amazon Elasticsearch Service 문제를 식별하고 해결하는 방법에 대해 설명합니다. AWS Support에 문의하기 전에 이 단원의 정보 단원을 참조하십시오. Kibana에 액세스할 수 없습니다. Kibana 엔드포인트는 서명된 요청을 지원하지 않습니다. 해당 도메인의 액세스 제어 정책에서 일부 IAM 사 용자 또는 역할에만 액세스 권한을 부여하고 Kibana에 대한 인증 (p. 111)를 구성하지 않은 경우, Kibana에 액세스하려고 하면 다음과 같은 오류가 발생할 수 있습니다. "User: anonymous is not authorized to perform: es:eshttpget" Amazon ES 도메인에서 VPC 액세스를 사용하는 경우에는 이 오류가 발생하지 않습니다. 그 대신 요청이 시 간 초과됩니다. 이 문제를 바로잡는 방법과 사용 가능한 각종 구성 옵션에 대해 알아보려면 the section called Kibana에 대한 액세스 제어 (p. 106), the section called VPC 도메인 액세스 정책에 대하여 (p. 128) 및 the section called 자격 증명 및 액세스 관리 (p. 48) 단원을 참조하십시오. VPC 도메인에 액세스할 수 없습니다. the section called VPC 도메인 액세스 정책에 대하여 (p. 128) 및 the section called VPC 도메인 테스 트 (p. 129) 단원을 참조하십시오. 읽기 전용 상태의 클러스터 Elasticsearch 7.x는 클러스터 조정 시 이전 버전과 다른 시스템을 사용합니다. 이 새로운 시스템에서 클러스 터가 쿼럼을 잃으면 조치를 취할 때까지 클러스터를 사용할 수 없습니다. 쿼럼 손실은 두 가지 형태를 취할 수 있습니다. 클러스터가 전용 마스터 노드를 사용하는 경우 절반 이상을 사용할 수 없으면 쿼럼 손실이 발생합니다. 클러스터가 전용 마스터 노드를 사용하지 않는 경우 절반 이상의 데이터 노드를 사용할 수 없으면 쿼럼 손 실이 발생합니다. 쿼럼 손실이 발생한 경우 클러스터에 둘 이상의 노드가 있으면 Amazon ES가 쿼럼을 복원하고 클러스터를 읽기 전용 상태로 설정합니다. 여기에는 두 가지 옵션이 있습니다. 읽기 전용 상태를 제거하고 클러스터를 그대로 사용합니다. 스냅샷에서 클러스터 또는 개별 인덱스를 복원합니다 (p. 99). 클러스터를 그대로 사용하려면 다음 요청을 사용하여 클러스터 상태가 녹색인지 확인하십시오. GET _cat/health?v 149
빨간색 클러스터 상태 클러스터 상태가 빨간색이면 스냅샷에서 클러스터를 복원하는 것이 좋습니다. 문제 해결 단계는 the section called 빨간색 클러스터 상태 (p. 150) 단원을 참조하십시오. 클러스터 상태가 녹색이면 다음 요청을 사용 하여 모든 예상 인덱스가 있는지 확인합니다. GET _cat/indices?v 그런 다음 몇 가지 검색을 실행하여 예상 데이터가 있는지 확인합니다. 예상 데이터가 있으면 다음 요청을 사 용하여 읽기 전용 상태를 제거할 수 있습니다. PUT _cluster/settings "persistent": "cluster.blocks.read_only": false 쿼럼 손실이 발생한 경우 클러스터에 노드가 하나만 있으면 Amazon ES가 노드를 교체하고 클러스터를 읽기 전용 상태로 설정하지 않습니다. 그렇지 않은 경우에는 방법이 동일합니다. 클러스터를 그대로 사용하거나 스냅샷에서 복원하십시오. 두 상황 모두 Amazon ES는 Personal Health Dashboard에 두 개의 이벤트를 전송합니다. 첫 번째 이벤트 는 쿼럼의 손실을 알려줍니다. 두 번째 이벤트는 Amazon ES가 쿼럼을 성공적으로 복원한 후에 발생합니다. Personal Health Dashboard 사용에 대한 자세한 내용은 AWS Health 사용 설명서 단원을 참조하십시오. 빨간색 클러스터 상태 빨간색 클러스터 상태는 하나 이상의 기본 샤드 및 복제본이 노드에 할당되지 않았음을 나타냅니다. 빨간색 클러스터 상태가 지속되면 인덱스의 상태가 양호하더라도 Amazon ES가 스냅샷 자동 생성을 중지합니다. 빨간색 클러스터 상태의 가장 흔한 원인은 실패한 클러스터 노드 (p. 153) 및 처리 작업 부하가 지속적으로 높아서 발생한 Elasticsearch 프로세스 충돌입니다. Note Amazon ES는 자동 스냅샷을 14일 동안 저장하므로, 빨간색 클러스터 상태가 2주 이상 지속되면 클 러스터의 데이터가 영구적으로 손실될 수 있습니다. Amazon ES 도메인이 빨간색 클러스터 상태 가 되면 AWS Support에서 연락해 문제를 직접 해결할 것인지 아니면 지원 팀의 도움을 원하는지 묻는 경우도 있습니다. 빨간색 클러스터 상태가 발생할 경우 이를 알려주는 CloudWatch 경보를 설 정 (p. 140)할 수 있습니다. 적색 샤드는 적색 클러스터를 초래하고, 적색 인덱스는 적색 샤드를 초래합니다. 빨간색 클러스터 상태를 초 래하는 인덱스를 식별하기 위해 Elasticsearch는 몇 가지 유용한 API를 제공합니다. GET /_cluster/allocation/explain은 할당되지 않은 첫 번째 샤드를 선택하고, 노드에 할당되지 못한 이유를 확인하여 보여 줍니다. "index": "test4", "shard": 0, "primary": true, "current_state": "unassigned", "can_allocate": "no", "allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes" 150
지속적으로 과도한 처리 로드에서 복구 GET /_cat/indices?v는 각 인덱스의 상태, 문서 수, 디스크 사용량을 보여 줍니다. health status index store.size pri.store.size green open test1 14mb 14mb green open test2 233b 233b green open test3 14.7kb 7.3kb red open test4 green open test5 24.3kb 24.3kb uuid pri rep docs.count docs.deleted 30h1EiMvS5uAFr2t5CEVoQ 5 0 820 0 sdixs_wdt56affgu5kpbfq 1 0 0 0 GGRZp_TBRZuSaZpAGk2pmw 1 1 2 0 BJxfAErbTtu5HBjIXJV_7A _8C6MIXOSxCqVYicH3jsEA 1 1 0 0 7 0 적색 인덱스를 삭제하는 것은 적색 클러스터 상태를 해결하는 가장 빠른 방법입니다. 빨간색 클러스터 상태 의 이유에 따라 Amazon ES 도메인을 확장하여 더 큰 인스턴스 유형, 더 많은 인스턴스 또는 더 많은 EBS 기 반 스토리지를 사용하도록 한 후 문제가 발생한 인덱스를 다시 생성해 볼 수 있습니다. 문제가 발생한 인덱스가 삭제되지 않으면 스냅샷을 복원 (p. 99)하거나, 인덱스에서 문서를 삭제하거나, 인덱 스 설정을 변경하거나, 복제본 수를 줄이거나, 다른 인덱스를 삭제하여 디스크 공간을 확보합니다. 중요한 것 은 Amazon ES 도메인을 다시 구성하기 전에 빨간색 클러스터 상태를 해결하는 것입니다. 빨간색 클러스터 가 있는 도메인을 다시 구성할 경우 문제가 심각해져서 상태를 해결할 때까지 도메인이 처리 중 구성 상태로 중단될 수 있습니다. 지속적으로 과도한 처리 로드에서 복구 빨간색 클러스터 상태의 원인이 데이터 노드의 지속적으로 과도한 처리 로드인지 확인하려면 다음 클러스터 지표를 모니터링합니다. 관련 지표 설명 복구 JVMMemoryPressure 클러스터의 모든 데이터 노드에 사용되 는 Java 힙의 비율을 지정합니다. 이 지 표의 최대 통계를 모니터링하면서 Java 가비지 수집기가 충분한 메모리를 회수 하지 못하여 메모리 압력 감소가 점차 작 아지는 때를 찾습니다. 복합 쿼리 또는 큰 데이터 필드가 이러한 패턴의 원인일 수 있습니다. JVM에 대해 메모리 회로 차단 기를 설정합니다. 자세한 내 용은 the section called JVM OutOfMemoryError (p. 153) 단원을 참조하십시오. Concurrent Mark Sweep(CMS) 가비지 수집기는 "구세대" 객체 공간의 75%가 차면 트리거됩니다. 이 수집기는 다른 스 레드와 함께 실행되면서 일시 정지를 최 소한으로 유지합니다. CMS가 이러한 정 상 수집 중에 충분한 메모리를 회수하지 못하면, Elasticsearch가 모든 스레드를 중지하는 다른 가비지 수집 알고리즘을 트리거합니다. 노드는 클러스터 안정성 에 영향을 미칠 수 있는 이러한 stop-theworld 수집 중에는 응답하지 않습니다. 메모리 사용량이 계속 증가하면 Elasticsearch가 메모리 부족 오류로 인 해 결국 충돌합니다. 경험상 사용량을 80% 미만으로 유지하는 것이 좋습니다. 151 그래도 문제가 지속되면 불필요 한 인덱스를 삭제하거나, 도메 인에 대한 요청 수 또는 복잡성 을 줄이거나, 인스턴스를 추가 하거나, 더욱 큰 용량의 인스턴 스 유형을 사용하십시오.
노란색 클러스터 상태 관련 지표 설명 복구 _nodes/stats/jvm API는 JVM 통계 와 메모리 풀 사용량, 그리고 가비지 수집 정보를 유용하게 요약하여 제공합니다. GET elasticsearch_domain/_nodes/ stats/jvm?pretty CPUUtilization 클러스터의 데이터 노드에 사용되는 CPU 리소스의 비율을 지정합니다. 이 지 표에 대한 최대 통계를 보고 지속적으로 높은 사용 패턴이 있는지 찾습니다. 데이터 노드를 추가하거나 기존 데이터 노드의 인스턴스 유형 크기를 늘립니다. 자세한 내용 은 the section called Amazon ES 도메인 구성 (p. 14) 단원을 참조하십시오. 노드 클러스터에 있는 노드 수를 지정합니다. 이 지표에 대한 최소 통계를 봅니다. 서비 스에서 클러스터에 새 인스턴스 집합을 배포하는 경우 이 값이 변동됩니다. 데이터 노드를 추가하십시 오. 자세한 내용은 the section called Amazon ES 도메인 구 성 (p. 14) 단원을 참조하십시 오. 노란색 클러스터 상태 노란색 클러스터 상태는 모든 인덱스의 기본 샤드가 클러스터의 노드에 할당되어 있지만 하나 이상의 인덱 스에 복제본 샤드가 할당되어 있지 않음을 나타냅니다. 단일 노드 클러스터는 Amazon ES가 복제본을 할당 할 수 있는 다른 노드가 없기 때문에 항상 노란색 클러스터 상태로 초기화됩니다. 녹색 클러스터 상태가 되려 면 노드 개수를 늘리십시오. 자세한 내용은 the section called Amazon ES 도메인 크기 조정 (p. 134) 및 the section called Amazon ES 도메인 구성 (p. 14) 단원을 참조하십시오. ClusterBlockException 다음과 같은 이유로 ClusterBlockException 오류가 발생할 수 있습니다. 사용 가능한 스토리지 공간 부족 샤드 재할당을 받아들일 만큼 스토리지 공간이 넉넉한 노드가 없으면 문서 추가 및 인덱스 생성과 같은 기본 적인 쓰기 작업이 실패하기 시작합니다. the section called 스토리지 요구 사항 계산 (p. 135)는 Amazon ES 의 디스크 공간 사용에 대한 요약 정보를 제공합니다. 문제를 예방하려면 Amazon ES 콘솔에서 FreeStorageSpace 지표를 모니터링하다가 FreeStorageSpace가 특정 임계값 아래로 떨어지면 트리거되는 CloudWatch 경보를 생성 (p. 140)하십시 오. GET /_cat/allocation?v는 공유 할당 및 디스크 사용에 대한 유용한 요약 정보도 제공합니다. 스토 리지 공간 부족과 관련된 문제를 해결하려면 더 큰 인스턴스 유형, 더 많은 인스턴스 또는 더 많은 EBS 기반 스토리지를 사용하도록 Amazon ES 도메인을 확장하십시오. 지침은 the section called Amazon ES 도메인 구성 (p. 14) 단원을 참조하십시오. 메모리 부족으로 인한 디스크 차단 JVMMemoryPressure 지표가 30분간 92%를 초과하면 Amazon ES는 보호 메커니즘을 트리거 하고 모든 쓰기 작업을 차단하여 클러스터가 빨간색 상태가 되지 않도록 합니다. 보호가 설정되 152
JVM OutOfMemoryError 면 ClusterBlockException 오류가 뜨면서 쓰기 작업에 실패하고, 새 인덱스를 만들 수 없고, IndexCreateBlockException 오류가 발생합니다. JVMMemoryPressure 지표가 5분간 88% 이하로 돌아가면 이 보호 조치는 비활성화되고 클러스터에 대한 쓰 기 작업이 다시 허용됩니다. JVM OutOfMemoryError JVM OutOfMemoryError는 일반적으로 다음 JVM 회로 차단기 중 하나에 도달했음을 의미합니다. 회로 차단기 설명 클러스터 설정 속성 상위 차단기 모든 회로 차단기에 대해 허 용되는 JVM 힙 메모리의 총 비율입니다. 기본값은 70입니 다%. indices.breaker.total.limit 필드 데이터 차단기 메모리에 단일 데이터 필드를 로드하도록 허용된 JVM 힙 메 모리의 비율입니다. 기본값은 60입니다%. 큰 필드가 포함된 데이터를 업로드하는 경우에 는 이 제한을 높이는 것이 좋 습니다. indices.breaker.fielddata.limit 요청 차단기 서비스 요청에 응답하는 데 사 용되는 데이터 구조에 대해 허 용되는 JVM 힙 메모리의 비율 입니다. 기본값은 40입니다%. 서비스 요청에 집계 계산이 포 함된 경우 이 제한을 높이는 것이 좋습니다. indices.breaker.request.limit 실패한 클러스터 노드 Amazon EC2 인스턴스가 예기치 않게 종료되고 다시 시작될 수 있습니다. 일반적으로 Amazon ES는 노드를 자동으로 다시 시작합니다. 그러나 Elasticsearch 클러스터의 노드 하나 이상에서 실패 조건이 남아 있을 수 있습니다. 이러한 조건이 있는지 확인하려면 Amazon ES 콘솔에서 도메인 대시보드를 엽니다. Cluster health(클러스터 상태) 탭을 선택한 후 노드 지표를 선택합니다. 보고된 노드 수가 클러스터에 대해 구성한 노드 수보다 적은 지 확인합니다. 이 지표가 하나 이상의 노드가 하루 이상 다운되었음을 표시하면 AWS Support에 문의하십 시오. 또한 이런 문제가 발생할 경우 이를 알려주는 CloudWatch 경보를 설정 (p. 140)하는 것도 가능합니다. Note 클러스터 구성 변경 중 그리고 서비스에 대한 정기 유지보수 중에는 노드 지표가 정확하지 않습니 다. 이는 예상된 동작입니다. 따라서 이 지표는 곧 정확한 클러스터 노드 개수를 보고합니다. 자세한 내용은 the section called 구성 변경 정보 (p. 26) 단원을 참조하십시오. 예기치 않은 노드 종료 및 다시 시작으로부터 클러스터를 보호하려면 Amazon ES 도메인의 각 인덱스에 대 해 복제본을 하나 이상 만드십시오. 153
인덱스를 닫을 수 없습니다. 인덱스를 닫을 수 없습니다. Amazon ES는 _close API를 지원하지 않습니다. 스냅샷에서 인덱스를 복원하는 경우 기존 인덱스를 삭제 할 수 있습니다(다시 인덱스를 만들기 전 또는 후). 다른 옵션은 인덱스를 복원할 때 rename_pattern 및 rename_replacement 필드를 사용하여 인덱스 이름을 변경하는 것입니다. POST /_snapshot/my-repository/my-snapshot/_restore "indices": "my-index-1,myindex-2", "include_global_state": true, "rename_pattern": "my-index-(\\d)", "rename_replacement": "restored-my-index-$1" 인덱스를 다시 만들거나, 수축하거나, 분할하려는 경우 작업을 수행하기 전에 쓰기를 중단하는 것이 좋습니 다. 노드에 SSH할 수 없습니다. SSH를 사용하여 Elasticsearch 클러스터의 어떤 노드에도 액세스할 수 없고 elasticsearch.yml을 직접 수정할 수 없습니다. 대신, 콘솔, AWS CLI 또는 SDK를 사용해 도메인을 구성하십시오. Elasticsearch REST API를 사용하여 몇 가지 클러스터 수준 설정을 지정할 수도 있습니다. 자세한 내용은 Amazon ES 구성 API 참조 (p. 181) 및 the section called 지원되는 Elasticsearch 작업 (p. 159) 단원을 참조하십시오. 클러스터 성능에 대한 더 자세한 통찰이 필요한 경우 CloudWatch에 오류 로그 및 느린 로그를 게시 (p. 21)할 수 있습니다. "객체 스토리지 클래스의 경우 유효하지 않음" 오류 Amazon ES 스냅샷은 Glacier 스토리지 클래스를 지원하지 않습니다. 스냅샷을 나열하려 할 때 귀하의 S3 버 킷이 객체를 Glacier 스토리지 클래스로 전환하는 수명 주기를 갖고 있다면 이 에러가 발생합니다. 버킷으로부터 스냅샷을 복원하려면 Glacier로부터 객체를 복원하고 새로운 버킷으로 복사한 뒤 스냅샷 리포 지토리로 새로운 버킷을 등록 (p. 96)하십시오. 잘못된 호스트 헤더 Amazon ES에서는 클라이언트가 요청 헤드에 Host를 지정해야 합니다. 올바른 Host 값은 다음과 같이 https://가 없는 도메인 엔드포인트입니다. Host: search-my-sample-domain-ih2lhn2ew2scurji.us-west-2.es.amazonaws.com 요청을 수행할 때 Invalid Host Header 오류가 발생하는 경우 클라이언트의 Host 헤더에 Amazon ES 도메인 엔드포인트(예를 들어 IP 주소가 아님)가 포함되는지 확인하십시오. 업그레이드 후에는 다운그레이드할 수 없음 현재 위치 업그레이드 (p. 101)는 되돌릴 수 없지만, AWS Support에 문의하면 새 도메인에서 자동 업그레이 드 전 스냅샷을 복원하는 데 도움을 줄 수 있습니다. 예를 들어 Elasticsearch 5.6에서 6.4로 도메인을 업그레 154
모든 리전의 도메인에 대한 요약 필요 이드하는 경우, AWS Support는 새 Elasticsearch 5.6 도메인에서 업그레이드 전 스냅샷을 복원하는 데 도움 을 줄 수 있습니다. 원래 도메인의 수동 스냅샷을 생성한 경우, 해당 단계를 직접 수행 (p. 94)할 수 있습니다. 모든 리전의 도메인에 대한 요약 필요 다음 스크립트는 Amazon EC2 describe-regions AWS CLI 명령을 사용하여 Amazon ES를 사용할 수 있는 모든 리전 목록을 만듭니다. 그런 다음 각 리전에 대해 list-domain-names를 호출합니다. for region in `aws ec2 describe-regions --output text cut -f4` do echo "\nlisting domains in region '$region':" aws es list-domain-names --region $region --query 'DomainNames' done 각 리전에 대해 다음 출력을 수신합니다. Listing domains in region:'us-west-2'... [ "DomainName": "sample-domain" ] Amazon ES를 사용할 수 없는 리전은 "엔드포인트 URL에 연결할 수 없음"을 반환합니다. Kibana를 사용하려 할 때 브라우저 오류 Kibana를 사용하여 Amazon ES 도메인에서 데이터를 보려고 하면 브라우저가 HTTP 응답 객체에서 서비스 오류 메시지를 래핑합니다. 웹 브라우저에서 일반적으로 사용할 수 있는 개발자 도구(예: Chrome의 개발자 도구)를 사용하여 기본 서비스 오류를 확인하고 디버그 작업을 지원할 수 있습니다. Chrome에서 서비스 오류를 보려면 1. 2. 3. 메뉴에서 보기, 개발자, 개발자 도구를 차례로 선택합니다. 네트워크 탭을 선택합니다. 상태 열에서 상태가 500인 HTTP 세션을 선택합니다. Firefox에서 서비스 오류를 보려면 1. 2. 3. 메뉴에서 도구, 웹 개발 도구, 네트워크를 차례로 선택합니다. 상태가 500인 HTTP 세션을 선택합니다. 응답 탭을 선택하여 서비스 응답을 봅니다. VPC 액세스를 선택한 후 허용되지 않은 작업 Amazon ES 콘솔을 사용하여 새 도메인을 만들 때 VPC 또는 공용 액세스를 선택하는 옵션이 있습니다. VPC 액세스를 선택할 경우, Amazon ES가 VPC 정보를 쿼리하는데, 올바른 정책이 없을 경우 쿼리가 실패합니다. You are not authorized to perform this operation. (Service: AmazonEC2; Status Code: 403; Error Code: UnauthorizedOperation 155
VPC 도메인 생성 후 로딩 단계에서 멈춤 이 쿼리를 활성화하려면 ec2:describevpcs, ec2:describesubnets 및 ec2:describesecuritygroups 작업에 대한 액세스 권한이 있어야 합니다. 이 요구 사항은 콘솔에만 해 당됩니다. AWS CLI를 사용하여 VPC 엔드포인트를 사용하는 도메인을 만들고 구성하는 경우, 이러한 작업 에 액세스할 필요가 없습니다. VPC 도메인 생성 후 로딩 단계에서 멈춤 VPC 액세스를 사용하는 새 도메인을 만든 후, 도메인의 Configuration state(구성 상태)가 로드 중에서 더 이 상 진행되지 않을 수 있습니다. 이 문제가 발생할 경우 리전에서 AWS Security Token Service(AWS STS)가 비활성화된 것일 수 있습니다. VPC 엔드포인트를 VPC에 추가하려면 Amazon ES가 AWSServiceRoleForAmazonElasticsearchService 역할을 수해야 합니다. 따라서 지정된 리전에서 VPC 액세스를 사용하는 새 도메인을 생성하도록 AWS STS가 활성화되어야 합니다. AWS STS 활성화 및 비활성화에 대한 자세한 내용은 IAM 사용 설명서 단원을 참조하십시오. SDK를 사용할 때 인증서 오류 AWS SDK는 컴퓨터의 CA 인증서를 사용하기 때문에, AWS 서버의 인증서가 변경되면 SDK를 사용하려고 할 때 연결 장애가 발생할 수 있습니다. 오류 메시지는 다양하지만 일반적으로 다음 텍스트가 포함되어 있습 니다. Failed to query Elasticsearch... SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 컴퓨터의 CA 인증서와 운영 체제를 최신 상태로 유지하여 이러한 장애를 피할 수 있습니다. 본인 컴퓨터를 직접 관리하지 않는 기업 환경에서 이 문제가 발생하는 경우, 관리자에게 업데이트 프로세스를 문의해야 할 수 있습니다. 아래 목록에 최소한의 운영 체제 및 Java 버전이 나와 있습니다. 2005년 1월 이후 업데이트가 설치된 Microsoft Windows 버전의 경우, 신뢰할 수 있는 연결 목록에 필요한 CA가 하나 이상 들어 있습니다. Mac OS X 10.4 릴리스 5(2007년 2월), Mac OS X 10.5(2007년 10월) 및 그 이후 버전의 Java가 설치된 Mac OS X 10.4의 경우, 신뢰할 수 있는 연결 목록에 필요한 CA가 하나 이상 들어 있습니다. Red Hat Enterprise Linux 5(2007년 3월), 6, 7과 CentOS 5, 6, 7은 모두 신뢰할 수 있는 기본 CA 목록에 필 요한 CA가 하나 이상 들어 있습니다. Java 1.4.2_12(2006년 5월), 5 업데이트 2(2005년 3월), 그리고 Java 6(2006년 12월), 7, 8을 포함한 이후 의 모든 버전은 신뢰할 수 있는 기본 CA 목록에 필요한 CA가 하나 이상 들어 있습니다. 인증 기관은 다음 세 곳입니다. Amazon Root CA 1 Starfield Services Root Certificate Authority - G2 Starfield Class 2 Certification Authority 처음 두 기관의 루트 인증서는 Amazon Trust Services에서 구할 수 있지만, 컴퓨터를 최신 상태로 유지하는 것이 보다 직접적인 해결책입니다. ACM 제공 인증서에 대한 자세한 내용은 AWS Certificate Manager FAQ 단원을 참조하십시오. 156
SDK를 사용할 때 인증서 오류 Note 현재 us-east-1 리전의 Amazon ES 도메인은 다른 기관의 인증서를 사용합니다. 가까운 시일 안에 이 리전에서도 새 인증 기관을 사용하도록 업데이트할 예정입니다. 157
지원되는 인스턴스 유형 Amazon Elasticsearch Service 일반 참조 Amazon Elasticsearch Service(Amazon ES)에서는 다양한 인스턴스, 작업, 플러그인 및 기타 리소스를 지원 합니다. 주제 지원되는 인스턴스 유형 (p. 158) 지원되는 Elasticsearch 작업 (p. 159) 지원되는 플러그인 (p. 171) 지원되는 기타 리소스 (p. 176) 지원되는 인스턴스 유형 Amazon ES는 다음 인스턴스 유형을 지원합니다. 모든 리전에서 모든 인스턴스 유형이 지원되는 것은 아닙 니다. 제공 여부에 대한 자세한 내용은 Amazon Elasticsearch Service 요금 페이지를 참조하십시오. 어떤 인스턴스가 사용 사례에 적합한지에 대한 자세한 정보는 the section called Amazon ES 도메인 크 기 조정 (p. 134), the section called EBS 볼륨 크기 제한 (p. 241) 및 the section called 네트워크 제 한 (p. 243) 단원을 참조하십시오. 인스턴스 유형 제한 사항 C4 C5 I2 I3 I3 인스턴스 유형은 Elasticsearch 버전 5.1 이상이 필요하며 EBS 스토리지 볼륨을 지 원하지 않습니다. M3 M3 인스턴스 유형은 유휴 시 데이터를 암호화를 지원하지 않습니다. M4 M5 R3 R3 인스턴스 유형은 유휴 시 데이터를 암호화를 지원하지 않습니다. R4 R5 T2 도메인의 인스턴스 수가 10개 이하인 경우에만 T2 인스턴스 유형을 사용할 수 있습 니다. t2.micro.elasticsearch 인스턴스 유형은 Elasticsearch 1.5 및 2.3만 지원합니 다. T2 인스턴스 유형은 유휴 시 데이터를 암호화를 지원하지 않습니다. 158
지원되는 Elasticsearch 작업 Tip 전용 마스터 노드 (p. 137)와 데이터 노드에 다른 인스턴스 유형을 사용할 수 있습니다. 지원되는 Elasticsearch 작업 Amazon ES는 다양한 Elasticsearch 버전을 지원합니다. 이어지는 주제에서는 버전별로 Amazon ES에서 지 원되는 작업을 보여 줍니다. 주제 주요 API 차이점 (p. 159) 버전 7.1 (p. 160) 버전 6.8 (p. 161) 버전 6.7 (p. 162) 버전 6.5 (p. 163) 버전 6.4 (p. 164) 버전 6.3 (p. 165) 버전 6.2 (p. 165) 버전 6.0 (p. 166) 버전 5.6 (p. 167) 버전 5.5 (p. 168) 버전 5.3 (p. 169) 버전 5.1 (p. 169) 버전 2.3 (p. 170) 버전 1.5 (p. 171) 주요 API 차이점 클러스터 설정 Elasticsearch 5.3 이전까지는 Amazon ES 도메인의 _cluster/settings API가 GET 메서드가 아닌 HTTP PUT 메서드만 지원했습니다. 최신 버전은 다음 예제에서와 같이 GET 메서드를 지원합니다. GET https://domain.region.es.amazonaws.com/_cluster/settings?pretty 샘플 결과는 다음과 같습니다. "persistent" : "cluster" : "routing" : "allocation" : "cluster_concurrent_rebalance" : "2" "indices" : "recovery" : "max_bytes_per_sec" : "20mb" 159
버전 7.1 "transient" : "cluster" : "routing" : "allocation" : "exclude" : "di_number" : "2" cluster_concurrent_rebalance는 언제든지 새 노드로 이전할 수 있는 샤드 수를 지정합니다. max_bytes_per_sec는 Elasticsearch가 복구 이벤트 중 사용하는 최대 데이터 전송 속도입니다. di_number는 구성 변경 후 샤드를 새 도메인 인스턴스로 복사할 때 사용되는 내부 Amazon ES 값입니다. 축소 _shrink API는 업그레이드, 구성 변경 및 도메인 삭제를 실패하게 만들 수 있습니다. Elasticsearch 버전 5.3 또는 5.1을 실행하는 도메인에서는 사용하지 않는 것이 좋습니다. 이들 버전에는 축소된 인덱스의 스냅샷 복 원이 실패할 수 있는 버그가 있습니다. 다른 Elasticsearch 버전에서 _shrink API를 사용하는 경우 축소 작업을 시작하기 전에 다음 요청을 수행합 니다. PUT https://domain.region.es.amazonaws.com/source-index/_settings "settings": "index.routing.allocation.require._name": "name-of-the-node-to-shrink-to", "index.blocks.read_only": true 축소 작업을 완료한 후에 다음 요청을 수행합니다. PUT https://domain.region.es.amazonaws.com/source-index/_settings "settings": "index.routing.allocation.require._name": null, "index.blocks.read_only": false 버전 7.1 Elasticsearch 7.1에서는 Amazon ES가 다음 작업을 지원합니다. 1 3 /_alias /_delete_by_query /_scripts /_aliases /_all /_analyze /_explain /_field_stats /_flush /_search /_search profile /_bulk /_cache/clear(인덱스에만 해당) /_forcemerge(인덱스에만 해 당) /_ingest 160 2 /_segments(인덱스에만 해당) /_shard_stores 5 /_shrink
버전 6.8 /_cat /_mapping /_snapshot /_cluster/allocation/ explain /_cluster/health /_cluster/pending_tasks 여러 가지 속성의 /_cluster/ 4 settings : /_mget /_msearch /_mtermvectors /_nodes /_plugin/kibana /_rank_eval action.auto_create_index /_recovery(인덱스에만 해당) action.search.shard_count.limit /_refresh indices.breaker.fielddata.limit 1 /_reindex indices.breaker.request.limit /_rollover indices.breaker.total.limit /_split /_stats /_status /_tasks /_template /_termvectors(인덱스에만 해당) 3 /_update 1 /_update_by_query /_validate cluster.max_shards_per_node cluster.blocks.read_only /_cluster/state /_cluster/stats /_count 1. 클러스터 구성을 변경하면 완료 전 이러한 작업이 중단될 수 있습니다. 이러한 작업과 함께 /_tasks 작업 을 사용하여 요청이 성공적으로 완료되었는지 확인하는 것이 좋습니다. 2. 메시지 본문이 있는 /_search/scroll에 대한 DELETE 요청은 HTTP 헤더에 "Content-Length"를 지정해야 합니다. 대부분의 클라이언트는 기본적으로 이 헤더를 추가합니다. scroll_id 값에서 = 문자 로 인한 문제를 방지하려면 쿼리 문자열이 아닌 요청 본문을 사용하여 scroll_id 값을 Amazon ES에게 전달하십시오. 3. 스크립트 사용과 관련된 고려 사항은 the section called 지원되는 기타 리소스 (p. 176) 단원을 참조하 십시오. 4. PUT 메서드를 참조하십시오. GET 메서드에 대한 자세한 내용은 the section called 주요 API 차이 점 (p. 159) 단원을 참조하십시오. 5. the section called 축소 (p. 160) 단원을 참조하십시오. 버전 6.8 Elasticsearch 6.8에서는 Amazon ES가 다음 작업을 지원합니다. 1 3 /_alias /_delete_by_query /_scripts /_aliases /_all /_analyze /_explain /_field_stats /_flush /_search /_search profile /_bulk /_cache/clear(인덱스에만 해당) /_forcemerge(인덱스에만 해 당) /_ingest /_cat /_cluster/allocation/ explain /_cluster/health /_mapping /_mget /_cluster/pending_tasks /_nodes /_msearch /_mtermvectors 161 2 /_segments(인덱스에만 해당) /_shard_stores 5 /_shrink /_snapshot /_split /_stats /_status /_tasks /_template
버전 6.7 여러 가지 속성의 /_cluster/ 4 settings : /_plugin/kibana /_termvectors(인덱스에만 해당) /_rank_eval 3 action.auto_create_index /_recovery(인덱스에만 해당) /_update 1 action.search.shard_count.limit /_update_by_query /_refresh 1 indices.breaker.fielddata.limit /_validate /_reindex indices.breaker.request.limit /_rollover indices.breaker.total.limit cluster.max_shards_per_node /_cluster/state /_cluster/stats /_count 1. 클러스터 구성을 변경하면 완료 전 이러한 작업이 중단될 수 있습니다. 이러한 작업과 함께 /_tasks 작업 을 사용하여 요청이 성공적으로 완료되었는지 확인하는 것이 좋습니다. 2. 메시지 본문이 있는 /_search/scroll에 대한 DELETE 요청은 HTTP 헤더에 "Content-Length"를 지정해야 합니다. 대부분의 클라이언트는 기본적으로 이 헤더를 추가합니다. scroll_id 값에서 = 문자 로 인한 문제를 방지하려면 쿼리 문자열이 아닌 요청 본문을 사용하여 scroll_id 값을 Amazon ES에게 전달하십시오. 3. 스크립트 사용과 관련된 고려 사항은 the section called 지원되는 기타 리소스 (p. 176) 단원을 참조하 십시오. 4. PUT 메서드를 참조하십시오. GET 메서드에 대한 자세한 내용은 the section called 주요 API 차이 점 (p. 159) 단원을 참조하십시오. 5. the section called 축소 (p. 160) 단원을 참조하십시오. 버전 6.7 Elasticsearch 6.7에서는 Amazon ES가 다음 작업을 지원합니다. 1 3 /_alias /_delete_by_query /_scripts /_aliases /_all /_analyze /_explain /_field_stats /_flush /_search /_search profile /_bulk /_cache/clear(인덱스에만 해당) /_forcemerge(인덱스에만 해 당) /_ingest /_cat /_cluster/allocation/ explain /_cluster/health /_mapping /_mget /_cluster/pending_tasks /_nodes /_plugin/kibana 여러 가지 속성의 /_cluster/ 4 settings : /_msearch /_mtermvectors /_rank_eval action.auto_create_index /_recovery(인덱스에만 해당) action.search.shard_count.limit /_refresh indices.breaker.fielddata.limit 1 /_reindex indices.breaker.request.limit /_rollover indices.breaker.total.limit 162 2 /_segments(인덱스에만 해당) /_shard_stores 5 /_shrink /_snapshot /_split /_stats /_status /_tasks /_template /_termvectors(인덱스에만 해당) 3 /_update 1 /_update_by_query /_validate
버전 6.5 cluster.max_shards_per_node /_cluster/state /_cluster/stats /_count 1. 클러스터 구성을 변경하면 완료 전 이러한 작업이 중단될 수 있습니다. 이러한 작업과 함께 /_tasks 작업 을 사용하여 요청이 성공적으로 완료되었는지 확인하는 것이 좋습니다. 2. 메시지 본문이 있는 /_search/scroll에 대한 DELETE 요청은 HTTP 헤더에 "Content-Length"를 지정해야 합니다. 대부분의 클라이언트는 기본적으로 이 헤더를 추가합니다. scroll_id 값에서 = 문자 로 인한 문제를 방지하려면 쿼리 문자열이 아닌 요청 본문을 사용하여 scroll_id 값을 Amazon ES에게 전달하십시오. 3. 스크립트 사용과 관련된 고려 사항은 the section called 지원되는 기타 리소스 (p. 176) 단원을 참조하 십시오. 4. PUT 메서드를 참조하십시오. GET 메서드에 대한 자세한 내용은 the section called 주요 API 차이 점 (p. 159) 단원을 참조하십시오. 5. the section called 축소 (p. 160) 단원을 참조하십시오. 버전 6.5 Elasticsearch 6.5에서는 Amazon ES가 다음 작업을 지원합니다. 1 3 /_alias /_delete_by_query /_scripts /_aliases /_all /_analyze /_explain /_field_stats /_flush /_search /_search profile /_bulk /_cache/clear(인덱스에만 해당) /_forcemerge(인덱스에만 해 당) /_ingest /_cat /_cluster/allocation/ explain /_cluster/health /_mapping /_mget /_cluster/pending_tasks /_nodes /_plugin/kibana 여러 가지 속성의 /_cluster/ 4 settings : /_msearch /_mtermvectors /_rank_eval action.auto_create_index /_recovery(인덱스에만 해당) action.search.shard_count.limit /_refresh indices.breaker.fielddata.limit 1 /_reindex indices.breaker.request.limit /_rollover indices.breaker.total.limit 2 /_segments(인덱스에만 해당) /_shard_stores 5 /_shrink /_snapshot /_split /_stats /_status /_tasks /_template /_termvectors(인덱스에만 해당) 3 /_update 1 /_update_by_query /_validate /_cluster/state /_cluster/stats /_count 1. 클러스터 구성을 변경하면 완료 전 이러한 작업이 중단될 수 있습니다. 이러한 작업과 함께 /_tasks 작업 을 사용하여 요청이 성공적으로 완료되었는지 확인하는 것이 좋습니다. 163
버전 6.4 2. 메시지 본문이 있는 /_search/scroll에 대한 DELETE 요청은 HTTP 헤더에 "Content-Length"를 지정해야 합니다. 대부분의 클라이언트는 기본적으로 이 헤더를 추가합니다. scroll_id 값에서 = 문자 로 인한 문제를 방지하려면 쿼리 문자열이 아닌 요청 본문을 사용하여 scroll_id 값을 Amazon ES에게 전달하십시오. 3. 스크립트 사용과 관련된 고려 사항은 the section called 지원되는 기타 리소스 (p. 176) 단원을 참조하 십시오. 4. PUT 메서드를 참조하십시오. GET 메서드에 대한 자세한 내용은 the section called 주요 API 차이 점 (p. 159) 단원을 참조하십시오. 5. the section called 축소 (p. 160) 단원을 참조하십시오. 버전 6.4 Elasticsearch 6.4에서는 Amazon ES가 다음 작업을 지원합니다. 1 3 /_alias /_delete_by_query /_scripts /_aliases /_all /_analyze /_explain /_field_stats /_flush /_search /_search profile /_bulk /_cache/clear(인덱스에만 해당) /_forcemerge(인덱스에만 해 당) /_ingest /_cat /_cluster/allocation/ explain /_cluster/health /_mapping /_mget /_cluster/pending_tasks /_nodes /_plugin/kibana 여러 가지 속성의 /_cluster/ 4 settings : /_msearch /_mtermvectors /_rank_eval action.auto_create_index /_recovery(인덱스에만 해당) action.search.shard_count.limit /_refresh indices.breaker.fielddata.limit 1 /_reindex indices.breaker.request.limit /_rollover indices.breaker.total.limit 2 /_segments(인덱스에만 해당) /_shard_stores 5 /_shrink /_snapshot /_split /_stats /_status /_tasks /_template /_termvectors(인덱스에만 해당) 3 /_update 1 /_update_by_query /_validate /_cluster/state /_cluster/stats /_count 1. 클러스터 구성을 변경하면 완료 전 이러한 작업이 중단될 수 있습니다. 이러한 작업과 함께 /_tasks 작업 을 사용하여 요청이 성공적으로 완료되었는지 확인하는 것이 좋습니다. 2. 메시지 본문이 있는 /_search/scroll에 대한 DELETE 요청은 HTTP 헤더에 "Content-Length"를 지정해야 합니다. 대부분의 클라이언트는 기본적으로 이 헤더를 추가합니다. scroll_id 값에서 = 문자 로 인한 문제를 방지하려면 쿼리 문자열이 아닌 요청 본문을 사용하여 scroll_id 값을 Amazon ES에게 전달하십시오. 3. 스크립트 사용과 관련된 고려 사항은 the section called 지원되는 기타 리소스 (p. 176) 단원을 참조하 십시오. 4. PUT 메서드를 참조하십시오. GET 메서드에 대한 자세한 내용은 the section called 주요 API 차이 점 (p. 159) 단원을 참조하십시오. 5. the section called 축소 (p. 160) 단원을 참조하십시오. 164
버전 6.3 버전 6.3 Elasticsearch 6.3에서는 Amazon ES가 다음 작업을 지원합니다. 1 3 /_alias /_delete_by_query /_scripts /_aliases /_all /_analyze /_explain /_field_stats /_flush /_search /_search profile /_bulk /_cache/clear(인덱스에만 해당) /_forcemerge(인덱스에만 해 당) /_ingest /_cat /_cluster/allocation/ explain /_cluster/health /_mapping /_mget /_cluster/pending_tasks /_nodes /_plugin/kibana 여러 가지 속성의 /_cluster/ 4 settings : 2 /_msearch /_segments(인덱스에만 해당) /_shard_stores 5 /_shrink /_snapshot /_split /_stats /_status /_mtermvectors /_tasks /_template /_rank_eval action.auto_create_index /_recovery(인덱스에만 해당) action.search.shard_count.limit /_refresh indices.breaker.fielddata.limit 1 /_reindex indices.breaker.request.limit /_rollover indices.breaker.total.limit /_termvectors(인덱스에만 해당) 3 /_update 1 /_update_by_query /_validate /_cluster/state /_cluster/stats /_count 1. 클러스터 구성을 변경하면 완료 전 이러한 작업이 중단될 수 있습니다. 이러한 작업과 함께 /_tasks 작업 을 사용하여 요청이 성공적으로 완료되었는지 확인하는 것이 좋습니다. 2. 메시지 본문이 있는 /_search/scroll에 대한 DELETE 요청은 HTTP 헤더에 "Content-Length"를 지정해야 합니다. 대부분의 클라이언트는 기본적으로 이 헤더를 추가합니다. scroll_id 값에서 = 문자 로 인한 문제를 방지하려면 쿼리 문자열이 아닌 요청 본문을 사용하여 scroll_id 값을 Amazon ES에게 전달하십시오. 3. 스크립트 사용과 관련된 고려 사항은 the section called 지원되는 기타 리소스 (p. 176) 단원을 참조하 십시오. 4. PUT 메서드를 참조하십시오. GET 메서드에 대한 자세한 내용은 the section called 주요 API 차이 점 (p. 159) 단원을 참조하십시오. 5. the section called 축소 (p. 160) 단원을 참조하십시오. 버전 6.2 Elasticsearch 6.2에서는 Amazon ES가 다음 작업을 지원합니다. 1 /_alias /_delete_by_query /_aliases /_all /_explain /_field_stats 165 3 /_scripts 2 /_search /_search profile
버전 6.0 /_analyze /_flush /_segments(인덱스에만 해당) /_bulk /_cache/clear(인덱스에만 해당) /_cat /_forcemerge(인덱스에만 해 당) /_ingest /_mapping /_cluster/allocation/ explain /_mget /_msearch /_cluster/health /_cluster/pending_tasks 여러 가지 속성의 /_cluster/ 4 settings : /_shard_stores 5 /_shrink /_snapshot /_split /_stats /_status /_mtermvectors /_nodes /_tasks /_template /_termvectors(인덱스에만 해당) /_plugin/kibana /_rank_eval action.auto_create_index 3 /_recovery(인덱스에만 해당) /_update action.search.shard_count.limit 1 /_refresh /_update_by_query indices.breaker.fielddata.limit 1 /_reindex /_validate indices.breaker.request.limit /_rollover indices.breaker.total.limit /_cluster/state /_cluster/stats /_count 1. 클러스터 구성을 변경하면 완료 전 이러한 작업이 중단될 수 있습니다. 이러한 작업과 함께 /_tasks 작업 을 사용하여 요청이 성공적으로 완료되었는지 확인하는 것이 좋습니다. 2. 메시지 본문이 있는 /_search/scroll에 대한 DELETE 요청은 HTTP 헤더에 "Content-Length"를 지정해야 합니다. 대부분의 클라이언트는 기본적으로 이 헤더를 추가합니다. scroll_id 값에서 = 문자 로 인한 문제를 방지하려면 쿼리 문자열이 아닌 요청 본문을 사용하여 scroll_id 값을 Amazon ES에게 전달하십시오. 3. 스크립트 사용과 관련된 고려 사항은 the section called 지원되는 기타 리소스 (p. 176) 단원을 참조하 십시오. 4. PUT 메서드를 참조하십시오. GET 메서드에 대한 자세한 내용은 the section called 주요 API 차이 점 (p. 159) 단원을 참조하십시오. 5. the section called 축소 (p. 160) 단원을 참조하십시오. 버전 6.0 Elasticsearch 6.0에서는 Amazon ES가 다음 작업을 지원합니다. 1 3 /_alias /_delete_by_query /_scripts /_aliases /_all /_analyze /_explain /_field_stats /_flush /_search /_search profile /_bulk /_cache/clear(인덱스에만 해당) /_forcemerge(인덱스에만 해 당) /_ingest /_cat /_cluster/allocation/ explain /_cluster/health /_mapping /_mget /_msearch /_mtermvectors 166 2 /_segments(인덱스에만 해당) /_shard_stores 5 /_shrink /_snapshot /_stats /_status /_tasks
버전 5.6 /_cluster/pending_tasks /_nodes /_template 여러 가지 속성의 /_cluster/ /_plugin/kibana /_termvectors(인덱스에만 4 settings : 해당) /_recovery(인덱스에만 해당) 3 action.auto_create_index /_update /_refresh 1 1 action.search.shard_count.limit /_update_by_query /_reindex indices.breaker.fielddata.limit /_rollover indices.breaker.request.limit /_validate indices.breaker.total.limit /_cluster/state /_cluster/stats /_count 1. 클러스터 구성을 변경하면 완료 전 이러한 작업이 중단될 수 있습니다. 이러한 작업과 함께 /_tasks 작업 을 사용하여 요청이 성공적으로 완료되었는지 확인하는 것이 좋습니다. 2. 메시지 본문이 있는 /_search/scroll에 대한 DELETE 요청은 HTTP 헤더에 "Content-Length"를 지정해야 합니다. 대부분의 클라이언트는 기본적으로 이 헤더를 추가합니다. scroll_id 값에서 = 문자 로 인한 문제를 방지하려면 쿼리 문자열이 아닌 요청 본문을 사용하여 scroll_id 값을 Amazon ES에게 전달하십시오. 3. 스크립트 사용과 관련된 고려 사항은 the section called 지원되는 기타 리소스 (p. 176) 단원을 참조하 십시오. 4. PUT 메서드를 참조하십시오. GET 메서드에 대한 자세한 내용은 the section called 주요 API 차이 점 (p. 159) 단원을 참조하십시오. 5. the section called 축소 (p. 160) 단원을 참조하십시오. 버전 5.6 Elasticsearch 5.6에서는 Amazon ES가 다음 작업을 지원합니다. 1 3 /_alias /_delete_by_query /_scripts /_aliases /_all /_analyze /_explain /_field_stats /_flush /_search /_search profile /_bulk /_cache/clear(인덱스에만 해당) /_forcemerge(인덱스에만 해 당) /_ingest /_cat /_cluster/allocation/ explain /_cluster/health /_mapping /_mget /_cluster/pending_tasks /_nodes /_plugin/kibana 여러 가지 속성의 /_cluster/ 4 settings : /_msearch /_mtermvectors 2 /_segments(인덱스에만 해당) /_shard_stores 5 /_shrink /_snapshot /_stats /_status /_tasks /_template /_termvectors(인덱스에만 해당) /_recovery(인덱스에만 해당) 3 /_update action.auto_create_index /_refresh 1 /_update_by_query action.search.shard_count.limit 1 /_reindex /_validate indices.breaker.fielddata.limit /_rollover indices.breaker.request.limit indices.breaker.total.limit 167
버전 5.5 /_cluster/state /_cluster/stats /_count 1. 클러스터 구성을 변경하면 완료 전 이러한 작업이 중단될 수 있습니다. 이러한 작업과 함께 /_tasks 작업 을 사용하여 요청이 성공적으로 완료되었는지 확인하는 것이 좋습니다. 2. 메시지 본문이 있는 /_search/scroll에 대한 DELETE 요청은 HTTP 헤더에 "Content-Length"를 지정해야 합니다. 대부분의 클라이언트는 기본적으로 이 헤더를 추가합니다. scroll_id 값에서 = 문자 로 인한 문제를 방지하려면 쿼리 문자열이 아닌 요청 본문을 사용하여 scroll_id 값을 Amazon ES에게 전달하십시오. 3. 스크립트 사용과 관련된 고려 사항은 the section called 지원되는 기타 리소스 (p. 176) 단원을 참조하 십시오. 4. PUT 메서드를 참조하십시오. GET 메서드에 대한 자세한 내용은 the section called 주요 API 차이 점 (p. 159) 단원을 참조하십시오. 5. the section called 축소 (p. 160) 단원을 참조하십시오. 버전 5.5 Elasticsearch 5.5에서는 Amazon ES가 다음 작업을 지원합니다. 1 3 /_alias /_delete_by_query /_scripts /_aliases /_all /_analyze /_explain /_field_stats /_flush /_search /_search profile /_bulk /_cache/clear(인덱스에만 해당) /_forcemerge(인덱스에만 해 당) /_ingest /_cat /_cluster/allocation/ explain /_cluster/health /_mapping /_mget /_cluster/pending_tasks /_nodes /_plugin/kibana 여러 가지 속성의 /_cluster/ 4 settings : /_msearch /_mtermvectors 2 /_segments(인덱스에만 해당) /_shard_stores 5 /_shrink /_snapshot /_stats /_status /_tasks /_template /_termvectors(인덱스에만 해당) /_recovery(인덱스에만 해당) 3 /_update action.auto_create_index /_refresh 1 /_update_by_query action.search.shard_count.limit 1 /_reindex /_validate indices.breaker.fielddata.limit /_rollover indices.breaker.request.limit indices.breaker.total.limit /_cluster/state /_cluster/stats /_count 1. 클러스터 구성을 변경하면 완료 전 이러한 작업이 중단될 수 있습니다. 이러한 작업과 함께 /_tasks 작업 을 사용하여 요청이 성공적으로 완료되었는지 확인하는 것이 좋습니다. 2. 메시지 본문이 있는 /_search/scroll에 대한 DELETE 요청은 HTTP 헤더에 "Content-Length"를 지정해야 합니다. 대부분의 클라이언트는 기본적으로 이 헤더를 추가합니다. scroll_id 값에서 = 문자 168
버전 5.3 로 인한 문제를 방지하려면 쿼리 문자열이 아닌 요청 본문을 사용하여 scroll_id 값을 Amazon ES에게 전달하십시오. 3. 스크립트 사용과 관련된 고려 사항은 the section called 지원되는 기타 리소스 (p. 176) 단원을 참조하 십시오. 4. PUT 메서드를 참조하십시오. GET 메서드에 대한 자세한 내용은 the section called 주요 API 차이 점 (p. 159) 단원을 참조하십시오. 5. the section called 축소 (p. 160) 단원을 참조하십시오. 버전 5.3 Elasticsearch 5.3에서는 Amazon ES가 다음 작업을 지원합니다. 1 2 /_alias /_delete_by_query /_search /_aliases /_all /_analyze /_explain /_field_stats /_flush /_bulk /_cache/clear(인덱스에만 해당) /_forcemerge(인덱스 에만 해당) /_ingest /_search profile /_segments(인덱스 에만 해당) /_shard_stores /_cat /_cluster/allocation/explain /_cluster/health /_cluster/pending_tasks 4 여러 가지 속성의 /_cluster/settings : action.auto_create_index action.search.shard_count.limit indices.breaker.fielddata.limit indices.breaker.request.limit indices.breaker.total.limit /_cluster/state /_cluster/stats 5 /_shrink /_snapshot /_mapping /_mget /_stats /_status /_msearch /_tasks /_mtermvectors /_template /_nodes /_plugin/kibana /_termvectors(인 덱스에만 해당) /_recovery(인덱스에 만 해당) /_refresh / 1 _update_by_query 1 /_reindex 3 /_update /_validate /_rollover /_count 1. 클러스터 구성을 변경하면 완료 전 이러한 작업이 중단될 수 있습니다. 이러한 작업과 함께 /_tasks 작업 을 사용하여 요청이 성공적으로 완료되었는지 확인하는 것이 좋습니다. 2. 메시지 본문이 있는 /_search/scroll에 대한 DELETE 요청은 HTTP 헤더에 "Content-Length"를 지정해야 합니다. 대부분의 클라이언트는 기본적으로 이 헤더를 추가합니다. scroll_id 값에서 = 문자 로 인한 문제를 방지하려면 쿼리 문자열이 아닌 요청 본문을 사용하여 scroll_id 값을 Amazon ES에게 전달하십시오. 3. 스크립트 사용과 관련된 고려 사항은 the section called 지원되는 기타 리소스 (p. 176) 단원을 참조하 십시오. 4. PUT 메서드를 참조하십시오. GET 메서드에 대한 자세한 내용은 the section called 주요 API 차이 점 (p. 159) 단원을 참조하십시오. 5. the section called 축소 (p. 160) 단원을 참조하십시오. 버전 5.1 Elasticsearch 5.1에서는 Amazon ES가 다음 작업을 지원합니다. 169
버전 2.3 /_alias /_count /_aliases /_all /_analyze /_delete_by_query /_explain /_field_stats /_bulk /_cache/clear(인덱스에만 해당) /_cat /_flush /_forcemerge(인덱스 에만 해당) /_cluster/allocation/explain /_cluster/health /_cluster/pending_tasks /_ingest /_mapping /_snapshot /_stats /_mget /_status /_msearch /_tasks /_mtermvectors /_nodes /_template /_termvectors(인 덱스에만 해당) 여러 가지 속성의 /_cluster/ settings(put만): action.auto_create_index 1 action.search.shard_count.limit /_plugin/kibana indices.breaker.fielddata.limit /_recovery(인덱스에 만 해당) indices.breaker.request.limit indices.breaker.total.limit /_refresh 1 /_reindex /_rollover 2 /_search /_search profile /_segments(인덱스 에만 해당) /_shard_stores 4 /_shrink 3 /_update / 1 _update_by_query /_validate /_cluster/state /_cluster/stats 1. 클러스터 구성을 변경하면 완료 전 이러한 작업이 중단될 수 있습니다. 이러한 작업과 함께 /_tasks 작업 을 사용하여 요청이 성공적으로 완료되었는지 확인하는 것이 좋습니다. 2. 메시지 본문이 있는 /_search/scroll에 대한 DELETE 요청은 HTTP 헤더에 "Content-Length"를 지정해야 합니다. 대부분의 클라이언트는 기본적으로 이 헤더를 추가합니다. scroll_id 값에서 = 문자 로 인한 문제를 방지하려면 쿼리 문자열이 아닌 요청 본문을 사용하여 scroll_id 값을 Amazon ES에게 전달하십시오. 3. 스크립트 사용과 관련된 고려 사항은 the section called 지원되는 기타 리소스 (p. 176) 단원을 참조하 십시오. 4. the section called 축소 (p. 160) 단원을 참조하십시오. 버전 2.3 Elasticsearch 2.3에서는 Amazon ES가 다음 작업을 지원합니다. /_alias /_cluster/stats /_aliases /_all /_analyze /_count /_flush /_forcemerge(인덱스 에만 해당) /_bulk /_cache/clear(인덱스에만 해당) /_cat /_cluster/health 4개 속성에 대한 /_cluster/settings(put 에만 해당): /_recovery(인덱스 에만 해당) /_mapping /_mget /_refresh /_search /_segments(인덱스 에만 해당) /_snapshot /_msearch /_nodes /_status /_percolate 170 /_stats /_template
버전 1.5 indices.breaker.fielddata.limit /_plugin/kibana indices.breaker.request.limit indices.breaker.total.limit threadpool.bulk.queue_size 버전 1.5 Elasticsearch 1.5에서는 Amazon ES가 다음 작업을 지원합니다. /_alias /_cluster/stats /_refresh /_aliases /_all /_analyze /_count /_flush /_mapping /_search /_snapshot /_stats /_bulk /_cat /_mget /_msearch /_status /_template /_cluster/health /_nodes 4개 속성에 대한 /_cluster/settings(put에만 해당): /_percolate /_plugin/kibana /_plugin/kibana3 indices.breaker.fielddata.limit indices.breaker.request.limit indices.breaker.total.limit threadpool.bulk.queue_size 지원되는 플러그인 Amazon ES 도메인에는 Elasticsearch 커뮤니티의 플러그인이 미리 포함되어 제공됩니다. 서비스에서 플러 그인을 자동으로 배포하고 관리합니다. Note Kibana는 구 버전 Amazon ES 및 최신 버전 Node.js 애플리케이션의 플러그인입니다. 모든 Amazon ES 도메인에는 Kibana 사전 설치 버전이 포함되어 있습니다. Elasticsearch 버전 플러그인 7.1 ICU Analysis Ingest Attachment Processor Ingest User Agent Processor Japanese (kuromoji) Analysis Mapper Murmur3 Mapper Size Phonetic Analysis Smart Chinese Analysis Stempel Polish Analysis Ukrainian Analysis Seunjeon 한국어 분석 171
지원되는 플러그인 Elasticsearch 버전 플러그인 6.8 ICU Analysis Ingest Attachment Processor Ingest User Agent Processor Japanese (kuromoji) Analysis Mapper Murmur3 Mapper Size Phonetic Analysis Smart Chinese Analysis Stempel Polish Analysis Ukrainian Analysis Seunjeon 한국어 분석 6.7 ICU Analysis Ingest Attachment Processor Ingest User Agent Processor Japanese (kuromoji) Analysis Mapper Murmur3 Mapper Size Phonetic Analysis Smart Chinese Analysis Stempel Polish Analysis Ukrainian Analysis Seunjeon 한국어 분석 6.5 ICU Analysis Ingest Attachment Processor Ingest User Agent Processor Japanese (kuromoji) Analysis Mapper Murmur3 Mapper Size Phonetic Analysis Smart Chinese Analysis Stempel Polish Analysis Ukrainian Analysis Seunjeon 한국어 분석 172
지원되는 플러그인 Elasticsearch 버전 플러그인 6.4 ICU Analysis Ingest Attachment Processor Ingest User Agent Processor Japanese (kuromoji) Analysis Mapper Murmur3 Mapper Size Phonetic Analysis Smart Chinese Analysis Stempel Polish Analysis Ukrainian Analysis Seunjeon 한국어 분석 6.3 ICU Analysis Ingest Attachment Processor Ingest User Agent Processor Japanese (kuromoji) Analysis Mapper Murmur3 Mapper Size Phonetic Analysis Smart Chinese Analysis Stempel Polish Analysis Ukrainian Analysis Seunjeon 한국어 분석 6.2 ICU Analysis Ingest Attachment Processor Ingest User Agent Processor Japanese (kuromoji) Analysis Mapper Murmur3 Mapper Size Phonetic Analysis Smart Chinese Analysis Stempel Polish Analysis Ukrainian Analysis Seunjeon 한국어 분석 173
지원되는 플러그인 Elasticsearch 버전 플러그인 6.0 ICU Analysis Ingest Attachment Processor Ingest User Agent Processor Japanese (kuromoji) Analysis Mapper Murmur3 Mapper Size Phonetic Analysis Smart Chinese Analysis Stempel Polish Analysis Ukrainian Analysis Seunjeon 한국어 분석 5.6 ICU Analysis Ingest Attachment Processor Ingest User Agent Processor Japanese (kuromoji) Analysis Mapper Attachments Mapper Murmur3 Mapper Size Phonetic Analysis Smart Chinese Analysis Stempel Polish Analysis Ukrainian Analysis Seunjeon 한국어 분석 5.5 ICU Analysis Ingest Attachment Processor Ingest User Agent Processor Japanese (kuromoji) Analysis Mapper Attachments Mapper Murmur3 Mapper Size Phonetic Analysis Smart Chinese Analysis Stempel Polish Analysis Ukrainian Analysis Seunjeon 한국어 분석 174
출력 플러그인 Elasticsearch 버전 플러그인 5.3 ICU Analysis Ingest Attachment Processor Ingest User Agent Processor Japanese (kuromoji) Analysis Mapper Attachments Mapper Murmur3 Mapper Size Phonetic Analysis Smart Chinese Analysis Stempel Polish Analysis Ukrainian Analysis Seunjeon 한국어 분석 5.1 ICU Analysis Ingest Attachment Processor Ingest User Agent Processor Japanese (kuromoji) Analysis Mapper Murmur3 Phonetic Analysis Smart Chinese Analysis Stempel Polish Analysis Seunjeon 한국어 분석 2.3 ICU Analysis Japanese (kuromoji) Analysis Kibana 4 Phonetic Analysis 1.5 ICU Analysis Japanese (kuromoji) Analysis Kibana 3(_plugin/kibana3/ 엔드포인트에 위치) Kibana 4 출력 플러그인 또한 Amazon ES는 Amazon ES로 데이터를 스트리밍하기 위해 2가지 Logstash 출력 플러그인 즉, 표 준 Elasticsearch 출력 플러그인과 Logstash 이벤트에 서명하여 해당 이벤트를 Amazon ES로 내보내는 logstash-output-amazon_es 플러그인을 지원합니다. Logstash에 대한 자세한 내용은 the section called Logstash 플러그인을 사용하여 대량 데이터 로 드 (p. 109) 단원을 참조하십시오. 175
지원되는 기타 리소스 지원되는 기타 리소스 bootstrap.mlockall 이 서비스는 bootstrap.mlockall에서 elasticsearch.yml을 활성화하여 JVM 메모리를 잠그고 운영 체제가 디스크로 스와핑하지 못하도록 방지합니다. 이는 다음을 제외하고 지원되는 모든 인스턴스 유형에 적용됩니다. t2.micro.elasticsearch t2.small.elasticsearch t2.medium.elasticsearch 스크립팅 모듈 이 서비스는 Elasticsearch 5.x 이상 도메인에 대한 스크립팅을 지원합니다. 1.5 또는 2.3에 대한 스크립 팅은 지원되지 않습니다. 지원되는 스크립팅 옵션은 다음과 같습니다. Painless Lucene Expressions Mustache Elasticsearch 5.5 이상 도메인의 경우 Amazon ES는 _scripts 엔드포인트를 사용하는 저장된 스크립 트를 지원합니다. Elasticsearch 5.3 및 5.1 도메인에서는 인라인 스크립트만 지원합니다. TCP 전송 포트 80에서 HTTP는 지원되지만 TCP 전송은 지원되지 않습니다. 176
Java Amazon Elasticsearch Service와 함께 AWS SDK 사용 이 장에는 AWS SDK를 사용하여 Amazon Elasticsearch Service 구성 API와 상호작용하는 방법의 예제가 나 와 있습니다. 이러한 코드 샘플은 Amazon ES 도메인을 생성, 업데이트, 삭제하는 방법을 보여 줍니다. Important _index, _bulk, _search 및 _snapshot 등 Elasticsearch API와 상호 작용하는 방법에 대한 예제 는 HTTP 요청에 서명 (p. 69) 단원을 참조하십시오. Java 이 첫 번째 예제에서는 AWS SDK for Java를 사용하여 도메인을 생성하여 그 구성을 업데이트하고 삭제합니 다. waitfordomainprocessing에 대한 호출을 제거하여 (그리고 deletedomain에 대한 호출을 언급하 여) 해당 도메인이 온라인에 연결되어 사용 가능한 상태가 되도록 허용합니다. package com.amazonaws.samples; import java.util.concurrent.timeunit; import import import import import import import import import import import import import import import import import import com.amazonaws.auth.defaultawscredentialsproviderchain; com.amazonaws.regions.regions; com.amazonaws.services.elasticsearch.awselasticsearch; com.amazonaws.services.elasticsearch.awselasticsearchclientbuilder; com.amazonaws.services.elasticsearch.model.createelasticsearchdomainrequest; com.amazonaws.services.elasticsearch.model.createelasticsearchdomainresult; com.amazonaws.services.elasticsearch.model.deleteelasticsearchdomainrequest; com.amazonaws.services.elasticsearch.model.deleteelasticsearchdomainresult; com.amazonaws.services.elasticsearch.model.describeelasticsearchdomainrequest; com.amazonaws.services.elasticsearch.model.describeelasticsearchdomainresult; com.amazonaws.services.elasticsearch.model.ebsoptions; com.amazonaws.services.elasticsearch.model.elasticsearchclusterconfig; com.amazonaws.services.elasticsearch.model.nodetonodeencryptionoptions; com.amazonaws.services.elasticsearch.model.resourcenotfoundexception; com.amazonaws.services.elasticsearch.model.snapshotoptions; com.amazonaws.services.elasticsearch.model.updateelasticsearchdomainconfigrequest; com.amazonaws.services.elasticsearch.model.updateelasticsearchdomainconfigresult; com.amazonaws.services.elasticsearch.model.volumetype; /** * Sample class demonstrating how to use the AWS SDK for Java to create, update, * and delete Amazon Elasticsearch Service domains. */ public class AESSample public static void main(string[] args) final String domainname = "my-test-domain"; // Build the client using the default credentials chain. // You can use the AWS CLI and run `aws configure` to set access key, secret // key, and default region. final AWSElasticsearch client = AWSElasticsearchClientBuilder 177
Java.standard() // Unnecessary, but lets you use a region different than your default..withregion(regions.us_west_2) // Unnecessary, but if desired, you can use a different provider chain..withcredentials(new DefaultAWSCredentialsProviderChain()).build(); // Create a new domain, update its configuration, and delete it. createdomain(client, domainname); // waitfordomainprocessing(client, domainname); updatedomain(client, domainname); // waitfordomainprocessing(client, domainname); deletedomain(client, domainname); /** * Creates an Amazon Elasticsearch Service domain with the specified options. * Some options require other AWS resources, such as an Amazon Cognito user pool * and identity pool, whereas others require just an instance type or instance * count. * * @param client * The AWSElasticsearch client to use for the requests to Amazon * Elasticsearch Service * @param domainname * The name of the domain you want to create */ private static void createdomain(final AWSElasticsearch client, final String domainname) // Create the request and set the desired configuration options CreateElasticsearchDomainRequest createrequest = new CreateElasticsearchDomainRequest().withDomainName(domainName).withElasticsearchVersion("6.3").withElasticsearchClusterConfig(new ElasticsearchClusterConfig().withDedicatedMasterEnabled(true).withDedicatedMasterCount(3) // Small, inexpensive instance types for testing. Not recommended for production // domains..withdedicatedmastertype("t2.small.elasticsearch").withinstancetype("t2.small.elasticsearch").withinstancecount(5)) // Many instance types require EBS storage..withebsoptions(new EBSOptions().withEBSEnabled(true).withVolumeSize(10).withVolumeType(VolumeType.Gp2)) // You can uncomment this line and add your account ID, a user name, and the // domain name to add an access policy. //.withaccesspolicies("\"version\":\"2012-10-17\",\"statement\": [\"Effect\":\"Allow\",\"Principal\":\"AWS\":[\"arn:aws:iam::123456789012:user/user-name \"]\"Action\":[\"es:*\"],\"Resource\":\"arn:aws:es:region:123456789012:domain/domainname/*\"]").withNodeToNodeEncryptionOptions(new NodeToNodeEncryptionOptions().withEnabled(true)); // Make the request. System.out.println("Sending domain creation request..."); CreateElasticsearchDomainResult createresponse = client.createelasticsearchdomain(createrequest); System.out.println("Domain creation response from Amazon Elasticsearch Service:"); System.out.println(createResponse.getDomainStatus().toString()); 178
Java /** * Updates the configuration of an Amazon Elasticsearch Service domain with the * specified options. Some options require other AWS resources, such as an * Amazon Cognito user pool and identity pool, whereas others require just an * instance type or instance count. * * @param client * The AWSElasticsearch client to use for the requests to Amazon * Elasticsearch Service * @param domainname * The name of the domain to update */ private static void updatedomain(final AWSElasticsearch client, final String domainname) try // Updates the domain to use three data instances instead of five. // You can uncomment the Cognito lines and fill in the strings to enable Cognito // authentication for Kibana. final UpdateElasticsearchDomainConfigRequest updaterequest = new UpdateElasticsearchDomainConfigRequest().withDomainName(domainName) //.withcognitooptions(new CognitoOptions() //.withenabled(true) //.withuserpoolid("user-pool-id") //.withidentitypoolid("identity-pool-id") //.withrolearn("role-arn")).withelasticsearchclusterconfig(new ElasticsearchClusterConfig().withInstanceCount(3)); System.out.println("Sending domain update request..."); final UpdateElasticsearchDomainConfigResult updateresponse = client.updateelasticsearchdomainconfig(updaterequest); System.out.println("Domain update response from Amazon Elasticsearch Service:"); System.out.println(updateResponse.toString()); catch (ResourceNotFoundException e) System.out.println("Domain not found. Please check the domain name."); /** * Deletes an Amazon Elasticsearch Service domain. Deleting a domain can take * several minutes. * * @param client * The AWSElasticsearch client to use for the requests to Amazon * Elasticsearch Service * @param domainname * The name of the domain that you want to delete */ private static void deletedomain(final AWSElasticsearch client, final String domainname) try final DeleteElasticsearchDomainRequest deleterequest = new DeleteElasticsearchDomainRequest().withDomainName(domainName); System.out.println("Sending domain deletion request..."); final DeleteElasticsearchDomainResult deleteresponse = client.deleteelasticsearchdomain(deleterequest); System.out.println("Domain deletion response from Amazon Elasticsearch Service:"); System.out.println(deleteResponse.toString()); catch (ResourceNotFoundException e) 179
Java System.out.println("Domain not found. Please check the domain name."); /** * Waits for the domain to finish processing changes. New domains typically take * 10-15 minutes to initialize. Most updates to existing domains take a similar * amount of time. This method checks every 15 seconds and finishes only when * the domain's processing status changes to false. * * @param client * The AWSElasticsearch client to use for the requests to Amazon * Elasticsearch Service * @param domainname * The name of the domain that you want to check */ private static void waitfordomainprocessing(final AWSElasticsearch client, final String domainname) // Create a new request to check the domain status. final DescribeElasticsearchDomainRequest describerequest = new DescribeElasticsearchDomainRequest().withDomainName(domainName); // Check whether the domain is processing, which usually takes 10-15 minutes // after creation or a configuration change. // This loop checks every 15 seconds. DescribeElasticsearchDomainResult describeresponse = client.describeelasticsearchdomain(describerequest); while (describeresponse.getdomainstatus().isprocessing()) try System.out.println("Domain still processing..."); TimeUnit.SECONDS.sleep(15); describeresponse = client.describeelasticsearchdomain(describerequest); catch (InterruptedException e) e.printstacktrace(); // Once we exit that loop, the domain is available System.out.println("Amazon Elasticsearch Service has finished processing changes for your domain."); System.out.println("Domain description response from Amazon Elasticsearch Service:"); System.out.println(describeResponse.toString()); 180
작업 Amazon Elasticsearch Service 구성 API 참조 이 참조에서는 Amazon Elasticsearch Service 구성 API에서의 작업, 데이터 형식 및 오류에 대해 설명합니 다. 구성 API는 HTTP를 통해 Amazon ES 도메인을 만들고 구성하는 데 사용할 수 있는 REST API입니다. 또 한 AWS CLI 및 콘솔을 사용하여 Amazon ES 도메인을 구성할 수도 있습니다. 자세한 내용은 Amazon ES 도 메인 생성 및 구성 (p. 10) 단원을 참조하십시오. 작업 (p. 181) 데이터 형식 (p. 227) 오류 (p. 239) 작업 다음 표에는 Amazon Elasticsearch Service 구성 API에 대한 REST 인터페이스의 각 작업에 필요한 HTTP 메서드에 대한 빠른 참조가 나와 있습니다. 각 작업에 대한 설명에는 필요한 HTTP 메서드도 포함되어 있습 니다. Note 모든 구성 서비스 요청에는 서명이 되어 있어야 합니다. 자세한 내용은 이 설명서의 Amazon Elasticsearch 서비스 요청 서명 (p. 52) 및 AWS General Reference의 서명 버전 4 서명 프로세스 단원을 참조하십시오. 작업 HTTP 메서드 AddTags (p. 182) POST CreateElasticsearchDomain (p. 183) POST DeleteElasticsearchDomain (p. 188) DELETE DeleteElasticsearchServiceRole (p. 190) DELETE DescribeElasticsearchDomain (p. 191) GET DescribeElasticsearchDomainConfig (p. 193) GET DescribeElasticsearchDomains (p. 196) POST DescribeElasticsearchInstanceTypeLimits (p. GET198) DescribeReservedElasticsearchInstanceOfferings GET (p. 201) DescribeReservedElasticsearchInstances (p. GET 203) GetCompatibleElasticsearchVersions (p. 204)GET GetUpgradeHistory (p. 206) GET GetUpgradeStatus (p. 208) GET ListDomainNames (p. 209) GET ListElasticsearchInstanceTypeDetails (p. 210) GET 181
AddTags 작업 HTTP 메서드 ListElasticsearchInstanceTypes (p. 212) GET ListElasticsearchVersions (p. 214) GET ListTags (p. 215) GET PurchaseReservedElasticsearchInstance (p. POST 216) RemoveTags (p. 218) POST StartElasticsearchServiceSoftwareUpdate (p. POST 219) StopElasticsearchServiceSoftwareUpdate (p. POST 220) UpdateElasticsearchDomainConfig (p. 221) POST UpgradeElasticsearchDomain (p. 225) POST AddTags Amazon ES 도메인에 리소스 태그를 연결합니다. 자세한 내용은 Amazon ES 도메인 태깅 (p. 41)을 참조하 십시오. 구문 POST /2015-01-01/tags "ARN": "<DOMAIN_ARN>", "TagList": [ "Key": "<TAG_KEY>", "Value": "<TAG_VALUE>" ] 요청 파라미터 이 작업은 요청 파라미터를 사용하지 않습니다. 요청 본문 파라미터 데이터 형식 필수? 설명 TagList TagList (p. 238) 예 리소스 태그 목록 ARN ARN (p. 228) 예 리소스 태그를 연결하려 는 Amazon ES 도메인의 ARN(Amazon 리소스 이름)입니 다. 응답 요소 해당 사항 없음. AddTags 작업이 데이터 구조를 반환하지 않습니다. 182
CreateElasticsearchDomain 오류 AddTags 작업은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) LimitExceededException (p. ValidationException (p. InternalException (p. ) ) ) 예 다음 예에서는 태그 키가 project인 리소스 태그 하나를 logs Amazon ES 도메인에 연결합니다. 요청 POST es.<aws_region>.amazonaws.com/2015-01-01/tags "ARN": "<DOMAIN_ARN>", "TagList": [ "Key": "project", "Value": "trident" ] 응답 HTTP/1.1 200 OK x-amzn-requestid: 5a6a5790-536c-11e5-9cd2-b36dbf43d89e Content-Type: application/json Content-Length: 0 Date: Sat, 05 Sep 2015 01:20:55 GMT CreateElasticsearchDomain 새 Amazon ES 도메인을 만듭니다. 자세한 내용은 the section called Amazon ES 도메인 생성 (p. 10) 단원 을 참조하십시오. Note Amazon ES 도메인을 만들려고 하는데 같은 이름의 도메인이 이미 존재하는 경우, API는 오류를 보 고하지 않습니다. 그 대신 기존 도메인에 대한 세부 정보가 표시됩니다. 구문 POST /2015-01-01/es/domain "DomainName": "<DOMAIN_NAME>", "ElasticsearchVersion": "<VERSION>", "ElasticsearchClusterConfig": "InstanceType": "<INSTANCE_TYPE>", "InstanceCount": <INSTANCE_COUNT>, "DedicatedMasterEnabled": "<TRUE FALSE>", "DedicatedMasterCount": <INSTANCE_COUNT>, "DedicatedMasterType": "<INSTANCE_TYPE>", "ZoneAwarenessEnabled": "<TRUE FALSE>", "ZoneAwarenessConfig": 183
CreateElasticsearchDomain "AvailabilityZoneCount": <2 3> "EBSOptions": "EBSEnabled": "<TRUE FALSE>", "VolumeType": "<VOLUME_TYPE>", "VolumeSize": "<VOLUME_SIZE>", "Iops": "<VALUE>" "VPCOptions": "SubnetIds": [ "<SUBNET_ID>" ], "SecurityGroupIds": [ "<SECURITY_GROUP_ID>" ] "CognitoOptions": "IdentityPoolId": "us-west-1:12345678-1234-1234-1234-123456789012", "RoleArn": "arn:aws:iam::123456789012:role/my-kibana-role", "Enabled": true, "UserPoolId": "us-west-1_121234567" "AccessPolicies": "<ACCESS_POLICY_DOCUMENT>", "SnapshotOptions": "AutomatedSnapshotStartHour": <START_HOUR> "LogPublishingOptions": "SEARCH_SLOW_LOGS": "CloudWatchLogsLogGroupArn":"<ARN>", "Enabled":true "INDEX_SLOW_LOGS": "CloudWatchLogsLogGroupArn":"<ARN>", "Enabled":true "EncryptionAtRestOptions": "Enabled": true, "KmsKeyId": "<KEY_ID>" "AdvancedOptions": "rest.action.multi.allow_explicit_index": "<TRUE FALSE>", "indices.fielddata.cache.size": "<PERCENTAGE_OF_HEAP>" "NodeToNodeEncryptionOptions": "Enabled": true false 요청 파라미터 이 작업은 HTTP 요청 파라미터를 사용하지 않습니다. 요청 본문 파라미터 데이터 형식 필수? 설명 DomainName DomainName (p. 229) 예 만들 Amazon ES 도메인의 이름입 니다. 184
CreateElasticsearchDomain 파라미터 데이터 형식 ElasticsearchVersion 문자열 필수? 설명 아니요 Elasticsearch의 버전입니다. 지정 하지 않을 경우 기본값인 1.5를 사 용합니다. 지원되는 버전의 전체 목 록은 the section called 지원되는 Elasticsearch 버전 (p. 2) 단원을 참조하십시오. ElasticsearchClusterConfig ElasticsearchClusterConfig 아니요 (p. 230) Amazon ES 도메인의 클러스터 구 성을 위한 컨테이너입니다. EBSOptions EBSOptions (p. 230) 아니요 Amazon ES 도메인에 EBS 기반 스 토리지를 사용하도록 하는 데 필요 한 매개변수의 컨테이너입니다. 자 세한 내용은 EBS 기반 스토리지 구 성 (p. 16)을 참조하십시오. VPCOptions VPCOptions (p. 239) 아니요 VPC 액세스 도메인을 구성하는 데 필요한 값을 저장하는 컨테이 너입니다. 이러한 값을 지정하지 않을 경우 Amazon ES는 퍼블릭 엔드포인트를 갖는 도메인을 생 성합니다. 자세한 내용은 Amazon Elasticsearch Service 도메인에 대 한 VPC 지원 (p. 126) 단원을 참조 하십시오. CognitoOptions CognitoOptions (p. 228) 아니요 Kibana에 Amazon Cognito 인증을 사용하도록 Amazon ES를 구성할 키-값 페어. AccessPolicies 문자열 아니요 새 Amazon ES 도메인에 대한 액 세스 정책을 지정하는 IAM 정책 문서입니다. 자세한 내용은 the section called 자격 증명 및 액세스 관리 (p. 48) 단원을 참조하십시오. SnapshotOptions SnapshotOptions (p. 237) 아니요 (사용되지 않음) Elasticsearch 5.3 이상을 실행하는 도메인의 경우 Amazon ES는 시간별 자동 스냅샷 을 생성하므로 이 설정이 무의미합 니다. 이전 버전의 Elasticsearch를 실행 하는 도메인의 경우 Amazon ES는 일별 자동 스냅샷을 생성합니다. 이 값은 서비스에서 스냅샷을 생성하 려는 시간에 대한 컨테이너 역할을 수행합니다. 아니요 고급 구성 옵션을 지정하는 키-값 페어입니다. 자세한 내용은 고급 옵 션 구성 (p. 20)을 참조하십시오. LogPublishingOptions LogPublishingOptions (p. 234) 아니요 로그 게시를 느리게 구성하는 키-값 페어입니다. AdvancedOptions AdvancedOptions (p. 227) 185
CreateElasticsearchDomain 파라미터 데이터 형식 필수? EncryptionAtRestOptions EncryptionAtRestOptions (p. 아니요 233) 설명 유휴 시 암호화를 활성화하는 키-값 페어입니다. NodeToNodeEncryptionOptions NodeToNodeEncryptionOptions 아니요 (p. 235)노드 간 암호화를 활성화합니다. 응답 요소 필드 데이터 형식 설명 DomainStatus ElasticsearchDomainStatus (p.새 231) Amazon ES 도메인의 상태 및 구성을 지 정합니다. 오류 CreateElasticsearchDomain은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) DisabledOperationException (p. InternalException (p. ) ) InvalidTypeException (p. ) LimitExceededException (p. ) ResourceAlreadyExistsException (p. ValidationException (p. ) ) 예 이 예제에서는 다음 작업을 설명합니다. streaming-logs라는 Amazon ES 도메인을 만듭니다. 6개의 데이터 노드(i3.large)와 3개의 전용 마스터 노드(c4.large)가 있는 클러스터를 만듭니다. 여러 가용 영역을 사용할 수 있습니다. 도메인의 VPC 액세스를 구성합니다. 유휴 암호화와 노드 간 암호화를 활성화합니다. 요청 POST https://es.us-west-1.amazonaws.com/2015-01-01/es/domain "DomainName": "streaming-logs", "ElasticsearchVersion": "6.3", "ElasticsearchClusterConfig": "InstanceType": "i3.large.elasticsearch", "InstanceCount": 6, "DedicatedMasterEnabled": "true", "DedicatedMasterCount": 3, "DedicatedMasterType": "c4.large.elasticsearch", "ZoneAwarenessEnabled": "true" "EncryptionAtRestOptions": 186
CreateElasticsearchDomain "Enabled": true, "KmsKeyId": "1a2a3a4-1a2a-3a4a-5a6a-1a2a3a4a5a6a" "NodeToNodeEncryptionOptions": "Enabled": true "VPCOptions": "SubnetIds": [ "subnet-87654321", "subnet-12345678" ] 응답 "DomainStatus": "ARN": "arn:aws:es:us-west-1:123456789012:domain/streaming-logs", "AccessPolicies": "", "AdvancedOptions": "rest.action.multi.allow_explicit_index": "true" "CognitoOptions": "Enabled": false, "IdentityPoolId": null, "RoleArn": null, "UserPoolId": null "Created": true, "Deleted": false, "DomainId": "123456789012/streaming-logs", "DomainName": "streaming-logs", "ElasticsearchVersion": "5.5", "ElasticsearchClusterConfig": "InstanceType": "m3.medium.elasticsearch", "InstanceCount": 6, "DedicatedMasterEnabled": "true", "DedicatedMasterCount": 3, "DedicatedMasterType": "m3.medium.elasticsearch", "ZoneAwarenessEnabled": "true", "ZoneAwarenessConfig": "AvailabilityZoneCount": 2 "ElasticsearchClusterConfig": "DedicatedMasterCount": 3, "DedicatedMasterEnabled": true, "DedicatedMasterType": "c4.large.elasticsearch", "InstanceCount": 6, "InstanceType": "i3.large.elasticsearch", "ZoneAwarenessEnabled": true "ElasticsearchVersion": "6.3", "EncryptionAtRestOptions": "Enabled": true, "KmsKeyId": "arn:aws:kms:uswest-1:123456789012:key/1a2a3a4-1a2a-3a4a-5a6a-1a2a3a4a5a6a" "Endpoint": null, "Endpoints": null, "LogPublishingOptions": null, "NodeToNodeEncryptionOptions": "Enabled": true 187
DeleteElasticsearchDomain "Processing": true, "ServiceSoftwareOptions": "AutomatedUpdateDate": 0, "Cancellable": false, "CurrentVersion": "LEGACY", "Description": "There is no software update available for this domain.", "NewVersion": "", "UpdateAvailable": false, "UpdateStatus": "COMPLETED" "SnapshotOptions": "AutomatedSnapshotStartHour": 0 "UpgradeProcessing": false, "VPCOptions": "AvailabilityZones": [ "us-west-1b", "us-west-1c" ], "SecurityGroupIds": [ "sg-12345678" ], "SubnetIds": [ "subnet-12345678", "subnet-87654321" ], "VPCId": "vpc-12345678" DeleteElasticsearchDomain Amazon ES 도메인과 포함된 데이터를 모두 삭제합니다. 삭제되고 나면 도메인은 복구할 수 없습니다. 구문 DELETE /2015-01-01/es/domain/<DOMAIN_NAME> 요청 파라미터 파라미터 데이터 형식 필수? 설명 DomainName DomainName (p. 229) 예 삭제할 Amazon ES 도메인의 이 름입니다. 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 응답 요소 필드 데이터 형식 DomainStatus ElasticsearchDomainStatus (p. 231) 지정된 Amazon ES 도메인의 구성을 지 정합니다. 188 설명
DeleteElasticsearchDomain 오류 DeleteElasticsearchDomain 작업은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) InternalException (p. ) ResourceNotFoundException (p. ValidationException (p. ) ) 예 다음은 weblogs 도메인을 삭제하는 예제입니다. 요청 DELETE es.<aws_region>.amazonaws.com/2015-01-01/es/domain/weblogs 응답 HTTP/1.1 200 OK "DomainStatus": "ARN": "arn:aws:es:us-west-1:123456789012:domain/weblogs", "AccessPolicies": "", "AdvancedOptions": "rest.action.multi.allow_explicit_index": "true" "Created": true, "Deleted": true, "DomainId": "123456789012/weblogs", "DomainName": "weblogs", "EBSOptions": "EBSEnabled": false, "EncryptionEnabled": null, "Iops": null, "VolumeSize": null, "VolumeType": null "ElasticsearchClusterConfig": "DedicatedMasterCount": 3, "DedicatedMasterEnabled": true, "DedicatedMasterType": "m3.medium.elasticsearch", "InstanceCount": 6, "InstanceType": "m3.medium.elasticsearch", "ZoneAwarenessEnabled": true "ElasticsearchVersion": "5.5", "EncryptionAtRestOptions": "Enabled": true, "KmsKeyId": "arn:aws:kms:uswest-1:123456789012:key/1a2a3a4-1a2a-3a4a-5a6a-1a2a3a4a5a6a" "Endpoint": null, "Endpoints": null, "Processing": true, "SnapshotOptions": "AutomatedSnapshotStartHour": 0 "VPCOptions": "AvailabilityZones": [ 189
DeleteElasticsearchServiceRole "us-west-1b", "us-west-1c" ], "SecurityGroupIds": [ "sg-12345678" ], "SubnetIds": [ "subnet-87654321", "subnet-12345678" ], "VPCId": "vpc-12345678" DeleteElasticsearchServiceRole Amazon ES와 Amazon EC2 간 서비스 연결 역할을 삭제합니다. 이 역할은 Amazon ES에게 VPC 엔드포인 트를 VPC에 배치할 권한을 부여합니다. VPC 엔드포인트를 사용하는 도메인이 만들어지거나 올바로 기능하 려면 서비스 연결 역할이 있어야 합니다. Note 이 작업은 서비스 연결 역할을 사용 중인 도메인이 없는 경우에만 성공합니다. 구문 DELETE /2015-01-01/es/role 요청 파라미터 이 작업은 요청 파라미터를 사용하지 않습니다. 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 응답 요소 해당 사항 없음. DeleteElasticsearchServiceRole 작업이 데이터 구조를 반환하지 않습니다. 오류 DeleteElasticsearchServiceRole은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) InternalException (p. ValidationException (p. ) ) 예 다음 예제에서는 서비스 연결 역할을 삭제하는 방법을 설명합니다. 요청 190
DescribeElasticsearchDomain DELETE es.<aws_region>.amazonaws.com/2015-01-01/es/role 응답 이 작업은 성공할 경우 아무 응답도 제공하지 않습니다. DescribeElasticsearchDomain 도메인 ID, 도메인 서비스 엔드포인트 및 도메인 ARN을 비롯하여 지정된 Amazon ES 도메인에 대한 도메인 구성에 대해 설명합니다. 구문 GET /2015-01-01/es/domain/<DOMAIN_NAME> 요청 파라미터 파라미터 데이터 형식 필수? 설명 DomainName DomainName (p. 229) 예 기술할 Amazon ES 도메인의 이름 입니다. 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 응답 요소 필드 데이터 형식 설명 DomainStatus ElasticsearchDomainStatus (p. 231) 지정된 Amazon ES 도메인의 구성입니 다. 오류 DescribeElasticsearchDomain은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) InternalException (p. ) ResourceNotFoundException (p. ValidationException (p. ) ) 예 다음 예에서는 streaming-logs 도메인에 대한 설명을 반환합니다. 요청 191
DescribeElasticsearchDomain GET es.<aws_region>.amazonaws.com/2015-01-01/es/domain/streaming-logs 응답 "DomainStatus": "ARN": "arn:aws:es:us-west-1:123456789012:domain/streaming-logs", "AccessPolicies": "\"Version\":\"2012-10-17\",\"Statement\":[\"Effect\": \"Allow\",\"Principal\":\"AWS\":\"*\"\"Action\":\"es:*\",\"Resource\":\"arn:aws:es:uswest-1:123456789012:domain/streaming-logs/*\",\"Condition\":\"IpAddress\":\"aws:SourceIp \":[\"11.222.333.11\",\"11.222.333.12\",\"11.222.333.13\",\"11.222.333.14\", \"11.222.333.15\"]]", "AdvancedOptions": "rest.action.multi.allow_explicit_index": "true" "Created": true, "Deleted": false, "DomainId": "123456789012/streaming-logs", "DomainName": "streaming-logs", "EBSOptions": "EBSEnabled": true, "EncryptionEnabled": false, "Iops": null, "VolumeSize": 11, "VolumeType": "gp2" "ElasticsearchClusterConfig": "DedicatedMasterCount": 2, "DedicatedMasterEnabled": false, "DedicatedMasterType": "m4.large.elasticsearch", "InstanceCount": 2, "InstanceType": "t2.small.elasticsearch", "ZoneAwarenessEnabled": false "ElasticsearchVersion": "5.5", "EncryptionAtRestOptions": "Enabled": true, "KmsKeyId": "arn:aws:kms:uswest-1:123456789012:key/1a2a3a4-1a2a-3a4a-5a6a-1a2a3a4a5a6a" "CognitoOptions": "IdentityPoolId": "us-west-1:12345678-1234-1234-1234-123456789012", "RoleArn": "arn:aws:iam::123456789012:role/my-kibana-role", "Enabled": true, "UserPoolId": "us-west-1_121234567" "Endpoint": "search-streaming-logs-oojmrbhufr27n44zdri52wukdy.uswest-1.es.amazonaws.com", "Endpoints": null, "Processing": false, "SnapshotOptions": "AutomatedSnapshotStartHour": 8 "ServiceSoftwareOptions": "AutomatedUpdateDate": 1530185603, "Cancellable": false, "CurrentVersion": "LEGACY", "Description": "A new software release R1234567 is available. This release will be automatically deployed if no action is taken.", "NewVersion": "R1234567", "UpdateAvailable": true, "UpdateStatus": "ELIGIBLE" "VPCOptions": null 192
DescribeElasticsearchDomainConfig DescribeElasticsearchDomainConfig Amazon ES 도메인의 구성을 표시합니다. 구문 GET /2015-01-01/es/domain/<DOMAIN_NAME>/config 요청 파라미터 파라미터 데이터 형식 필수? 설명 DomainName DomainName (p. 229) 예 Amazon ES 도메인의 이름입니 다. 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 응답 요소 필드 데이터 형식 설명 DomainConfig ElasticsearchDomainConfig Amazon (p. 231) ES 도메인의 구성입니다. 오류 DescribeElasticsearchDomainConfig 작업은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. InternalException (p. ) ) ResourceNotFoundException (p. ) 예 다음 예에서는 logs 도메인의 구성에 대한 설명을 반환합니다. 요청 GET es.<aws_region>.amazonaws.com/2015-01-01/es/domain/logs/config 응답 HTTP/1.1 200 OK 193
DescribeElasticsearchDomainConfig "DomainConfig": "AccessPolicies": "Options": "\"Version\":\"2012-10-17\",\"Statement\":[\"Effect\":\"Allow\", \"Principal\":\"AWS\":\"arn:aws:iam::123456789012:root\"\"Action\":\"es:*\",\"Resource \":\"arn:aws:es:us-west-1:123456789012:domain/logs/*\"]", "Status": "CreationDate": 1499817484.04, "PendingDeletion": false, "State": "Active", "UpdateDate": 1500308955.652, "UpdateVersion": 17 "AdvancedOptions": "Options": "indices.fielddata.cache.size": "", "rest.action.multi.allow_explicit_index": "true" "Status": "CreationDate": 1499817484.04, "PendingDeletion": false, "State": "Active", "UpdateDate": 1499818054.108, "UpdateVersion": 5 "EBSOptions": "Options": "EBSEnabled": true, "EncryptionEnabled": false, "Iops": 0, "VolumeSize": 10, "VolumeType": "gp2" "Status": "CreationDate": 1499817484.04, "PendingDeletion": false, "State": "Active", "UpdateDate": 1499818054.108, "UpdateVersion": 5 "ElasticsearchClusterConfig": "Options": "DedicatedMasterCount": 2, "DedicatedMasterEnabled": false, "DedicatedMasterType": "m4.large.elasticsearch", "InstanceCount": 2, "InstanceType": "m4.large.elasticsearch", "ZoneAwarenessEnabled": false "Status": "CreationDate": 1499817484.04, "PendingDeletion": false, "State": "Active", "UpdateDate": 1499966854.612, "UpdateVersion": 13 "ElasticsearchVersion": "Options": "5.5", "Status": "PendingDeletion": false, "State": "Active", "CreationDate": 1436913638.995, "UpdateVersion": 6, 194
DescribeElasticsearchDomainConfig "UpdateDate": 1436914324.278 "Options": "\"Version\":\"2012-10-17\",\"Statement\":[\"Sid\":\"\", \"Effect\":\"Allow\",\"Principal\":\"AWS\":\"*\"\"Action\":\"es:*\",\"Resource\": \"arn:aws:es:us-east-1:123456789012:domain/logs/*\"]" "EncryptionAtRestOptions": "Options": "Enabled": true, "KmsKeyId": "arn:aws:kms:uswest-1:123456789012:key/1a2a3a4-1a2a-3a4a-5a6a-1a2a3a4a5a6a" "Status": "CreationDate": 1509490412.757, "PendingDeletion": false, "State": "Active", "UpdateDate": 1509490953.717, "UpdateVersion": 6 "LogPublishingOptions": "Status": "CreationDate":1502774634.546, "PendingDeletion":false, "State":"Processing", "UpdateDate":1502779590.448, "UpdateVersion":60 "Options": "INDEX_SLOW_LOGS": "CloudWatchLogsLogGroupArn":"arn:aws:logs:us-east-1:123456789012:loggroup:sample-domain", "Enabled":true "SEARCH_SLOW_LOGS": "CloudWatchLogsLogGroupArn":"arn:aws:logs:us-east-1:123456789012:loggroup:sample-domain", "Enabled":true "SnapshotOptions": "Options": "AutomatedSnapshotStartHour": 6 "Status": "CreationDate": 1499817484.04, "PendingDeletion": false, "State": "Active", "UpdateDate": 1499818054.108, "UpdateVersion": 5 "VPCOptions": "Options": "AvailabilityZones": [ "us-west-1b" ], "SecurityGroupIds": [ "sg-12345678" ], "SubnetIds": [ "subnet-12345678" ], "VPCId": "vpc-12345678" 195
DescribeElasticsearchDomains "Status": "CreationDate": 1499817484.04, "PendingDeletion": false, "State": "Active", "UpdateDate": 1499818054.108, "UpdateVersion": 5 DescribeElasticsearchDomains 지정된 최대 5개 Amazon ES 도메인에 대한 도메인 구성을 기술합니다. 정보에는 도메인 ID, 도메인 서비스 엔드포인트 및 도메인 ARN이 포함됩니다. 구문 POST /2015-01-01/es/domain-info "DomainNames": [ "<DOMAIN_NAME>", "<DOMAIN_NAME>", ] 요청 파라미터 이 작업은 HTTP 요청 파라미터를 사용하지 않습니다. 요청 본문 필드 데이터 형식 필수? DomainNames DomainNameList (p. 예 230) 설명 Amazon ES 도메인의 배열 형식은 다음과 같습 니다. "DomainNames": ["<Domain_Name>","<Domain_Name>"...] 응답 요소 필드 데이터 형식 설명 DomainStatusList ElasticsearchDomainStatusList 요청된 (p. 각 Amazon 233) ES 도메인의 상태가 포 함된 목록입니다. 오류 DescribeElasticsearchDomains 작업은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) 196
DescribeElasticsearchDomains InternalException (p. ValidationException (p. ) ) 예 다음 예에서는 logs 및 streaming-logs 도메인에 대한 설명을 반환합니다. 요청 POST es.<aws_region>.amazonaws.com/2015-01-01/es/domain-info/ "DomainNames": [ "logs", "streaming-logs" ] 응답 HTTP/1.1 200 OK "DomainStatusList": [ "ElasticsearchClusterConfig": "DedicatedMasterEnabled": true, "InstanceCount": 3, "ZoneAwarenessEnabled": false, "DedicatedMasterType": "m3.medium.elasticsearch", "InstanceType": "m3.medium.elasticsearch", "DedicatedMasterCount": 3 "ElasticsearchVersion": "5.5", "EncryptionAtRestOptions": "Enabled": true, "KmsKeyId": "arn:aws:kms:uswest-1:123456789012:key/1a2a3a4-1a2a-3a4a-5a6a-1a2a3a4a5a6a" "Endpoint": "search-streaming-logs-okga24ftzsbz2a2hzhsqw73jpy.useast-1.es.example.com", "Created": true, "Deleted": false, "DomainName": "streaming-logs", "EBSOptions": "EBSEnabled": false "VPCOptions": "SubnetIds": [ "subnet-d1234567" ], "VPCId": "vpc-12345678", "SecurityGroupIds": [ "sg-123456789" ], "AvailabilityZones": [ "us-east-1" ] "SnapshotOptions": "AutomatedSnapshotStartHour": 0 "DomainId": "123456789012/streaming-logs", "AccessPolicies": "", 197
DescribeElasticsearchInstanceTypeLimits "Processing": false, "AdvancedOptions": "rest.action.multi.allow_explicit_index": "true", "indices.fielddata.cache.size": "" "ARN": "arn:aws:es:us-east-1:123456789012:domain/streaming-logs" "ElasticsearchClusterConfig": "DedicatedMasterEnabled": true, "InstanceCount": 1, "ZoneAwarenessEnabled": false, "DedicatedMasterType": "search.m3.medium", "InstanceType": "search.m3.xlarge", "DedicatedMasterCount": 3 "ElasticsearchVersion": "5.5", "EncryptionAtRestOptions": "Enabled": true, "KmsKeyId": "arn:aws:kms:uswest-1:123456789012:key/1a2a3a4-1a2a-3a4a-5a6a-1a2a3a4a5a6a" "Endpoint": "search-logs-p5st2kbt77diuihoqi6omd7jiu.us-east-1.es.example.com", "Created": true, "Deleted": false, "DomainName": "logs", "EBSOptions": "Iops": 4000, "VolumeSize": 512, "VolumeType": "io1", "EBSEnabled": true "VPCOptions": "SubnetIds": [ "subnet-d1234567" ], "VPCId": "vpc-12345678", "SecurityGroupIds": [ "sg-123456789" ], "AvailabilityZones": [ "us-east-1" ] "SnapshotOptions": "AutomatedSnapshotStartHour": 0 "DomainId": "123456789012/logs", "AccessPolicies": "\"Version\":\"2012-10-17\",\"Statement\":[\"Sid\":\"\", \"Effect\":\"Allow\",\"Principal\":\"AWS\":\"*\"\"Action\":\"es:*\",\"Resource\": \"arn:aws:es:us-east-1:123456789012:domain/logs/*\"]", "Processing": false, "AdvancedOptions": "rest.action.multi.allow_explicit_index": "true" "ARN": "arn:aws:es:us-east-1:123456789012:domain/logs" ] DescribeElasticsearchInstanceTypeLimits 지정된 Elasticsearch 버전 및 인스턴스 유형에 대한 인스턴스 개수, 스토리지 및 마스터 노드 한도를 설명합 니다. 198
DescribeElasticsearchInstanceTypeLimits 구문 GET 2015-01-01/es/instanceTypeLimits/ElasticsearchVersion/InstanceType? domainname=domainname 요청 파라미터 파라미터 데이터 형식 필수? 설명 ElasticsearchVersion String 예 Elasticsearch 버전입니다. 지원되는 버전 목록은 the section called 지원되는 Elasticsearch 버전 (p. 2) 단원 을 참조하십시오. InstanceType String 예 인스턴스 유형. 리전별로 인스 턴스 유형을 보려면 Amazon Elasticsearch Service 요금 단 원을 참조하십시오. DomainName DomainName (p. 229) 아니요 기존 도메인의 이름입니다. 기 존 도메인에 대한 한도가 필요 할 경우에만 지정합니다. 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 응답 요소 필드 데이터 형식 설명 LimitsByRole Map 적용 가능한 모든 인스턴스 한도를 포함한 맵입니다. "data"는 데이터 노드를 의미 합니다. "master"는 전용 마스터 노드를 의미합니다. 오류 DescribeElasticsearchInstanceTypeLimits 작업은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) InternalException (p. ) InvalidTypeException (p. ) LimitExceededException (p. ) ResourceNotFoundException (p. ValidationException (p. ) ) 199
DescribeElasticsearchInstanceTypeLimits 예 다음 예에서는 logs 및 streaming-logs 도메인에 대한 설명을 반환합니다. 요청 GET es.<aws_region>.amazonaws.com/2015-01-01/es/instancetypelimits/6.0/ m4.large.elasticsearch 응답 HTTP/1.1 200 OK "LimitsByRole": "data": "AdditionalLimits": [ "LimitName": "MaximumNumberOfDataNodesWithoutMasterNode", "LimitValues": [ "10" ] ], "InstanceLimits": "InstanceCountLimits": "MaximumInstanceCount": 20, "MinimumInstanceCount": 1 "StorageTypes": [ "StorageSubTypeName": "standard", "StorageTypeLimits": [ "LimitName": "MaximumVolumeSize", "LimitValues": [ "100" ] "LimitName": "MinimumVolumeSize", "LimitValues": [ "10" ] ], "StorageTypeName": "ebs" "StorageSubTypeName": "io1", "StorageTypeLimits": [ "LimitName": "MaximumVolumeSize", "LimitValues": [ "512" ] "LimitName": "MinimumVolumeSize", "LimitValues": [ "35" ] 200
DescribeReservedElasticsearchInstanceOfferings ] "LimitName": "MaximumIops", "LimitValues": [ "16000" ] "LimitName": "MinimumIops", "LimitValues": [ "1000" ] ], "StorageTypeName": "ebs" "StorageSubTypeName": "gp2", "StorageTypeLimits": [ "LimitName": "MaximumVolumeSize", "LimitValues": [ "512" ] "LimitName": "MinimumVolumeSize", "LimitValues": [ "10" ] ], "StorageTypeName": "ebs" "master": "AdditionalLimits": [ "LimitName": "MaximumNumberOfDataNodesSupported", "LimitValues": [ "100" ] ], "InstanceLimits": "InstanceCountLimits": "MaximumInstanceCount": 5, "MinimumInstanceCount": 2 "StorageTypes": null DescribeReservedElasticsearchInstanceOfferings 주어진 리전에서 사용 가능한 예약 인스턴스 상품을 설명합니다. 구문 GET /2015-01-01/es/reservedInstanceOfferings? offeringid=offeringid&maxresults=maxresults&nexttoken=nexttoken 201
DescribeReservedElasticsearchInstanceOfferings 요청 파라미터 파라미터 데이터 형식 필수? 설명 OfferingId String 아니요 상품 ID입니다. MaxResults Integer 아니요 결과 수를 제한합니다. 30~100 범위여야 합니다. NextToken String 아니요 페이지 매김에 사용됩니다. 이 전 API 호출이 NextToken을 포 함한 결과를 생성한 경우에만 필요합니다. next-token 입력을 받아 다음 페이지의 결과를 반 환하고 응답에 next-token 출력 을 제공하여 클라이언트가 더 많은 결과를 가져오는 데 사용 할 수 있습니다. 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 응답 요소 필드 데이터 형식 설명 ReservedElasticsearchInstanceOfferings ReservedElasticsearchInstanceOfferings 예약 인스턴스 상품에 대한 모든 정보를 담은 컨테이너입니다. 자세한 내용은 the section called 예약 인스턴스 구입(AWS CLI) (p. 247) 단원을 참조하십시오. 오류 DescribeReservedElasticsearchInstanceOfferings 작업은 다음 오류 중 하나를 반환할 수 있습 니다. DisabledOperationException (p. InternalException (p. ) ResourceNotFoundException (p. ValidationException (p. ) ) ) 예 요청 GET es.<aws_region>.amazonaws.com/2015-01-01/es/reservedinstanceofferings 응답 202
DescribeReservedElasticsearchInstances "ReservedElasticsearchInstanceOfferings": [ "FixedPrice": 100.0, "ReservedElasticsearchInstanceOfferingId": "1a2a3a4a5-1a2a-3a4a-5a6a-1a2a3a4a5a6a", "RecurringCharges": [ "RecurringChargeAmount": 0.603, "RecurringChargeFrequency": "Hourly" ], "UsagePrice": 0.0, "PaymentOption": "PARTIAL_UPFRONT", "Duration": 31536000, "ElasticsearchInstanceType": "m4.2xlarge.elasticsearch", "CurrencyCode": "USD" ] DescribeReservedElasticsearchInstances 주어진 리전에서 예약한 인스턴스를 설명합니다. 구문 GET 2015-01-01/es/reservedInstances? reservationid=reservationid&maxresults=pagesize&nexttoken=nexttoken 요청 파라미터 파라미터 데이터 형식 필수? 설명 ReservationId String 아니요 예약 구매 후 할당된 예약 ID입 니다. MaxResults Integer 아니요 결과 수를 제한합니다. 30~100 범위여야 합니다. NextToken String 아니요 페이지 매김에 사용됩니다. 이 전 API 호출이 NextToken을 포 함한 결과를 생성한 경우에만 필요합니다. next-token 입력을 받아 다음 페이지의 결과를 반 환하고 응답에 next-token 출력 을 제공하여 클라이언트가 더 많은 결과를 가져오는 데 사용 할 수 있습니다. 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 203
GetCompatibleElasticsearchVersions 응답 요소 필드 데이터 형식 설명 ReservedElasticsearchInstances ReservedElasticsearchInstances 예약한 인스턴스에 대한 모든 정보를 담 은 컨테이너입니다. 자세한 내용은 the section called 예약 인스턴스 구입(AWS CLI) (p. 247) 단원을 참조하십시오. 오류 DescribeReservedElasticsearchInstances 작업은 다음 오류 중 하나를 반환할 수 있습니다. DisabledOperationException (p. InternalException (p. ) ) ResourceNotFoundException (p. ValidationException (p. ) ) 예 요청 GET es.<aws_region>.amazonaws.com/2015-01-01/es/reservedinstances 응답 "ReservedElasticsearchInstances": [ "FixedPrice": 100.0, "ReservedElasticsearchInstanceOfferingId": "1a2a3a4a5-1a2a-3a4a-5a6a-1a2a3a4a5a6a", "ReservationName": "my-reservation", "PaymentOption": "PARTIAL_UPFRONT", "UsagePrice": 0.0, "ReservedElasticsearchInstanceId": "9a8a7a6a-5a4a-3a2a-1a0a-9a8a7a6a5a4a", "RecurringCharges": [ "RecurringChargeAmount": 0.603, "RecurringChargeFrequency": "Hourly" ], "State": "payment-pending", "StartTime": 1522872571.229, "ElasticsearchInstanceCount": 3, "Duration": 31536000, "ElasticsearchInstanceType": "m4.2xlarge.elasticsearch", "CurrencyCode": "USD" ] GetCompatibleElasticsearchVersions Elasticsearch 버전 및 업그레이드 가능한 버전의 맵을 반환합니다. 204
GetCompatibleElasticsearchVersions 구문 GET /2015-01-01/es/compatibleVersions?domainName=DomainName 요청 파라미터 파라미터 데이터 형식 필수? 설명 DomainName DomainName (p. 229) 아니요 기존 도메인의 이름입니다. 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 응답 요소 필드 데이터 형식 설명 ElasticsearchVersions Map Elasticsearch 버전 및 업그레이드 가능한 버전의 맵입니다. 오류 GetCompatibleElasticsearchVersions 작업은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) ResourceNotFoundException (p. DisabledOperationException (p. ValidationException (p. InternalException (p. ) ) ) ) 예 다음 예에서는 현재 사용자가 소유한 도메인 3개를 모두 나열합니다. 요청 GET es.<aws_region>.amazonaws.com/2015-01-01/es/compatibleversions 응답 "CompatibleElasticsearchVersions": [ "SourceVersion": "6.0", "TargetVersions": [ "6.3" ] 205
GetUpgradeHistory ] "SourceVersion": "5.1", "TargetVersions": [ "5.6" ] "SourceVersion": "6.2", "TargetVersions": [ "6.3" ] "SourceVersion": "5.3", "TargetVersions": [ "5.6" ] "SourceVersion": "5.5", "TargetVersions": [ "5.6" ] "SourceVersion": "5.6", "TargetVersions": [ "6.3" ] GetUpgradeHistory 최근 10회의 도메인 업그레이드 작업의 목록을 반환합니다. 구문 GET /2015-01-01/es/upgradeDomain/DomainName/history? maxresults=maxresults&nexttoken=nexttoken 요청 파라미터 파라미터 데이터 형식 필수? 설명 MaxResults Integer 아니요 결과 수를 제한합니다. 30~100 범위여야 합니다. NextToken String 아니요 페이지 매김에 사용됩니다. 이 전 API 호출이 NextToken을 포 함한 결과를 생성한 경우에만 필요합니다. next-token 입력을 받아 다음 페이지의 결과를 반 환하고 응답에 next-token 출력 을 제공하여 클라이언트가 더 많은 결과를 가져오는 데 사용 할 수 있습니다. 206
GetUpgradeHistory 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 응답 요소 필드 데이터 형식 설명 UpgradeHistoryList UpgradeHistoryList 직전 10회의 업그레이드 작업의 결과 로그를 위한 컨테이너입니 다. 오류 GetCompatibleElasticsearchVersions 작업은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) ResourceNotFoundException (p. DisabledOperationException (p. ValidationException (p. InternalException (p. ) ) ) ) 예 다음 예에서는 지정된 도메인에 대한 업그레이드 기록을 나열합니다. 요청 GET es.<aws_region>.amazonaws.com/2015-01-01/es/upgradedomain/my-domain/history 응답 "NextToken": null, "UpgradeHistories": [ "StartTimestamp": 1532466876, "StepsList": [ "Issues": [ "Upgrade automated snapshot 00010e1cbc.2018-07-24t21-14-40 in state FAILED could not be completed successfully" ], "ProgressPercent": null, "UpgradeStep": "SNAPSHOT", "UpgradeStepStatus": "FAILED" "Issues": null, "ProgressPercent": null, "UpgradeStep": "PRE_UPGRADE_CHECK", "UpgradeStepStatus": "SUCCEEDED" 207
GetUpgradeStatus ], "UpgradeName": "Upgrade from 5.6 to 6.3", "UpgradeStatus": "FAILED" "StartTimestamp": 1532388708, "StepsList": [ "Issues": null, "ProgressPercent": null, "UpgradeStep": "PRE_UPGRADE_CHECK", "UpgradeStepStatus": "SUCCEEDED" ], "UpgradeName": "Pre-Upgrade Check from 5.6 to 6.3", "UpgradeStatus": "SUCCEEDED" ] "StartTimestamp": 1532378327, "StepsList": [ "Issues": null, "ProgressPercent": null, "UpgradeStep": "UPGRADE", "UpgradeStepStatus": "SUCCEEDED" "Issues": null, "ProgressPercent": null, "UpgradeStep": "SNAPSHOT", "UpgradeStepStatus": "SUCCEEDED" "Issues": null, "ProgressPercent": null, "UpgradeStep": "PRE_UPGRADE_CHECK", "UpgradeStepStatus": "SUCCEEDED" ], "UpgradeName": "Upgrade from 5.3 to 5.6", "UpgradeStatus": "SUCCEEDED" GetUpgradeStatus 도메인의 Elasticsearch 버전 업그레이드의 최신 상태를 반환합니다. 구문 GET /2015-01-01/es/upgradeDomain/DomainName/status 요청 파라미터 파라미터 데이터 형식 필수? 설명 DomainName DomainName (p. 229) 예 기존 도메인의 이름입니다. 208
ListDomainNames 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 응답 요소 필드 데이터 형식 설명 UpgradeStepItem UpgradeStepItem 도메인의 버전 업그레이드의 최신 상태를 위한 컨테이너입니다. 오류 GetCompatibleElasticsearchVersions 작업은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) ResourceNotFoundException (p. DisabledOperationException (p. ValidationException (p. InternalException (p. ) ) ) ) 예 다음 예에서는 지정된 도메인의 업그레이드 기록을 나열합니다. 요청 GET es.<aws_region>.amazonaws.com/2015-01-01/es/upgradedomain/my-domain/status 응답 "StepStatus": "FAILED", "UpgradeName": "Upgrade from 5.6 to 6.3", "UpgradeStep": "SNAPSHOT" ListDomainNames 활성 리전의 현재 사용자가 소유한 모든 Amazon ES 도메인의 이름을 표시합니다. 구문 GET /2015-01-01/domain 요청 파라미터 이 작업은 요청 파라미터를 사용하지 않습니다. 209
ListElasticsearchInstanceTypeDetails 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 응답 요소 필드 데이터 형식 설명 DomainNameList DomainNameList (p. 230) 현재 사용자가 소유한 모든 Amazon ES 도메인의 이름입니 다. 오류 ListDomainNames 작업은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ValidationException (p. ) ) 예 다음 예에서는 현재 사용자가 소유한 도메인 3개를 모두 나열합니다. 요청 GET es.<aws_region>.amazonaws.com/2015-01-01/domain 응답 "DomainNames": [ "DomainName": "logs" "DomainName": "streaming-logs" ] ListElasticsearchInstanceTypeDetails 지정된 Elasticsearch 버전에서 지원되는 모든 Elasticsearch 인스턴스 유형과 본 인스턴스 유형이 지원하는 기능을 나열합니다. 구문 GET 2015-01-01/es/instanceTypeDetails/ElasticsearchVersion? domainname=domainname&maxresults=maxresults&nexttoken=nexttoken 210
ListElasticsearchInstanceTypeDetails 요청 파라미터 파라미터 데이터 형식 필수? 설명 ElasticsearchVersion String 예 Elasticsearch 버전입니다. DomainName String 아니요 Amazon ES 도메인 이름입니다. MaxResults Integer 아니요 결과 수를 제한합니다. 30~100 범 위여야 합니다. NextToken String 아니요 페이지 매김에 사용됩니다. 이전 API 호출이 NextToken을 포함한 결 과를 생성한 경우에만 필요합니다. next-token 입력을 받아 다음 페이 지의 결과를 반환하고 응답에 nexttoken 출력을 제공하여 클라이언트 가 더 많은 결과를 가져오는 데 사 용할 수 있습니다. 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 응답 요소 필드 데이터 형식 설명 ElasticsearchInstanceTypes List 지정된 Elasticsearch 버전에서 지원되는 모 든 인스턴스 유형 목록과 본 인스턴스 유형이 지원하는 기능 NextToken 페이지 매김에 사용됩니다. 이전 API 호출이 NextToken을 포함한 결과를 생성한 경우에 만 필요합니다. next-token 입력을 받아 다음 페이지의 결과를 반환하고 응답에 next-token 출력을 제공하여 클라이언트가 더 많은 결과 를 가져오는 데 사용할 수 있습니다. String 오류 ListElasticsearchInstanceTypeDetails은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) InternalException (p. ) ResourceNotFoundException (p. ValidationException (p. ) ) 예 요청 211
ListElasticsearchInstanceTypes (지원 중단) GET es.us-west-1.amazonaws.com/2015-01-01/es/instancetypedetails/6.2 응답 "ElasticsearchInstanceTypeDetails": [ "AppLogsEnabled": true, "CognitoEnabled": true, "EncryptionEnabled": false, "InstanceType": "t2.small.elasticsearch" "AppLogsEnabled": true, "CognitoEnabled": true, "EncryptionEnabled": false, "InstanceType": "t2.medium.elasticsearch" "AppLogsEnabled": true, "CognitoEnabled": true, "EncryptionEnabled": true, "InstanceType": "c4.large.elasticsearch" "AppLogsEnabled": true, "CognitoEnabled": true, "EncryptionEnabled": true, "InstanceType": "c4.xlarge.elasticsearch"... ], "NextToken": null ListElasticsearchInstanceTypes (지원 중단) 지정된 Elasticsearch 버전에서 지원되는 모든 Elasticsearch 인스턴스 유형을 나열합니다. 이 작업은 사용 중 단되었습니다. 대신 ListElasticsearchInstanceTypeDetails (p. 210)를 사용하십시오. 구문 GET 2015-01-01/es/instanceTypes/ElasticsearchVersion? domainname=domainname&maxresults=maxresults&nexttoken=nexttoken 요청 파라미터 파라미터 데이터 형식 필수? 설명 ElasticsearchVersion String 예 Elasticsearch 버전입니다. DomainName String 아니요 Amazon ES 도메인 이름입니다. MaxResults Integer 아니요 결과 수를 제한합니다. 30~100 범 위여야 합니다. NextToken String 아니요 페이지 매김에 사용됩니다. 이전 API 호출이 NextToken을 포함한 결 212
ListElasticsearchInstanceTypes (지원 중단) 파라미터 데이터 형식 필수? 설명 과를 생성한 경우에만 필요합니다. next-token 입력을 받아 다음 페이 지의 결과를 반환하고 응답에 nexttoken 출력을 제공하여 클라이언트 가 더 많은 결과를 가져오는 데 사 용할 수 있습니다. 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 응답 요소 필드 데이터 형식 설명 ElasticsearchInstanceTypes List 지정된 Elasticsearch 버전을 지원하는 인스 턴스 유형 목록입니다. NextToken 페이지 매김에 사용됩니다. 이전 API 호출이 NextToken을 포함한 결과를 생성한 경우에 만 필요합니다. next-token 입력을 받아 다음 페이지의 결과를 반환하고 응답에 next-token 출력을 제공하여 클라이언트가 더 많은 결과 를 가져오는 데 사용할 수 있습니다. String 오류 ListElasticsearchInstanceTypes은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) InternalException (p. ) ResourceNotFoundException (p. ValidationException (p. ) ) 예 요청 GET es.<aws_region>.amazonaws.com/2015-01-01/es/instancetypes/6.0 응답 "ElasticsearchInstanceTypes": [ "t2.small.elasticsearch", "t2.medium.elasticsearch", "r4.large.elasticsearch", "r4.xlarge.elasticsearch", 213
ListElasticsearchVersions "r4.2xlarge.elasticsearch", "r4.4xlarge.elasticsearch", "r4.8xlarge.elasticsearch", "r4.16xlarge.elasticsearch", "m4.large.elasticsearch", "m4.xlarge.elasticsearch", "m4.2xlarge.elasticsearch", "m4.4xlarge.elasticsearch", "m4.10xlarge.elasticsearch", "c4.large.elasticsearch", "c4.xlarge.elasticsearch", "c4.2xlarge.elasticsearch", "c4.4xlarge.elasticsearch", "c4.8xlarge.elasticsearch" ], "NextToken": null ListElasticsearchVersions Amazon ES에서 지원되는 모든 Elasticsearch 버전을 나열합니다. 구문 GET 2015-01-01/es/versions?maxResults=MaxResults&nextToken=NextToken 요청 파라미터 파라미터 데이터 형식 필수? 설명 MaxResults Integer 아니요 결과 수를 제한합니다. 30~100 범 위여야 합니다. NextToken String 아니요 페이지 매김에 사용됩니다. 이전 API 호출이 NextToken을 포함한 결 과를 생성한 경우에만 필요합니다. next-token 입력을 받아 다음 페이 지의 결과를 반환하고 응답에 nexttoken 출력을 제공하여 클라이언트 가 더 많은 결과를 가져오는 데 사 용할 수 있습니다. 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 응답 요소 필드 데이터 형식 설명 지원되는 모든 Elasticsearch 버전을 나열합 니다. ElasticsearchVersions List 214
ListTags 필드 데이터 형식 설명 NextToken String 페이지 매김에 사용됩니다. 이전 API 호출이 NextToken을 포함한 결과를 생성한 경우에 만 필요합니다. next-token 입력을 받아 다음 페이지의 결과를 반환하고 응답에 next-token 출력을 제공하여 클라이언트가 더 많은 결과 를 가져오는 데 사용할 수 있습니다. 오류 ListElasticsearchVersions은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) InternalException (p. ) ResourceNotFoundException (p. ValidationException (p. ) ) 예 요청 GET es.<aws_region>.amazonaws.com/2015-01-01/es/versions 응답 "ElasticsearchVersions": [ "6.0", "5.5", "5.3", "5.1", "2.3", "1.5" ], "NextToken": null ListTags Amazon ES 도메인의 리소스 태그를 모두 표시합니다. 구문 GET /2015-01-01/tags?arn=<DOMAIN_ARN> 요청 파라미터 파라미터 데이터 형식 필수? 설명 ARN ARN (p. 228) 예 Amazon ES 도메인의 Amazon 리소스 이 름(ARN)입니다. 215
PurchaseReservedElasticsearchInstance 요청 본문 이 작업은 HTTP 요청 본문을 사용하지 않습니다. 응답 요소 필드 데이터 형식 설명 TagList TagList (p. 238) 리소스 태그 목록. 자세한 내용은 Amazon Elasticsearch Service 도메인 태깅 (p. 41)을 참조하십시오. 오류 ListTags 작업은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) ResourceNotFoundException (p. ValidationException (p. ) InternalException (p. ) ) 예 다음 예에서는 logs 도메인에 연결된 태그를 나열합니다. 요청 GET es.<aws_region>.amazonaws.com/2015-01-01/tags?arn=arn:aws:es:uswest-1:123456789012:domain/logs 응답 HTTP/1.1 200 OK "TagList": [ "Key": "Environment", "Value": "MacOS" "Key": "project", "Value": "trident" ] PurchaseReservedElasticsearchInstance 예약 인스턴스를 구매합니다. 구문 POST /2015-01-01/es/purchaseReservedInstanceOffering 216
PurchaseReservedElasticsearchInstance 요청 파라미터 이 작업은 HTTP 요청 파라미터를 사용하지 않습니다. 요청 본문 이름 데이터 형식 ReservationName 문자열 필수? 설명 예 예약을 나타내는 이름. ReservedElasticsearchInstanceOfferingId 문자열 예 InstanceCount 정수 예 상품 ID입니다. 예약할 인스턴스 수. 응답 요소 필드 데이터 형식 설명 ReservationName 문자열 예약 이름. ReservedElasticsearchInstanceId 문자열 예약 ID. 오류 PurchaseReservedElasticsearchInstance 작업은 다음 오류 중 하나를 반환할 수 있습니다. DisabledOperationException (p. InternalException (p. ) ) ResourceNotFoundException (p. ValidationException (p. LimitExceededException (p. ) ) ) ResourceAlreadyExistsException (p. ) 예 요청 POST es.<aws_region>.amazonaws.com/2015-01-01/es/purchasereservedinstanceoffering "ReservationName" : "my-reservation", "ReservedElasticsearchInstanceOfferingId" : "1a2a3a4a5-1a2a-3a4a-5a6a-1a2a3a4a5a6a", "InstanceCount" : 3 응답 "ReservationName": "my-reservation", "ReservedElasticsearchInstanceId": "9a8a7a6a-5a4a-3a2a-1a0a-9a8a7a6a5a4a" 217
RemoveTags RemoveTags Amazon ES 도메인에서 지정된 리소스 태그를 제거합니다. 구문 POST es.<aws_region>.amazonaws.com/2015-01-01/tags-removal "ARN": "<DOMAIN_ARN>", "TagKeys": [ "<TAG_KEY>", "<TAG_KEY>",... ] 요청 파라미터 이 작업은 HTTP 요청 파라미터를 사용하지 않습니다. 요청 본문 파라미터 데이터 형식 필수? 설명 ARN ARN (p. 228) 예 Amazon ES 도메인의 Amazon 리소스 이름 (ARN)입니다. 자세한 내용은 AWS Identity and Access Management 사용의 IAM 개체에 대한 식별자 단원을 참조하십시오. TagKeys TagKey (p. 238) 예 Amazon ES 도메인에서 제거하려는 리소스 태그의 태그 키 목록입니다. 응답 요소 해당 사항 없음 RemoveTags 작업은 응답 요소를 반환하지 않습니다. 오류 RemoveTags 작업은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) ValidationException (p. InternalException (p. ) ) 예 다음 예에서는 태그 키가 project인 리소스 태그를 Amazon ES 도메인에서 삭제합니다. 요청 POST /2015-01-01/tags-removal 218
StartElasticsearchServiceSoftwareUpdate "ARN": "<DOMAIN_ARN>", "TagKeys": [ "project" ] 이 작업은 응답 요소를 반환하지 않습니다. StartElasticsearchServiceSoftwareUpdate Amazon ES 도메인에 대한 서비스 소프트웨어 업데이트 일정을 예약합니다. 구문 POST es.<aws_region>.amazonaws.com/2015-01-01/es/servicesoftwareupdate/start "DomainName": "<DOMAIN_NAME>" 요청 파라미터 이 작업은 HTTP 요청 파라미터를 사용하지 않습니다. 요청 본문 파라미터 데이터 형식 필수? 설명 DomainName DomainName (p. 229) 예 최신 서비스 소프트웨어로 업데이트하려는 Amazon ES 도메인의 이름입니다. 응답 요소 필드 데이터 형식 설명 ServiceSoftwareOptions ServiceSoftwareOptions 최신 서비스 소프트웨어와 관련된 도메인 상태에 대한 컨 테이너입니다. 오류 RemoveTags 작업은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) ValidationException (p. InternalException (p. ) ) ResourceNotFoundException (p. ) 예 다음 예제에서는 my-domain에 대한 서비스 소프트웨어 업데이트 일정을 예약합니다. 219
StopElasticsearchServiceSoftwareUpdate 요청 POST es.us-west-1.amazonaws.com/2015-01-01/es/servicesoftwareupdate/start "DomainName": "my-domain" 응답 "ServiceSoftwareOptions": "AutomatedUpdateDate": 1530185603, "Cancellable": true, "CurrentVersion": "LEGACY", "Description": "An update to release R1234567 has been requested and is pending. Before the update starts, you can cancel it any time", "NewVersion": "R1234567", "UpdateAvailable": false, "UpdateStatus": "PENDING_UPDATE" StopElasticsearchServiceSoftwareUpdate Amazon ES 도메인에 대해 예약된 서비스 소프트웨어 업데이트를 중단합니다. 도메인의 UpdateStatus가 PENDING_UPDATE인 경우에만 작동합니다. 구문 POST es.<aws_region>.amazonaws.com/2015-01-01/es/servicesoftwareupdate/stop "DomainName": "<DOMAIN_NAME>" 요청 파라미터 이 작업은 HTTP 요청 파라미터를 사용하지 않습니다. 요청 본문 파라미터 데이터 형식 필수? 설명 DomainName DomainName (p. 229) 예 최신 서비스 소프트웨어로 업데이트하려는 Amazon ES 도메인의 이름입니다. 응답 요소 필드 데이터 형식 설명 ServiceSoftwareOptions ServiceSoftwareOptions 최신 서비스 (p. 236)소프트웨어와 관련된 도메인 상태에 대한 컨 테이너입니다. 220
UpdateElasticsearchDomainConfig 오류 RemoveTags 작업은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) ValidationException (p. InternalException (p. ) ) ResourceNotFoundException (p. ) 예 다음 예제에서는 my-domain에 대해 예약된 서비스 소프트웨어 업데이트를 중단합니다. 요청 POST es.us-west-1.amazonaws.com/2015-01-01/es/servicesoftwareupdate/stop "DomainName": "my-domain" 응답 "ServiceSoftwareOptions": "AutomatedUpdateDate": 1530185603, "Cancellable": false, "CurrentVersion": "LEGACY", "Description": "A new software release R1234567 is available. This release will be automatically deployed if no action is taken.", "NewVersion": "R1234567", "UpdateAvailable": true, "UpdateStatus": "ELIGIBLE" UpdateElasticsearchDomainConfig Amazon ES 도메인의 구성(예: 인스턴스 유형 및 인스턴스 수)을 수정합니다. 업데이트할 값만 지정하면 됩 니다. 구문 POST /2015-01-01/es/domain/<DOMAIN_NAME>/config "ElasticsearchClusterConfig": "InstanceType": "<INSTANCE_TYPE>", "Instance_Count": <INSTANCE_COUNT>, "DedicatedMasterEnabled": "<TRUE FALSE>", "DedicatedMasterCount": <INSTANCE_COUNT>, "DedicatedMasterType": "<INSTANCE_COUNT>", "ZoneAwarenessEnabled": "<TRUE FALSE>" "EBSOptions": "EBSEnabled": "<TRUE FALSE>", "VolumeType": "<VOLUME_TYPE>", "VolumeSize": "<VOLUME_SIZE>", "Iops": "<VALUE>" 221
UpdateElasticsearchDomainConfig "VPCOptions": "SubnetIds": [ "<SUBNET_ID>" ], "SecurityGroupIds": [ "<SECURITY_GROUP_ID>" ] "AccessPolicies": "<ACCESS_POLICY_DOCUMENT>", "SnapshotOptions": "AutomatedSnapshotStartHour": <START_HOUR>, "AdvancedOptions": "rest.action.multi.allow_explicit_index": "<TRUE FALSE>", "indices.fielddata.cache.size": "<PERCENTAGE_OF_HEAP>" "LogPublishingOptions": "SEARCH_SLOW_LOGS": "CloudWatchLogsLogGroupArn":"<ARN>", "Enabled":true "INDEX_SLOW_LOGS": "CloudWatchLogsLogGroupArn":"<ARN>", "Enabled":true 요청 파라미터 이 작업은 HTTP 요청 파라미터를 사용하지 않습니다. 요청 본문 파라미터 데이터 형식 필수? 설명 DomainName DomainName (p. 229) 예 구성을 업데이트하려는 Amazon ES 도메인의 이름입니다. ElasticsearchClusterConfig ElasticsearchClusterConfig 아니요 (p. 230)클러스터 구성에 적용하려는 변경 사 항(예: 인스턴스 유형 및 EC2 인스턴 스의 수)입니다. EBSOptions EBSOptions (p. 230) 아니요 데이터 노드에 연결된 EBS 볼륨의 유 형 및 크기입니다. VPCOptions VPCOptions (p. 239) 아니요 VPC에서 사용할 Amazon ES를 구성 하는 데 필요한 값을 저장하는 컨테 이너입니다. 자세한 내용은 Amazon Elasticsearch Service 도메인에 대한 VPC 지원 (p. 126) 단원을 참조하십시 오. SnapshotOptions SnapshotOptions (p. 237) 아니요 (사용되지 않음) 서비스가 Amazon ES 도메인의 인덱스에 대해 일일 자동 스냅샷을 생성하는 시간입니다. AdvancedOptions AdvancedOptions (p. 227) 아니요 고급 구성 옵션을 지정하는 키-값 페 어입니다. 자세한 내용은 고급 옵션 구 성 (p. 20)을 참조하십시오. 222
UpdateElasticsearchDomainConfig 파라미터 데이터 형식 필수? 설명 AccessPolicies 문자열 아니요 Amazon ES 도메인에 대한 액세스 정 책을 지정합니다. 자세한 내용은 액세 스 정책 구성 (p. 18)을 참조하십시오. LogPublishingOptions LogPublishingOptions (p. 234) 아니요 CognitoOptions CognitoOptions (p. 228) 아니요 로그 게시를 느리게 구성하는 키-값 페 어입니다. Kibana에 Amazon Cognito 인증을 사 용하도록 Amazon ES를 구성할 키-값 페어. 응답 요소 필드 데이터 형식 설명 DomainConfig 문자열 구성을 업데이트한 후 Amazon ES 도메인의 상태입니다. 오류 UpdateElasticsearchDomainConfig은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) InternalException (p. ) InvalidTypeException (p. ) LimitExceededException (p. ValidationException (p. ) ) 예 다음 예제에서는 c5.xlarge.elasticsearch 인스턴스를 사용하도록 streaming-logs 도메인을 다시 구성합니다. 요청 POST es.us-west-1.amazonaws.com/2015-01-01/es/domain/streaming-logs/config "ElasticsearchClusterConfig": "InstanceType": "c5.xlarge.elasticsearch" 응답 "DomainConfig": "AccessPolicies": "Options": "\"Version\":\"2012-10-17\",\"Statement\":[\"Effect\":\"Allow \",\"Principal\":\"AWS\":\"*\"\"Action\":\"es:*\",\"Resource\":\"arn:aws:es:uswest-1:123456789012:domain/streaming-logs/*\",\"Condition\":\"IpAddress\":\"aws:SourceIp 223
UpdateElasticsearchDomainConfig \":[\"11.222.333.11\",\"11.222.333.12\",\"11.222.333.13\",\"11.222.333.14\", \"11.222.333.15\"]]", "Status": "CreationDate": 1537308535.899, "PendingDeletion": false, "State": "Active", "UpdateDate": 1554745087.482, "UpdateVersion": 121 "AdvancedOptions": "Options": "rest.action.multi.allow_explicit_index": "true" "Status": "CreationDate": 1537308535.899, "PendingDeletion": false, "State": "Active", "UpdateDate": 1537309172.772, "UpdateVersion": 6 "EBSOptions": "Options": "EBSEnabled": true, "Iops": null, "VolumeSize": 10, "VolumeType": "gp2" "Status": "CreationDate": 1537308535.899, "PendingDeletion": false, "State": "Active", "UpdateDate": 1537309172.772, "UpdateVersion": 6 "ElasticsearchClusterConfig": "Options": "DedicatedMasterCount": 3, "DedicatedMasterEnabled": true, "DedicatedMasterType": "c5.large.elasticsearch", "InstanceCount": 3, "InstanceType": "c5.xlarge.elasticsearch", "ZoneAwarenessConfig": "AvailabilityZoneCount": 3 "ZoneAwarenessEnabled": true "Status": "CreationDate": 1537308535.899, "PendingDeletion": false, "State": "Processing", "UpdateDate": 1562008396.658, "UpdateVersion": 148 "ElasticsearchVersion": "Options": "6.7", "Status": "CreationDate": 1537308535.899, "PendingDeletion": false, "State": "Active", "UpdateDate": 1559159251.094, "UpdateVersion": 141 224
UpgradeElasticsearchDomain "EncryptionAtRestOptions": "Options": "Enabled": true, "KmsKeyId": "arn:aws:kms:uswest-1:123456789012:key/1a2a3a4-1a2a-3a4a-5a6a-1a2a3a4a5a6a" "Status": "CreationDate": 1537308535.899, "PendingDeletion": false, "State": "Active", "UpdateDate": 1537309172.772, "UpdateVersion": 6 "NodeToNodeEncryptionOptions": "Options": "Enabled": true "Status": "CreationDate": 1537308535.899, "PendingDeletion": false, "State": "Active", "UpdateDate": 1537309172.772, "UpdateVersion": 6 "VPCOptions": "Options": "AvailabilityZones": null, "SecurityGroupIds": null, "SubnetIds": null, "VPCId": null "Status": "CreationDate": 1562008396.78, "PendingDeletion": false, "State": "Active", "UpdateDate": 1562008396.78, "UpdateVersion": 148 UpgradeElasticsearchDomain Amazon ES 도메인을 새 버전의 Elasticsearch로 업그레이드합니다. 또는 업그레이드 자격을 확인합니다. 구문 POST /2015-01-01/es/upgradeDomain "DomainName": "String", "TargetVersion": "String", "PerformCheckOnly": true false 요청 파라미터 이 작업은 HTTP 요청 파라미터를 사용하지 않습니다. 225
UpgradeElasticsearchDomain 요청 본문 파라미터 데이터 형식 필수? 설명 DomainName 문자열 예 업그레이드할 Amazon ES 도메인의 이름입니다. TargetVersion 문자열 예 업그레이드하려는 Elasticsearch 버전입니다. the section called GetCompatibleElasticsearchVersions (p. 204) 단원을 참조하십시오. PerformCheckOnly 부울(Boolean) 아니요 기본값은 false입니다. true일 경우, Amazon ES가 도메인의 자격을 확인 하지만 업그레이드를 수행하지는 않 습니다. 응답 요소 필드 데이터 형식 설명 UpgradeElasticsearchDomainResponse Map 작업 세부 정보를 확인하는 기본 응답입니다. 오류 UpdateElasticsearchDomainConfig은 다음 오류 중 하나를 반환할 수 있습니다. BaseException (p. ) ResourceNotFound (p. ) ResourceAlreadyExists (p. DisabledOperation (p. ValidationException (p. Internal (p. ) ) ) ) 예 다음 예제는Amazon ES 5.x 도메인을 Elasticsearch 5.6으로 업그레이드합니다. 요청 POST es.<aws_region>.amazonaws.com/2015-01-01/es/upgradedomain/ "DomainName": "my-domain", "TargetVersion": "5.6", "PerformCheckOnly": false 응답 226
데이터 형식 "DomainName": null, "PerformCheckOnly": null, "TargetVersion": null, "UpgradeId": null 데이터 형식 이 단원에서는 REST 구성 API에서 사용하는 데이터 형식에 대해 설명합니다. AdvancedOptions 고급 Elasticsearch 구성 옵션을 지정하는 키-값 문자열 페어입니다. 필드 데이터 형식 설명 rest.action.multi.allow_explicit_index 키-값 페어: HTTP 요청의 본문에서 인덱스에 대한 명시적 rest.action.multi.allow_explicit_index=<true 참조를 허용할지 여부를 false> 지정합니다. 인덱스 및 도메인 API와 같은 도메 인 하위 리소스에 대한 액세스 정책을 구성하려 면 이 속성을 비활성화 해야 합니다. 자세한 내 용은 URL 기반 액세스 제어 단원을 참조하십시 오. 하위 리소스에 대한 액세스 정책에 관한 자 세한 내용은 액세스 정 책 구성 (p. 18)을 참조 하십시오. indices.fielddata.cache.size키-값 페어: 필드 데이터에 할당되는 Java 힙 공간의 백분율 indices.fielddata.cache.size=<percentage_of_heap> 을 지정합니다. 기본적 으로 이 설정은 무한입 니다. indices.query.bool.max_clause_count 키-값 페어: Lucene 부울 쿼리 하 나에 허용되는 최대 indices.query.bool.max_clause_count=<int> 절 수를 지정합니다. 기본값은 1024입니 다. 절 수가 허용되는 개수 이상인 쿼리는 TooManyClauses 오류 를 일으킵니다. 자세한 내용은 Lucene 설명서 단원을 참조하십시오. AdvancedOptionsStatus Amazon ES 도메인의 고급 구성 옵션에 대한 업데이트 상태입니다. 227
ARN 필드 데이터 형식 설명 옵션 AdvancedOptions (p. 227) 고급 Elasticsearch 구성 옵션을 지정하는 키-값 페어입니다. 상태 OptionStatus (p. 236) Amazon ES 도메인의 고급 구성 옵션에 대한 업데이트 상태입니 다. ARN 필드 데이터 형식 설명 ARN 문자열 Amazon ES 도메인의 Amazon 리소스 이름(ARN)입니다. 자세한 내용은 AWS Identity and Access Management 문서의 IAM ARN을 참조하십시오. CognitoOptions 필드 데이터 형식 설명 Enabled 부울(Boolean) Kibana에 대한 Amazon Cognito 인증을 활성화할 지 여부. Kibana에 대한 인증 (p. 111) 단원을 참조 하십시오. UserPoolId 문자열 Amazon ES에서 Kibana 인증을 사용하도록 하려는 Amazon Cognito 사용자 풀 ID. IdentityPoolId 문자열 Amazon ES에서 Kibana 인증을 사용하도록 하려는 Amazon Cognito 자격 증명 풀 ID. RoleArn 문자열 Amazon ES에서 사용자 풀과 자격 증명 풀의 구성 을 허용하는 AmazonESCognitoAccess 역할. CognitoOptionsStatus 필드 데이터 형식 설명 Options CognitoOptions (p. Kibana에 228) Amazon Cognito 인증을 사용하도록 Amazon ES를 구성할 키-값 페어. Status OptionStatus (p. 236) Amazon ES 도메인의 Amazon Cognito 구성 옵션 에 대한 업데이트 상태입니다. CreateElasticsearchDomainRequest CreateElasticsearchDomain 서비스 작업에 필요한 파라미터의 컨테이너입니다. 228
DomainID 필드 데이터 형식 설명 DomainName DomainName (p. 229) 만들 Amazon ES 도메인의 이름입니다. ElasticsearchClusterConfig ElasticsearchClusterConfig Amazon (p. 230) ES 도메인의 클러스터 구성을 위 한 컨테이너입니다. EBSOptions EBSOptions (p. 230) Amazon ES 도메인에 EBS 기반 스토리지 를 사용하도록 하는 데 필요한 매개변수의 컨테이너입니다. 자세한 내용은 EBS 기반 스토리지 구성 (p. 16)을 참조하십시오. AccessPolicies 문자열 새 Amazon ES 도메인에 대한 액세스 정책 을 지정하는 IAM 정책 문서입니다. 자세한 내용은 액세스 정책 구성 (p. 18)을 참조하 십시오. SnapshotOptions SnapshotOptions (p. 237) (사용되지 않음) 도메인 인덱스의 자동 스냅 샷을 구성하는 데 필요한 파라미터의 컨테 이너입니다. VPCOptions VPCOptions (p. 239) VPC에서 사용할 Amazon ES를 구성하는 데 필요한 값을 저장하는 컨테이너입니다. LogPublishingOptions LogPublishingOptions (p. 234) 로그 게시를 느리게 구성하는 키-값 페어입 니다. AdvancedOptions AdvancedOptionsStatus (p. 고급 227) 구성 옵션을 지정하는 키-값 페어입니 다. CognitoOptions CognitoOptions (p. 228) Kibana에 Amazon Cognito 인증을 사용하 도록 Amazon ES를 구성할 키-값 페어. NodeToNodeEncryptionOptions NodeToNodeEncryptionOptions 노드 (p. 간 암호화를 235) 활성화하기 위해 true를 지정합니다. DomainID 데이터 형식 설명 문자열 Amazon ES 도메인의 고유한 식별자입니다. DomainName Amazon ES 도메인의 이름입니다. 데이터 형식 설명 문자열 Amazon ES 도메인의 이름입니다. 도메인 이름은 AWS 리전 내에서 동일한 계정이 소유한 모든 도메인 간에 고유합니다. 도메인 이름은 소문자로 시작 해야 하며 3~28자여야 합니다. 유효한 문자는 a-z(소문자만), 0-9 및 (하이 픈)입니다. 229
DomainNameList DomainNameList Amazon ES 도메인 이름의 문자열입니다. 데이터 형식 설명 문자열 배열 Amazon ES 도메인의 배열 형식은 다음과 같습니다. ["<Domain_Name>","<Domain_Name>"...] EBSOptions Amazon ES 도메인에 EBS 기반 스토리지를 사용하도록 하는 데 필요한 매개변수의 컨테이너입니다. 자세한 내용은 EBS 기반 스토리지 구성 (p. 16)을 참조하십시오. 필드 데이터 형식 설명 EBSEnabled 부울(Boolean) Amazon ES 도메인의 데이터 노드에 EBS 볼륨을 연결 할지 여부를 지정합니다. VolumeType 문자열 데이터 노드에 연결된 EBS 볼륨의 유형을 지정합니다. VolumeSize 문자열 데이터 노드에 연결된 EBS 볼륨의 크기(GiB)를 지정합 니다. Iops 문자열 데이터 노드에 연결된 EBS 볼륨의 기본 입력/출력(I/O) 성능을 지정합니다. 프로비저닝된 IOPS EBS 볼륨 유형 에만 적용됩니다. ElasticsearchClusterConfig Amazon ES 도메인의 클러스터 구성을 위한 컨테이너입니다. 필드 데이터 형식 설명 InstanceType 문자열 클러스터에 있는 데이터 노드의 인스턴스 유형입니 다. InstanceCount 정수 클러스터의 인스턴스 수입니다. DedicatedMasterEnabled 부울(Boolean) 클러스터에 전용 마스터 노드를 사용할 수 있는지 여부를 지정합니다. 클러스터에서 전용 마스터 노드 를 사용하는 경우 True를 지정합니다. 사용하지 않 는 경우에는 False를 지정합니다. 자세한 내용은 전용 마스터 노드 정보 (p. 137) 단원을 참조하십시 오. DedicatedMasterType 문자열 클러스터에 있는 전용 마스터 노드의 Amazon ES 인스턴스 유형입니다. DedicatedMasterCount 정수 클러스터에 있는 전용 마스터 노드 수입니다. 230
ElasticsearchDomainConfig 필드 데이터 형식 설명 ZoneAwarenessEnabled 부울(Boolean) 다중 가용 영역을 사용할 수 있는지 여부를 나타냅 니다. 자세한 내용은 the section called 다중 AZ 도 메인 구성 (p. 29) 단원을 참조하십시오. ZoneAwarenessConfig ZoneAwarenessConfig 영역 인식 (p.구성 239)옵션을 위한 컨테이너입니다. ZoneAwarenessEnabled가 true일 경우에만 필 수입니다. ElasticsearchDomainConfig Amazon ES 도메인의 구성을 위한 컨테이너입니다. 필드 데이터 형식 설명 ElasticsearchVersion 문자열 Elasticsearch 버전입니다. ElasticsearchClusterConfig ElasticsearchClusterConfig Amazon (p. 230) ES 도메인의 클러스터 구성을 위한 컨테이너입니다. EBSOptions EBSOptions (p. 230) Amazon ES 도메인에 대해 구성 된 EBS 옵션을 위한 컨테이너입 니다. AccessPolicies 문자열 Amazon ES 도메인에 대한 액세 스 정책을 지정합니다. 자세한 내 용은 액세스 정책 구성 (p. 18)을 참조하십시오. SnapshotOptions SnapshotOptions (p. 237) (사용되지 않음) 서비스가 Amazon ES 도메인의 인덱스에 대해 일일 자동 스냅샷을 생성하 는 시간입니다. VPCOptions VPCDerivedInfo (p. 238) 도메인의 현재 VPCOptions (p. 239)과 구성에 대한 업데이트의 상태입니다. LogPublishingOptions LogPublishingOptions (p. 234) 로그 게시를 느리게 구성하는 키값 페어입니다. AdvancedOptions AdvancedOptions (p. 227) EncryptionAtRestOptions EncryptionAtRestOptions (p. 유휴 233) 시 암호화를 활성화하는 키값 페어입니다. NodeToNodeEncryptionOptions NodeToNodeEncryptionOptions 노드(p. 간 235) 암호화의 활성화 여부. ElasticsearchDomainStatus DomainStatus 데이터 구조의 콘텐츠를 위한 컨테이너입니다. 231 고급 구성 옵션을 지정하는 키-값 페어입니다.
ElasticsearchDomainStatus 필드 데이터 형식 설명 DomainID DomainID (p. 229) Amazon ES 도메인의 고유한 식 별자입니다. DomainName DomainName (p. 229) Amazon ES 도메인의 이름입니 다. 도메인 이름은 AWS 리전 내 에서 동일한 계정이 소유한 모든 도메인 간에 고유합니다. 도메인 이름은 소문자로 시작해야 하며 3~28자여야 합니다. 유효한 문자 는 a-z(소문자만), 0-9 및 (하이 픈)입니다. ARN ARN (p. 228) Amazon ES 도메인의 Amazon 리 소스 이름(ARN)입니다. 자세한 내용은 AWS Identity and Access Management 사용의 IAM 개체에 대한 식별자 단원을 참조하십시 오. Created 부울(Boolean) Amazon ES 도메인의 생성 상태 입니다. 도메인 생성이 완료되면 True이고 도메인 생성이 진행 중 이면 False입니다. Deleted 부울(Boolean) Amazon ES 도메인의 삭제 상태 입니다. 도메인 삭제가 완료되면 True이고 도메인 삭제가 진행 중 이면 False입니다. Endpoint ServiceUrl (p. 237) Amazon ES 도메인으로 인덱스, 검색 및 데이터 업로드 요청을 제 출하는 데 사용되는 도메인별 엔 드포인트입니다. Endpoints EndpointsMap (p. 234) Amazon ES 도메인이 VPC 엔드 포인트를 사용할 경우 존재하는 키-값 페어입니다. Processing 부울(Boolean) Amazon ES 도메인 구성 변경 상 태입니다. 서비스가 여전히 구 성 변경을 처리 중이면 True이 고 구성 변경이 활성 상태이면 False입니다. 인덱스, 검색 및 데 이터 업로드 요청을 제출하기 전 에 도메인이 활성 상태가 될 때까 지 기다려야 합니다. ElasticsearchVersion 문자열 Elasticsearch 버전입니다. ElasticsearchClusterConfig ElasticsearchClusterConfigAmazon (p. 230) ES 도메인의 클러스터 구성을 위한 컨테이너입니다. EBSOptions EBSOptions (p. 230) 232 Amazon ES 도메인에 EBS 기반 스토리지를 사용하도록 하는 데 필요한 매개변수의 컨테이너입니 다. 자세한 내용은 EBS 기반 스토
ElasticsearchDomainStatusList 필드 데이터 형식 설명 리지 구성 (p. 16)을 참조하십시 오. AccessPolicies 문자열 새 Amazon ES 도메인에 대한 액 세스 정책을 지정하는 IAM 정책 문서입니다. 자세한 내용은 액세 스 정책 구성 (p. 18)을 참조하십 시오. SnapshotOptions SnapshotOptions (p. 237) (사용되지 않음) Amazon ES 도메 인 인덱스의 일일 자동 스냅샷을 구성하는 데 필요한 파라미터의 컨테이너입니다. VPCOptions VPCDerivedInfo (p. 239) Amazon ES가 도메인의 VPCOptions (p. 239)를 기반으 로 도출하는 정보입니다. LogPublishingOptions LogPublishingOptions (p. 234)로그 게시를 느리게 구성하는 키값 페어입니다. AdvancedOptions AdvancedOptions (p. 227) EncryptionAtRestOptions EncryptionAtRestOptions (p. 233) 유휴 시 암호화를 활성화하는 키값 페어입니다. CognitoOptions CognitoOptions (p. 228) 고급 구성 옵션을 지정하는 키-값 페어입니다. Kibana에 Amazon Cognito 인증 을 사용하도록 Amazon ES를 구 성할 키-값 페어. NodeToNodeEncryptionOptionsNodeToNodeEncryptionOptions 노드 (p. 간 235) 암호화의 활성화 여부. ElasticsearchDomainStatusList 지정된 각 Amazon ES 도메인의 상태가 포함된 목록입니다. 필드 데이터 형식 설명 DomainStatusList ElasticsearchDomainStatus (p. 231)지정된 각 Amazon ES 도메인 의 상태가 포함된 목록입니다. EncryptionAtRestOptions 유휴 시 도메인이 데이터를 암호화할지 여부와 암호화하는 경우 AWS Key Management Service(KMS) 키를 사용할지 여부를 지정합니다. 기존 도메인 업데이트가 아닌 새 도메인을 생성할 때만 사용할 수 있습니다. 필드 데이터 형식 설명 Enabled 부울(Boolean) 유휴 시 암호화를 활성화하기 위해 true를 지정합니다. 233
EncryptionAtRestOptionsStatus 필드 데이터 형식 설명 KmsKeyId 문자열 KMS 키 ID입니다. 1a2a3a4-1a2a-3a4a-5a6a-1a2a3a4a5a6 양식을 사용합니다. EncryptionAtRestOptionsStatus 도메인의 유휴 시 암호화 상태 옵션입니다. 필드 데이터 형식 설명 Options EncryptionAtRestOptions (p. 233) 도메인에 대한 유휴 시 암호화 옵션입니다. Status OptionStatus (p. 236) 도메인의 유휴 시 암호화 상태 옵션입니다. EndpointsMap VPC 엔드포인트가 저장된 키-값 페어입니다. Amazon ES 도메인이 VPC에 상주하는 경우에만 존재합니다. 필드 데이터 형식 설명 Endpoints 키-값 문자열 도메인의 VPC 엔드포인트입니다. 페어: "vpc": "<VPC_ENDPOINT>" LogPublishingOptions Amazon ES 도메인이 Amazon CloudWatch에 Elasticsearch 애플리케이션 및 느린 로그를 게시할지 여부를 지정합니다. Elasticsearch REST API를 사용하는 느린 로그 모음을 계속 활성화해야 합니다. 자세한 내용은 the section called 느린 로그에 대한 Elasticsearch 로깅 임계값 설정 (p. 24) 단원을 참조하십시오. 필드 데이터 형식 설명 INDEX_SLOW_LOGS 키-값 CloudWatch 로그 그룹 및 Elasticsearch의 인덱스 느린 로그 여부를 정의하는 두 개의 키-값 페어는 다음 위치에 게시되어야 합니 다. "CloudWatchLogsLogGroupArn":"arn:aws:logs:useast-1:264071961897:log-group:sampledomain", "Enabled":true SEARCH_SLOW_LOGS 키-값 CloudWatch 로그 그룹 및 Elasticsearch 검 색 느린 로그 여부를 정의하는 두 개의 키-값 페어는 다음 위치에 게시되어야 합니다. 234
LogPublishingOptionsStatus 필드 데이터 형식 설명 "CloudWatchLogsLogGroupArn":"arn:aws:logs:useast-1:264071961897:log-group:sampledomain", "Enabled":true ES_APPLICATION_LOGS 키-값 CloudWatch 로그 그룹 및 Elasticsearch의 오류 로그 여부를 정의하는 두 개의 키-값 페 어는 다음 위치에 게시되어야 합니다. "CloudWatchLogsLogGroupArn":"arn:aws:logs:useast-1:264071961897:log-group:sampledomain", "Enabled":true LogPublishingOptionsStatus Amazon ES 도메인에 대한 느린 로그 게시 옵션 구성의 업데이트 상태입니다. 필드 데이터 형식 설명 Options LogPublishingOptions (p. 234) 도메인에 대한 로그 게시 옵션 Status OptionStatus (p. 236) Amazon ES 도메인의 로그 게 시 옵션 옵션에 대한 업데이트 상태입니다. NodeToNodeEncryptionOptions 노드 간 암호화를 활성화 또는 비활성화합니다. 필드 데이터 형식 설명 Enabled 부울(Boolean) true를 사용하여 활성화 NodeToNodeEncryptionOptionsStatus 도메인의 노드 간 암호화 옵션의 상태입니다. 필드 데이터 형식 설명 Options NodeToNodeEncryptionOptions 노드(p. 간 235) 암호화의 활성화 여부. Status OptionStatus (p. 236) 설정의 상태입니다. OptionState Amazon ES 도메인의 고급 옵션에 대한 업데이트 상태입니다. 235
OptionStatus 필드 데이터 형식 설명 OptionStatus 문자열 유효한 값 3개 중 하나: RequiresIndexDocuments 처리 중 활성 상태 OptionStatus Amazon ES 도메인의 구성 옵션에 대한 업데이트 상태입니다. 필드 데이터 형식 설명 CreationDate 타임스탬프 Amazon ES 도메인이 생성된 날짜와 시간 UpdateDate 타임스탬프 Amazon ES 도메인이 업데이트된 날짜와 시 간 UpdateVersion 정수 개체의 최신 버전을 지정하는 정수 State OptionState (p. 235) Amazon ES 도메인의 구성 옵션에 대한 업데 이트 상태 PendingDeletion 부울(Boolean) 서비스가 Amazon ES 도메인 및 도메인의 모 든 리소스를 영구히 삭제하기 위한 요청을 처 리 중인지 여부를 나타냅니다. ServiceSoftwareOptions 최신 서비스 소프트웨어와 관련된 도메인 상태에 대한 컨테이너입니다. 필드 데이터 형식 설명 UpdateAvailable 부울(Boolean) 도메인에 대해 서비스 소프트웨어 업데이트 를 사용할 수 있는지 여부입니다. Cancellable 부울(Boolean) 도메인 업데이트를 요청한 경우 업데이트를 취소할 수 있는지 여부입니다. AutomatedUpdateDate Timestamp 배포 창이 닫히는 Epoch 시간입니다. 이 시간 후 Amazon ES는 소프트웨어 업그레이드 일 정을 자동으로 예약합니다. UpdateStatus 문자열 업데이트의 상태입니다. 값은 ELIGIBLE, PENDING_UPDATE, IN_PROGRESS, COMPLETED, NOT_ELIGIBLE입니다. Description 문자열 상태에 대한 자세한 설명입니다. CurrentVersion 문자열 현재 서비스 소프트웨어 버전입니다. NewVersion 문자열 최신 서비스 소프트웨어 버전입니다. 236
ServiceURL ServiceURL Amazon ES 도메인으로 인덱스, 검색 및 데이터 업로드 요청을 제출하는 데 사용되는 도메인별 엔드포인트 입니다. 필드 데이터 형식 설명 ServiceURL 문자열 Amazon ES 도메인으로 인덱스, 검색 및 데이터 업로드 요청을 제 출하는 데 사용되는 도메인별 엔드포인트입니다. SnapshotOptions (사용되지 않음) 인덱스 스냅샷 작업 (p. 94) 단원을 참조하십시오. Amazon ES 도메인 인덱스의 일일 자동 스냅샷 생성 시간을 구성하는 데 필요한 파라미터의 컨테이너입니다. Field 데이터 형식 설명 AutomatedSnapshotStartHour 정수 (사용되지 않음) 서비스가 Amazon ES 도 메인의 인덱스에 대해 일일 자동 스냅샷을 생성하는 시간입니다. SnapshotOptionsStatus Amazon ES 도메인에 대한 일일 자동 스냅샷 구성의 업데이트 상태입니다. 필드 데이터 형식 설명 Options SnapshotOptions (p. 237) Amazon ES 도메인의 인덱스에 대해 일일 자동 스냅샷을 수행하는 시간을 구성하는 데 필요한 파라미터의 컨테이너입니다. Status OptionStatus (p. 236) Amazon ES 도메인의 스냅샷 옵션에 대한 업데이트 상태입니다. 태그 필드 데이터 형식 설명 Key TagKey (p. 238) 태그의 필수 이름입니다. 태그 키는 연결된 Amazon ES 도메인에 대해 고유해야 합니다. 자세 한 내용은 Amazon Elasticsearch Service 도메인 태깅 (p. 41)을 참조하십시오. Value TagValue (p. 238) 태그의 선택적 문자열 값입니다. 태그 값은 태그 세 트에서 고유할 필요는 없으며 null일 수 있습니다. 예를 들어, project/trinity 및 cost-center/trinity의 태그 세트에 키-값 페어가 있을 수 있습니다. 237
TagKey TagKey 필드 데이터 형식 설명 Key 문자열 태그의 이름입니다. 문자열은 최대 128자일 수 있 습니다. TagList 필드 데이터 형식 설명 Tag Tag (p. 237) Amazon ES 도메인에 연결된 리소스 태그입니다. 필드 데이터 형식 설명 Value 문자열 TagKey의 값을 보관합니다. 문자열은 최대 256자 일 수 있습니다. 필드 데이터 형식 설명 VPCId 문자열 VPC의 ID입니다. VPC를 생성하면 Amazon VPC가 이 값을 생성합니다. SubnetIds StringList 도메인의 VPC 엔드포인트와 연결된 서브넷 ID의 목록입니다. 자세한 내용은 Amazon VPC 사용 설 명서의 VPC 및 서브넷을 참조하십시오. AvailabilityZones StringList VPC의 서브넷과 연결된 가용 영역의 목록입니다. 자세한 내용은 Amazon VPC 사용 설명서의 VPC 및 서브넷 기본 사항을 참조하십시오. SecurityGroupIds StringList 도메인의 VPC 엔드포인트와 연결된 보안 그룹 ID 의 목록입니다. 자세한 내용은 Amazon VPC 사용 설명서의 VPC의 보안 그룹을 참조하십시오. TagValue VPCDerivedInfo VPCDerivedInfoStatus 필드 데이터 형식 설명 Options VPCDerivedInfo (p. Amazon 238) ES가 도메인의 VPCOptions (p. 239)를 기반으로 도출하는 정보입니다. 238
VPCOptions 필드 데이터 형식 설명 Status OptionStatus (p. 236) Amazon ES 도메인의 VPC 구성 옵션에 대한 업데 이트 상태입니다. VPCOptions 필드 데이터 형식 설명 SubnetIds StringList 도메인의 VPC 엔드포인트와 연결된 서브넷 ID의 목록입니다. 도메인에서 여러 가용 영역으르 사용 할 경우 영역당 2개의 서브넷 ID를 제공해야 합니 다. 그렇지 않은 경우 하나만 제공합니다. 자세한 내용은 Amazon VPC 사용 설명서의 VPC 및 서브 넷을 참조하십시오. SecurityGroupIds StringList 도메인의 VPC 엔드포인트와 연결된 보안 그룹 ID 의 목록입니다. 보안 그룹 ID를 제공하지 않은 경 우 Amazon ES가 VPC의 기본 보안 그룹을 사용합 니다. 자세한 내용은 Amazon VPC 사용 설명서의 VPC의 보안 그룹을 참조하십시오. VPCOptionsStatus 필드 데이터 형식 설명 Options VPCOptions (p. 239) VPC에서 사용할 Amazon ES를 구성하는 데 필요 한 값을 저장하는 컨테이너입니다. Status OptionStatus (p. 236) Amazon ES 도메인의 VPC 구성 옵션에 대한 업데 이트 상태입니다. ZoneAwarenessConfig 필드 데이터 형식 AvailabilityZoneCount 정수 설명 여러 가용 영역(AZ)을 활성화한 경우 이 필 드는 도메인에서 사용할 AZ 개수입니다. 유 효 값은 2 및 3입니다. 오류 Amazon ES에서 다음 오류가 발생합니다. 예외 설명 BaseException 모든 서비스 오류에 대해 발생합니다. 오류의 HTTP 상태 코드가 포 함되어 있습니다. 239
오류 예외 설명 ValidationException HTTP 요청에 잘못된 입력이 포함되어 있거나 필요한 입력이 누락 된 경우 발생합니다. HTTP 상태 코드 400을 반환합니다. DisabledOperationException 클라이언트가 지원되지 않는 작업을 수행하려고 하면 발생합니다. HTTP 상태 코드 409을 반환합니다. InternalException 요청 처리 중 서비스 내부 오류가 발생하는 경우 발생합니다. HTTP 상태 코드 500을 반환합니다. InvalidTypeException 잘못되었거나 지원되지 않는 Amazon ES 도메인 하위 리소스를 만 들거나 이러한 리소스에 액세스하려고 하면 발생합니다. HTTP 상 태 코드 409을 반환합니다. LimitExceededException 허용되는 개수 및 유형보다 많은 Amazon ES 도메인 리소스 및 하 위 리소스를 만들려고 하면 발생합니다. HTTP 상태 코드 409을 반 환합니다. ResourceNotFoundException 존재하지 않는 리소스에 액세스하거나 이러한 리소스를 삭제하려 고 하면 발생합니다. HTTP 상태 코드 400을 반환합니다. ResourceAlreadyExistsException 클라이언트가 Amazon ES 도메인에 이미 존재하는 리소스를 만들 려고 하는 경우 발생합니다. HTTP 상태 코드 400을 반환합니다. 240
클러스터 및 인스턴스 제한 Amazon Elasticsearch Service 한도 아래 표에는 클러스터당 인스턴스 수, EBS 볼륨의 최소 및 최대 크기, 네트워크 제한 등 Amazon ES 리소스 에 대한 제한이 나와 있습니다. 클러스터 및 인스턴스 제한 다음 표에는 클러스터 및 인스턴스에 대한 Amazon ES 제한이 나와 있습니다. 클러스터 및 인스턴스 한도 클러스터당 최대 데이터 인스턴스 수 (인스턴스 수) 40(최대값이 10인 T2 인스턴스 유형은 제외) Note 기본 한도는 도메인당 40개의 데이터 인스턴스입니다. 도메인당 인스턴스 수를 최대 200개까지 늘리도록 요청 하려면(Elasticsearch 2.3 이상의 경우) AWS Support 센 터에서 요청을 생성하십시오. 증가 요청에 대한 자세한 내용은 AWS 서비스 제한을 참 조하십시오. 전용 마스터 노드의 최대 개수 5 Note 인스턴스 수가 10개 이하인 경우에만 T2 인스턴스 유형 을 전용 마스터 노드로 사용할 수 있습니다. 지원되는 가장 작은 인스턴스 유형 t2.micro.elasticsearch(버전 1.5 및 2.3)와 t2.small.elasticsearch(버전 5.x 및 6.x). 계정당 도메인의 최대 수(리전당) 100 Amazon ES에서 지원하는 인스턴스 유형 목록은 지원되는 인스턴스 유형 (p. 158)을 참조하십시오. EBS 볼륨 크기 제한 다음 표에는 Amazon ES에서 지원하는 각 인스턴스 유형에 대한 최소 및 최대 EBS 볼륨 크기가 나와 있 습니다. 인스턴스 스토리지 및 추가 하드웨어 세부 정보를 포함한 인스턴스 유형에 대한 정보는 Amazon Elasticsearch Service 요금을 참조하십시오. 도메인을 만들 때 EBS volume type(ebs 볼륨 유형)에서 마그네틱 스토리지를 선택했다면 t2.micro, t2.small, t2.medium을 제외한 모든 인스턴스 유형에서 최대 볼륨 크기가 100GiB입니다. 아래 표에 나 와 있는 최대 크기에 맞춰 SSD 옵션 하나를 선택하십시오. 512GiB는 Elasticsearch 버전 1.5에서 지원되는 최대 볼륨 크기입니다. 일부 이전 세대 인스턴스 유형은 인스턴스 스토리지를 포함할 뿐만 아니라 EBS 스토리지도 지원합니다. 이러한 인스턴스 유형 중 하나에 대해 EBS 스토리지를 선택할 경우, 스토리지 볼륨이 추가되지 않습니다. EBS 볼륨 또는 인스턴스 스토리지 중에서 하나를(둘 다는 안됨) 선택할 수 있습니다. 241
EBS 볼륨 크기 제한 인스턴스 유형 최소 EBS 크기 최대 EBS 크기 t2.micro.elasticsearch 10GiB 35GiB t2.small.elasticsearch 10GiB 35GiB t2.medium.elasticsearch 10GiB 35GiB m3.medium.elasticsearch 10GiB 100GiB m3.large.elasticsearch 10GiB 512GiB m3.xlarge.elasticsearch 10GiB 512GiB m3.2xlarge.elasticsearch 10GiB 512GiB m4.large.elasticsearch 10GiB 512GiB m4.xlarge.elasticsearch 10GiB 1TiB m4.2xlarge.elasticsearch 10GiB 1.5TiB m4.4xlarge.elasticsearch 10GiB 1.5TiB m4.10xlarge.elasticsearch 10GiB 1.5TiB m5.large.elasticsearch 10GiB 512GiB m5.xlarge.elasticsearch 10GiB 1TiB m5.2xlarge.elasticsearch 10GiB 1.5TiB m5.4xlarge.elasticsearch 10GiB 3TiB m5.12xlarge.elasticsearch 10GiB 9TiB c4.large.elasticsearch 10GiB 100GiB c4.xlarge.elasticsearch 10GiB 512GiB c4.2xlarge.elasticsearch 10GiB 1TiB c4.4xlarge.elasticsearch 10GiB 1.5TiB c4.8xlarge.elasticsearch 10GiB 1.5TiB c5.large.elasticsearch 10GiB 256GiB c5.xlarge.elasticsearch 10GiB 512GiB c5.2xlarge.elasticsearch 10GiB 1TiB c5.4xlarge.elasticsearch 10GiB 1.5TiB c5.9xlarge.elasticsearch 10GiB 3.5TiB c5.18xlarge.elasticsearch 10GiB 7TiB r3.large.elasticsearch 10GiB 512GiB r3.xlarge.elasticsearch 10GiB 512GiB r3.2xlarge.elasticsearch 10GiB 512GiB 242
네트워크 제한 인스턴스 유형 최소 EBS 크기 최대 EBS 크기 r3.4xlarge.elasticsearch 10GiB 512GiB r3.8xlarge.elasticsearch 10GiB 512GiB r4.large.elasticsearch 10GiB 1TiB r4.xlarge.elasticsearch 10GiB 1.5TiB r4.2xlarge.elasticsearch 10GiB 1.5TiB r4.4xlarge.elasticsearch 10GiB 1.5TiB r4.8xlarge.elasticsearch 10GiB 1.5TiB r4.16xlarge.elasticsearch 10GiB 1.5TiB r5.large.elasticsearch 10GiB 1TiB r5.xlarge.elasticsearch 10GiB 1.5TiB r5.2xlarge.elasticsearch 10GiB 3TiB r5.4xlarge.elasticsearch 10GiB 6TiB r5.12xlarge.elasticsearch 10GiB 12TiB i2.xlarge.elasticsearch 10GiB 512GiB i2.2xlarge.elasticsearch 10GiB 512GiB i3.large.elasticsearch 해당 사항 없음 해당 사항 없음 i3.xlarge.elasticsearch 해당 사항 없음 해당 사항 없음 i3.2xlarge.elasticsearch 해당 사항 없음 해당 사항 없음 i3.4xlarge.elasticsearch 해당 사항 없음 해당 사항 없음 i3.8xlarge.elasticsearch 해당 사항 없음 해당 사항 없음 i3.16xlarge.elasticsearch 해당 사항 없음 해당 사항 없음 네트워크 제한 다음 표에는 HTTP 요청 페이로드의 최대 크기가 나와 있습니다. 인스턴스 유형 HTTP 요청 페이로드의 최대 크기 t2.micro.elasticsearch 10MiB t2.small.elasticsearch 10MiB t2.medium.elasticsearch10mib m3.medium.elasticsearch10mib m3.large.elasticsearch 10MiB 243
네트워크 제한 인스턴스 유형 HTTP 요청 페이로드의 최대 크기 m3.xlarge.elasticsearch100mib m3.2xlarge.elasticsearch 100MiB m4.large.elasticsearch 10MiB m4.xlarge.elasticsearch100mib m4.2xlarge.elasticsearch 100MiB m4.4xlarge.elasticsearch 100MiB m4.10xlarge.elasticsearch 100MiB m5.large.elasticsearch 10MiB m5.xlarge.elasticsearch100mib m5.2xlarge.elasticsearch 100MiB m5.4xlarge.elasticsearch 100MiB m5.12xlarge.elasticsearch 100MiB c4.large.elasticsearch 10MiB c4.xlarge.elasticsearch100mib c4.2xlarge.elasticsearch 100MiB c4.4xlarge.elasticsearch 100MiB c4.8xlarge.elasticsearch 100MiB c5.large.elasticsearch 10MiB c5.xlarge.elasticsearch100mib c5.2xlarge.elasticsearch 100MiB c5.4xlarge.elasticsearch 100MiB c5.9xlarge.elasticsearch 100MiB c5.18xlarge.elasticsearch 100MiB r3.large.elasticsearch 10MiB r3.xlarge.elasticsearch100mib r3.2xlarge.elasticsearch 100MiB r3.4xlarge.elasticsearch 100MiB r3.8xlarge.elasticsearch 100MiB r4.large.elasticsearch 100MiB r4.xlarge.elasticsearch100mib r4.2xlarge.elasticsearch 100MiB 244
Java 프로세스 제한 인스턴스 유형 HTTP 요청 페이로드의 최대 크기 r4.4xlarge.elasticsearch 100MiB r4.8xlarge.elasticsearch 100MiB r4.16xlarge.elasticsearch 100MiB r5.large.elasticsearch 100MiB r5.xlarge.elasticsearch100mib r5.2xlarge.elasticsearch 100MiB r5.4xlarge.elasticsearch 100MiB r5.12xlarge.elasticsearch 100MiB i2.xlarge.elasticsearch100mib i2.2xlarge.elasticsearch 100MiB i3.large.elasticsearch 100MiB i3.xlarge.elasticsearch100mib i3.2xlarge.elasticsearch 100MiB i3.4xlarge.elasticsearch 100MiB i3.8xlarge.elasticsearch 100MiB i3.16xlarge.elasticsearch 100MiB Java 프로세스 제한 Amazon ES에서 Java 프로세스는 힙 크기 32GiB로 제한됩니다. 고급 사용자는 필드 데이터에 사용할 힙 비율을 지정할 수 있습니다. 자세한 내용은 the section called 고급 옵션 구성 (p. 20) 및 the section called JVM OutOfMemoryError (p. 153) 단원을 참조하십시오. 도메인 정책 제한 Amazon ES는 도메인에 대한 액세스 정책 (p. 49)을 102400바이트로 제한합니다. 245
예약 인스턴스 구입(콘솔) Amazon Elasticsearch Service 예약 인스턴스 Amazon Elasticsearch Service 예약 인스턴스(RI)는 표준 온디맨드 인스턴스에 비해 요금이 대폭 할인됩니 다. 인스턴스 자체는 동일합니다. RI는 계정에서 온디맨드 인스턴스를 사용할 때 적용되는 결제 할인입니다. 사용량이 예측 가능하며 수명이 긴 애플리케이션의 경우, RI를 이용하면 시간이 지날수록 상당한 액수를 절 감할 수 있습니다. Amazon ES RI는 1년이나 3년 동안 이용해야 하며, 할인율이 달라지는 3가지 결제 방법을 제공합니다. 선결제 없음 선결제를 하지 않습니다. 사용 기간 내내 시간당 요금을 할인받습니다. 부분 선결제 일부 비용을 선결제하고, 사용 기간 내내 시간당 요금을 할인받습니다. 전체 선결제 모든 비용을 선결제합니다. 해당 기간 중 시간당 요금을 지불하지 않습니다. 일반적으로 선결제 금액이 많을수록 할인율이 증가합니다. 예약 인스턴스는 취소할 수 없습니다. 일단 예 약하면 사용 기간 내내 비용 지불을 약정하는 것이며 선결제 금액은 환불되지 않습니다. 자세한 내용은 Amazon Elasticsearch Service 요금 및 FAQ를 참조하십시오. 주제 예약 인스턴스 구입(콘솔) (p. 246) 예약 인스턴스 구입(AWS CLI) (p. 247) 예약 인스턴스 구입(AWS SDK) (p. 248) 비용 검사 (p. 249) 예약 인스턴스 구입(콘솔) 콘솔에서 기존 예약 인스턴스를 확인하고 새 예약 인스턴스를 구입할 수 있습니다. 예약 인스턴스 구입 방법 1. https://aws.amazon.com으로 이동하여 Sign In to the Console(콘솔에 로그인)을 선택합니다. 2. Analytics에서 Elasticsearch 서비스를 선택합니다. 3. 예약 인스턴스를 선택합니다. 이 페이지에서는 기존 예약을 확인할 수 있습니다. 예약이 여러 개라면, 필터를 적용해 특정 예약을 쉽게 찾아 확인할 수 있습니다. Tip 예약 인스턴스 링크가 보이지 않으면 리전에서 도메인을 생성 (p. 10)합니다. 4. Purchase Reserved Instance(예약 인스턴스 구입)를 선택합니다. 5. Reservation Name(예약 이름)에 고유하고 서술적인 이름을 입력합니다. 6. 인스턴스 유형, 크기, 숫자를 선택합니다. 자세한 지침은 the section called Amazon ES 도메인 크기 조 정 (p. 134) 단원을 참조하십시오. 7. 사용 기간과 결제 옵션을 선택합니다. 8. 결제 세부 정보를 자세히 검토합니다. 246
예약 인스턴스 구입(AWS CLI) 9. 제출을 선택합니다. 10. 구입 요약을 자세히 검토합니다. 구입한 예약 인스턴스는 환불할 수 없습니다. 11. 구입을 선택합니다. 예약 인스턴스 구입(AWS CLI) AWS CLI에는 상품을 확인하고, 예약을 구매하거나 검토하는 명령이 있습니다. 다음 명령과 샘플 응답은 해 당 AWS 리전의 상품을 보여줍니다. aws es describe-reserved-elasticsearch-instance-offerings --region us-east-1 "ReservedElasticsearchInstanceOfferings": [ "FixedPrice": x, "ReservedElasticsearchInstanceOfferingId": "1a2a3a4a5-1a2a-3a4a-5a6a-1a2a3a4a5a6a", "RecurringCharges": [ "RecurringChargeAmount": y, "RecurringChargeFrequency": "Hourly" ], "UsagePrice": 0.0, "PaymentOption": "PARTIAL_UPFRONT", "Duration": 31536000, "ElasticsearchInstanceType": "m4.2xlarge.elasticsearch", "CurrencyCode": "USD" ] 각 반환 값에 대한 설명은 다음 표 단원을 참조하십시오. 필드 설명 FixedPrice 예약의 선결제 금액. ReservedElasticsearchInstanceOfferingId 상품 ID입니다. 상품을 예약하고 싶다면 이 값을 기 록해 두십시오. RecurringCharges 예약의 시간당 요금. UsagePrice 레거시 필드. Amazon ES의 경우, 이 값은 언제나 0 입니다. PaymentOption 선결제 없음, 부분 선결제 또는 전체 선결제. Duration 사용 기간(초): 31536000초는 1년입니다. 94608000초는 3년입니다. ElasticsearchInstanceType 예약의 인스턴스 유형. 각 인스턴스 유형에 할당 된 하드웨어 리소스를 자세히 알아보려면 Amazon Elasticsearch Service 요금을 참조하십시오. CurrencyCode FixedPrice와 RecurringChargeAmount의 통 화. 247
예약 인스턴스 구입(AWS SDK) 다음은 예약 구입 예제입니다. aws es purchase-reserved-elasticsearch-instance-offering --reserved-elasticsearch-instanceoffering-id 1a2a3a4a5-1a2a-3a4a-5a6a-1a2a3a4a5a6a --reservation-name my-reservation -instance-count 3 --region us-east-1 "ReservationName": "my-reservation", "ReservedElasticsearchInstanceId": "9a8a7a6a-5a4a-3a2a-1a0a-9a8a7a6a5a4a" 마지막으로, 다음 예제를 활용해 주어진 리전의 예약 목록을 확인하십시오. aws es describe-reserved-elasticsearch-instances --region us-east-1 "ReservedElasticsearchInstances": [ "FixedPrice": x, "ReservedElasticsearchInstanceOfferingId": "1a2a3a4a5-1a2a-3a4a-5a6a-1a2a3a4a5a6a", "ReservationName": "my-reservation", "PaymentOption": "PARTIAL_UPFRONT", "UsagePrice": 0.0, "ReservedElasticsearchInstanceId": "9a8a7a6a-5a4a-3a2a-1a0a-9a8a7a6a5a4a", "RecurringCharges": [ "RecurringChargeAmount": y, "RecurringChargeFrequency": "Hourly" ], "State": "payment-pending", "StartTime": 1522872571.229, "ElasticsearchInstanceCount": 3, "Duration": 31536000, "ElasticsearchInstanceType": "m4.2xlarge.elasticsearch", "CurrencyCode": "USD" ] Note StartTime은 Unix epoch 시간으로, 1970년 1월 1일 자정 UTC 이후 경과 시간(초)을 의미합니다. 예를 들어 epoch 시간 1522872571은 UTC로 2018년 4월 4일 20:09:31입니다. 온라인 변환기를 이 용할 수도 있습니다. 이전 예제에서 사용한 명령을 자세히 알아보려면 AWS CLI Command Reference 단원을 참조하십시오. 예약 인스턴스 구입(AWS SDK) AWS SDK(Android 및 ios SDK 제외)는 다음을 비롯하여 Amazon ES 구성 API 참조 (p. 181)에 정의된 모든 작업을 지원합니다. DescribeReservedElasticsearchInstanceOfferings PurchaseReservedElasticsearchInstance DescribeReservedElasticsearchInstances AWS SDK 설치 및 사용에 대한 자세한 내용은 AWS 소프트웨어 개발 키트 단원을 참조하십시오. 248
비용 검사 비용 검사 Cost Explorer는 지난 13개월의 지출 데이터를 확인할 수 있는 무료 도구입니다. 이 데이터를 분석하면 지출 추세를 확인하고 RI가 사용 사례에 적합한지 확인할 수 있습니다. 이미 RI가 있다면, 구매 옵션별로 그룹화한 다음 분할 상환 비용을 표시해 온디맨드 인스턴스에 지출한 비용과 비교해 볼 수 있습니다. 또한 예약을 최대 한 활용하도록 사용 예산을 설정할 수 있습니다. 자세한 내용은 AWS Billing and Cost Management 사용 설 명서의 Cost Explorer로 비용 분석을 참조하십시오. 249
1단계: 샘플 데이터 인덱싱 자습서: Amazon Elasticsearch Service를 사용하여 검색 애플리케이 션 생성 Amazon ES로 검색 애플리케이션을 생성하는 일반적인 방법은 웹 양식을 사용해 사용자 쿼리를 서버로 전송 하는 것입니다. 그런 다음 서버가 Elasticsearch API를 직접 호출하여 Amazon ES로 요청을 전송할 수 있도 록 권한을 부여하면 됩니다. 하지만 서버에 의존하지 않는 클라이언트 측 코드를 작성하려면 보안 및 성능 위험을 상쇄해야 합니다. Elasticsearch API에 대한 무서명 공개 액세스를 허용하는 것은 권장하지 않습니다. 사용자가 보호되지 않은 엔드포인트에 액세스하거나 너무 광범위한 쿼리(또는 너무 많은 쿼리)로 클러스터 성능에 악영향을 미칠 수 있습니다. 이 장에서는 Amazon API Gateway로 사용자를 AWS Lambda 및 Elasticsearch API의 하위 집합으로 제한하 여 API 게이트웨이에서 Amazon ES로 보내는 요청에 서명하도록 하는 솔루션을 소개합니다. Note 표준 API 게이트웨이 및 Lambda 요금 정책이 적용되지만, 이 자습서에서는 사용량이 제한적이므로 비용은 무시할만한 수준입니다. 1단계: 샘플 데이터 인덱싱 이들 단계의 사전 조건은 Amazon ES 도메인입니다. sample-movies.zip을 다운로드하여 압축을 해제하고 _bulk API를 사용해 5,000개 문서를 movies 인덱스에 추가합니다. POST https://search-my-domain.us-west-1.es.amazonaws.com/_bulk "index": "_index": "movies", "_type": "movie", "_id": "tt1979320" "fields":"directors":["ron Howard"],"release_date":"2013-09-02T00:00:00Z","rating":8.3,"genres": ["Action","Biography","Drama","Sport"],"image_url":"http://ia.media-imdb.com/images/ M/MV5BMTQyMDE0MTY0OV5BMl5BanBnXkFtZTcwMjI2OTI0OQ@@._V1_SX400_.jpg","plot":"A recreation of the merciless 1970s rivalry between Formula One rivals James Hunt and Niki Lauda.","title":"Rush","rank":2,"running_time_secs":7380,"actors":["Daniel Brühl","Chris Hemsworth","Olivia Wilde"],"year":2013"id":"tt1979320","type":"add" "index": "_index": "movies", "_type": "movie", "_id": "tt1951264" "fields":"directors":["francis Lawrence"],"release_date":"2013-11-11T00:00:00Z","genres": ["Action","Adventure","Sci-Fi","Thriller"],"image_url":"http://ia.media-imdb.com/images/ M/MV5BMTAyMjQ3OTAxMzNeQTJeQWpwZ15BbWU4MDU0NzA1MzAx._V1_SX400_.jpg","plot":"Katniss Everdeen and Peeta Mellark become targets of the Capitol after their victory in the 74th Hunger Games sparks a rebellion in the Districts of Panem.","title":"The Hunger Games: Catching Fire","rank":4,"running_time_secs":8760,"actors":["Jennifer Lawrence","Josh Hutcherson","Liam Hemsworth"],"year":2013"id":"tt1951264","type":"add"... 자세한 내용은 데이터 인덱싱 (p. 65) 단원을 참조하십시오. 250
2단계: API 생성 2단계: API 생성 API 게이트웨이를 사용해 보다 제한된 API를 생성하면 Elasticsearch _search API와의 상호 작용이 간소화 됩니다. 또한 Amazon Cognito 인증 및 요청 조절 같은 보안 기능을 활성화할 수도 있습니다. 다음 표에 따라 API를 생성하여 배포합니다. 설정 값 API 유형: 새 API 설정 API 이름: search-es-api 설명: Amazon Elasticsearch Service 도메인을 검색하기 위한 퍼블릭 API 엔드포인트 유형: 리전별 리소스 / HTTP 메서드 GET 메서드 요청 설정 권한 부여: 없음 요청 검사기: 쿼리 문자열 파라미터 및 헤더 검사 API 키 필요: false URL 쿼리 문자열 파라미터 이름: q 필수 여부: 예 통합 요청 통합 유형: Lambda 함수 Lambda 프록시 통합 사용: 예 Lambda 리전: us-west-1 Lambda 함수: search-es-lambda 호출자 자격 증명으로 호출: 아니요 자격 증명 캐시: 캐시 키에 호출자 자격 증명을 추가하지 않음 기본 제한 시간 사용: 예 단계 이름: search-es-api-test 기본 메서드 조절 조절 활성화: 예 속도: 1000 버스트: 500 251
3단계: Lambda 함수 생성 이러한 설정은 엔드포인트 루트에 대한 GET 요청(https://some-id.execute-api.uswest-1.amazonaws.com/search-es-api-test) 메서드 하나뿐인 API를 구성합니다. 이 요청에는 파라미터 하나(q), 즉 검색할 쿼리 문자열이 필요합니다. 메서드를 호출하면 요청이 Lambda로 전송되 어search-es-lambda 함수가 실행됩니다. 자세한 내용은 Amazon API Gateway에서 API 생성 및 Amazon API Gateway에서 API 배포를 참조하십시오. 3단계: Lambda 함수 생성 이 솔루션에서는 API 게이트웨이가 요청을 다음 Python 2.7 Lambda 함수로 전달합니다, 그러면 이 함수가 Amazon ES를 쿼리하고 결과를 반환합니다. import boto3 import json import requests from requests_aws4auth import AWS4Auth region = '' # For example, us-west-1 service = 'es' credentials = boto3.session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) host = '' # For example, search-mydomain-id.us-west-1.es.amazonaws.com index = 'movies' url = 'https://' + host + '/' + index + '/_search' # Lambda execution starts here def handler(event, context): # Put the user query into the query DSL for more accurate search results. # Note that certain fields are boosted (^). query = "size": 25, "query": "multi_match": "query": event['querystringparameters']['q'], "fields": ["fields.title^4", "fields.plot^2", "fields.actors", "fields.directors"] # ES 6.x requires an explicit Content-Type header headers = "Content-Type": "application/json" # Make the signed HTTP request r = requests.get(url, auth=awsauth, headers=headers, data=json.dumps(query)) # Create the response and add some extra content to support CORS response = "statuscode": 200, "headers": "Access-Control-Allow-Origin": '*' "isbase64encoded": False # Add the search results to the response response['body'] = r.text return response 252
4단계: 도메인 액세스 정책 수정 이 함수는 다음 트리거가 필요합니다. 트리거 API 배포 단계 보안 API 게이트웨이 search-es-api search-es-api-test 개방 이 샘플 함수는 외부 라이브러리를 사용하므로 코드가 작동하려면 배포 패키지를 생성하고 Lambda에 업로 드해야 합니다. Lambda 함수 배포 패키지 생성에 대한 자세한 내용은 AWS Lambda Developer Guide의 배 포 패키지 생성(Python) 및 이 설명서의 the section called Lambda 배포 패키지 만들기 (p. 79) 을 참조하십 시오. 4단계: 도메인 액세스 정책 수정 Amazon ES 도메인에서 Lambda 함수가 movies 인덱스에 GET 요청을 수행할 수 있도록 허용해야 합니다. 다음 정책은 search-es-role(lambda를 통해 생성됨에 movies 인덱스에 대한 액세스를 제공합니다. "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "AWS": "arn:aws:iam::123456789012:role/service-role/search-es-role" "Action": "es:eshttpget", "Resource": "arn:aws:es:us-west-1:123456789012:domain/web/movies/_search" ] 자세한 내용은 the section called 액세스 정책 구성 (p. 18) 단원을 참조하십시오. 5단계: 웹 애플리케이션 테스트 웹 애플리케이션을 테스트하려면 1. sample-site.zip을 다운로드하고 압축을 해제하여 자주 사용하는 텍스트 편집기에서 scripts/ search.js를 엽니다. 2. apigatewayendpoint 변수를 업데이트하여 API 게이트웨이 엔드포인트를 가리키도록 합니다. 엔드 포인트의 형식은 https://some-id.execute-api.us-west-1.amazonaws.com/search-esapi-test입니다. 3. index.html을 열고 thor, house 등 몇 가지 단어를 검색해 봅니다. 253
5단계: 웹 애플리케이션 테스트 254
다음 단계 다음 단계 이 장은 개념을 설명하기 위한 출발점에 불과합니다. 다음과 같은 수정을 고려할 수 있습니다. Amazon ES 도메인에 사용자의 데이터를 추가합니다. 사용자의 API에 메서드를 추가합니다. Lambda 함수에서 검색 쿼리를 수정하고 다른 필드를 부스트합니다. 결과 스타일을 다르게 지정하거나 search.js를 수정하여 사용자에게 다른 필드를 표시합니다. 255
자습서: Amazon Elasticsearch Service 및 Kibana로 고객 지원 통화 시각화 이 장에서는 몇 차례의 고객 지원 문의 전화를 받은 기업에서 이를 분석하려는 상황에 대해 자세히 알아봅니 다. 각 통화의 주제는 무엇입니까? 긍정적인 내용은 몇 통이었습니까? 부정적인 내용은 몇 통이었습니까? 관 리자가 이러한 통화의 녹취록을 검색하거나 검토하려면 어떻게 해야 합니까? 수작업 워크플로우에서는 직원들이 녹음된 내용을 듣고, 각 통화의 주제를 기록하고, 고객 상담 내용이 긍정 적이었는지 여부를 판단합니다. 따라서 이러한 프로세스는 대단히 노동 집약적입니다. 평균 통화 시간이 10분이라고 가정하면 직원 한 명이 하루에 48건의 통화밖에 들을 수 없습니다. 인간의 편견이 작용하지 않는다면 이들은 매우 정확한 데이터를 생산해 내겠지만, 그 데이터의 양은 최소한에 불과하여 통화의 주제와 고객이 만족했는지 여부에 대한 부울 값 정도를 얻을 수 있을 것입니다. 전체 녹취록 등 그 이상의 결과물이 필요한 경우에는 막대한 시간이 소요 됩니다. Amazon S3, Amazon Transcribe, Amazon Comprehend 및 Amazon Elasticsearch Service(Amazon ES)를 사용하면 비슷한 프로세스를 굉장히 적은 코드로 자동화하여 훨씬 더 많은 데이터를 얻을 수 있습니다. 예를 들면 전체 통화 녹취록, 녹취록의 키워드, 그리고 통화의 전반적인 "감정"(긍정적, 부정적, 중립적, 혼합)을 파 악할 수 있습니다. 그런 다음 Elasticsearch 및 Kibana를 사용하여 데이터를 검색하고 시각화할 수 있습니다. 이 연습 단계를 그대로 사용해도 되지만, JSON 문서를 Amazon ES에 인덱싱하기 전에 문서를 보강하는 방 법에 관한 아이디어를 얻는 것이 이 과정의 목표입니다. 추정 비용 일반적으로, 이 연습 단계를 수행하는 데 드는 비용은 2달러 미만입니다. 이 연습 단계에서는 다음 리소스를 사용합니다. 전송 및 저장량이 100MB 미만인 S3 버킷 자세한 내용은 Amazon S3 요금을 참조하십시오. 몇 시간 동안의 10GiB EBS 스토리지와 t2.medium 인스턴스 한 개가 있는 Amazon ES 도메인 자세한 내용은 Amazon Elasticsearch Service 요금을 참조하십시오. Amazon Transcribe 호출 여러 개 자세한 내용은 Amazon Transcribe 요금을 참조하십시오. Amazon Comprehend에 대한 자연어 처리 호출 여러 개 자세한 내용은 Amazon Comprehend 요금을 참조하십시오. 주제 1단계: 사전 조건 구성 (p. 257) 2단계: 샘플 코드 복사 (p. 257) (선택 사항) 3단계: 샘플 데이터 추가 (p. 260) 4단계: 데이터 분석 및 시각화 (p. 261) 5단계: 리소스 정리 및 다음 단계 (p. 265) 256
1단계: 사전 조건 구성 1단계: 사전 조건 구성 계속하려면 먼저 다음 리소스를 확보해야 합니다. 사전 조건 설명 Amazon S3 버킷 자세한 내용은 Amazon Simple Storage Service 시작 안내서의 버킷 생성을 참조하십시오. Amazon ES 도메인 데이터의 대상 주소입니다. 자세한 내용은 Amazon ES 도메인 생성 (p. 10)을 참조하십시오. 이러한 리소스가 아직 없는 경우 다음 AWS CLI 명령을 사용하여 만들 수 있습니다. aws s3 mb s3://my-transcribe-test --region us-west-2 aws es create-elasticsearch-domain --domain-name my-transcribe-test --elasticsearch-version 6.2 --elasticsearch-cluster-config InstanceType=t2.medium.elasticsearch,InstanceCount=1 --ebs-options EBSEnabled=true,VolumeType=standard,VolumeSize=10 --accesspolicies '"Version":"2012-10-17","Statement":["Effect":"Allow","Principal": "AWS":"arn:aws:iam::123456789012:root""Action":"es:*","Resource":"arn:aws:es:uswest-2:123456789012:domain/my-transcribe-test/*"]' --region us-west-2 Note 이 명령에서는 us-west-2 리전을 사용하지만, Amazon Comprehend에서 지원하는 아무 리전이나 사용해도 됩니다. 자세한 내용은 AWS General Reference 단원을 참조하십시오. 2단계: 샘플 코드 복사 1. 다음 샘플 코드를 복사하여 call-center.py라는 새 파일에 붙여 넣습니다. import boto3 import datetime import json import requests from requests_aws4auth import AWS4Auth import time import urllib2 # Variables to update audio_file_name = '' # For example, 000001.mp3 bucket_name = '' # For example, my-transcribe-test domain = '' # For example, https://search-my-transcribe-test-12345.uswest-2.es.amazonaws.com index = 'support-calls' type = 'call' es_region = 'us-west-2' # Upload audio file to S3. s3_client = boto3.client('s3') audio_file = open(audio_file_name, 'r') 257
2단계: 샘플 코드 복사 print('uploading ' + audio_file_name + '...') response = s3_client.put_object( Body=audio_file, Bucket=bucket_name, Key=audio_file_name, ) response = s3_client.get_bucket_location( Bucket=bucket_name ) bucket_region = response['locationconstraint'] # Build the URL to the audio file on S3. mp3_uri = 'https://s3-' + bucket_region + '.amazonaws.com/' + bucket_name + '/' + audio_file_name # Start transcription job. transcribe_client = boto3.client('transcribe') print('starting transcription job...') response = transcribe_client.start_transcription_job( TranscriptionJobName=audio_file_name, LanguageCode='en-US', MediaFormat='mp3', Media= 'MediaFileUri': mp3_uri Settings= 'ShowSpeakerLabels': True, 'MaxSpeakerLabels': 2 # assumes two people on a phone call ) # Wait for the transcription job to finish. print('waiting for job to complete...') while True: response = transcribe_client.get_transcription_job(transcriptionjobname=audio_file_name) if response['transcriptionjob']['transcriptionjobstatus'] in ['COMPLETED', 'FAILED']: break else: print('still waiting...') time.sleep(10) transcript_uri = response['transcriptionjob']['transcript']['transcriptfileuri'] # Open the JSON file, read it, and get the transcript. response = urllib2.urlopen(transcript_uri) raw_json = response.read() loaded_json = json.loads(raw_json) transcript = loaded_json['results']['transcripts'][0]['transcript'] # Send transcript to Comprehend for key phrases and sentiment. comprehend_client = boto3.client('comprehend') # If necessary, trim the transcript. # If the transcript is more than 5 KB, the Comprehend calls fail. if len(transcript) > 5000: trimmed_transcript = transcript[:5000] else: trimmed_transcript = transcript print('detecting key phrases...') response = comprehend_client.detect_key_phrases( 258
2단계: 샘플 코드 복사 ) Text=trimmed_transcript, LanguageCode='en' keywords = [] for keyword in response['keyphrases']: keywords.append(keyword['text']) print('detecting sentiment...') response = comprehend_client.detect_sentiment( Text=trimmed_transcript, LanguageCode='en' ) sentiment = response['sentiment'] # Build the Amazon Elasticsearch Service URL. id = audio_file_name.strip('.mp3') url = domain + '/' + index + '/' + type + '/' + id # Create the JSON document. json_document = 'transcript': transcript, 'keywords': keywords, 'sentiment': sentiment, 'timestamp': datetime.datetime.now().isoformat() # Provide all details necessary to sign the indexing request. credentials = boto3.session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, es_region, 'es', session_token=credentials.token) # Add explicit header for Elasticsearch 6.x. headers = 'Content-Type': 'application/json' # Index the document. print('indexing document...') response = requests.put(url, auth=awsauth, json=json_document, headers=headers) print(response) print(response.json()) 2. 처음 여섯 개의 변수를 업데이트합니다. 3. 다음 명령을 사용하여 필요한 패키지를 설치합니다. pip install boto3 pip install requests pip install requests_aws4auth 4. MP3를 call-center.py와 동일한 디렉터리에 넣고 스크립트를 실행합니다. 샘플 출력은 다음과 같습 니다. $ python call-center.py Uploading 000001.mp3... Starting transcription job... Waiting for job to complete... Still waiting... Still waiting... Still waiting... Still waiting... Still waiting... Still waiting... Still waiting... Detecting key phrases... Detecting sentiment... Indexing document... <Response [201]> 259
(선택 사항) 3단계: 샘플 데이터 추가 u'_type': u'call', u'_seq_no': 0, u'_shards': u'successful': 1, u'failed': 0, u'total': 2 u'_index': u'support-calls4', u'_version': 1, u'_primary_term': 1, u'result': u'created', u'_id': u'000001' call-center.py는 다음 몇 가지 작업을 수행합니다. 1. 이 스크립트는 S3 버킷에 오디오 파일(이 경우에는 MP3지만, Amazon Transcribe는 다른 형식도 지원함) 을 업로드합니다. 2. 오디오 파일의 URL을 Amazon Transcribe로 보낸 다음 녹취 작업이 완료되기를 기다립니다. 녹취 작업의 완료 시간은 오디오 파일의 길이에 따라 달라집니다. 몇 초가 아니라 몇 분이 걸립니다. Tip 녹취의 품질을 높이기 위해 Amazon Transcribe용 사용자 지정 어휘를 구성할 수 있습니다. 3. 녹취 작업이 완료되면 스크립트가 녹취록을 추출하고, 5,000자로 정리한 다음 키워드 및 감정 분석을 위해 Amazon Comprehend로 보냅니다. 4. 마지막으로 이 스크립트는 전체 녹취록, 키워드, 감정 분석, 현재 타임스탬프 등을 JSON 문서에 추가하고 Amazon ES에서 이를 인덱싱합니다. Tip LibriVox의 퍼블릭 도메인 오디오북을 테스트에 이용할 수 있습니다. (선택 사항) 3단계: 샘플 데이터 추가 다들 그렇듯이 쉽게 이용할 수 있는 통화 녹음이 많지 않다면, call-center.py에서 생성되는 것과 비슷한 sample-calls.zip의 샘플 문서를 인덱싱 (p. 65)할 수 있습니다. 1. bulk-helper.py이라는 이름의 파일을 만듭니다. import boto3 from elasticsearch import Elasticsearch, RequestsHttpConnection import json from requests_aws4auth import AWS4Auth host = '' # For example, my-test-domain.us-west-2.es.amazonaws.com region = '' # For example, us-west-2 service = 'es' bulk_file = open('sample-calls.bulk', 'r').read() credentials = boto3.session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) es = Elasticsearch( hosts = ['host': host, 'port': 443], http_auth = awsauth, use_ssl = True, verify_certs = True, connection_class = RequestsHttpConnection ) response = es.bulk(bulk_file) print(json.dumps(response, indent=2, sort_keys=true)) 260
4단계: 데이터 분석 및 시각화 Note 이 코드 샘플은 Python 2를 사용하므로 Python 3을 수정해야 할 수도 있습니다. 2. host 및 region의 처음 두 변수를 업데이트합니다. 3. 다음 명령을 사용하여 필요한 패키지를 설치합니다. pip install elasticsearch 4. sample-calls.zip을 다운로드하여 압축을 풉니다. 5. sample-calls.bulk를 bulk-helper.py와 동일한 디렉터리에 넣고 도움말을 실행합니다. 샘플 출 력은 다음과 같습니다. $ python bulk-helper.py "errors": false, "items": [ "index": "_id": "1", "_index": "test-data", "_primary_term": 1, "_seq_no": 42, "_shards": "failed": 0, "successful": 1, "total": 2 "_type": "call", "_version": 9, "result": "updated", "status": 200... ], "took": 27 4단계: 데이터 분석 및 시각화 이제 Amazon ES에 데이터가 있으므로 Kibana를 사용하여 시각화할 수 있습니다. 1. https://search-domain.region.es.amazonaws.com/_plugin/kibana으로 이동합니다. 2. Kibana를 사용하려면 인덱스 패턴이 있어야 합니다. Kibana는 인덱스 패턴을 사용하여 분석 범위를 하 나 이상의 인덱스로 좁혀 줍니다. call-center.py 로 생성된 support-calls 인덱스와 일치하는지 비교해 보기 위해 support* 인덱스 패턴을 정의한 다음, 다음 단계를 선택합니다. 3. Time Filter field name(시간 필터 필드 이름)에서 타임스탬프를 선택합니다. 4. 이제 시각화를 생성할 수 있습니다. 시각화를 선택한 다음, 새 시각화를 추가합니다. 5. 파이 차트와 support* 인덱스 패턴을 선택합니다. 6. 시각화의 기본값은 기본이므로 Split Slices(조각 분할)를 선택하여 보다 흥미로운 시각화를 만듭니다. Aggregation에서 Terms를 선택합니다. 필드에서 sentiment.keyword를 선택합니다. 그런 다음 변경 사항 적용 및 저장을 선택합니다. 261
4단계: 데이터 분석 및 시각화 7. 시각화 페이지로 돌아가서 다른 시각화를 추가합니다. 이번에는 가로 막대 차트를 선택합니다. 8. Split Series(계열 분할)를 선택합니다. Aggregation에서 Terms를 선택합니다. 필드에서 keywords.keyword를 선택하고 크기를 20으로 변경합 니다. 그런 다음 변경 사항 적용 및 저장을 선택합니다. 262
4단계: 데이터 분석 및 시각화 9. 시각화 페이지로 돌아가서 마지막 시각화인 세로 막대 차트를 추가합니다. 10. Split Series(계열 분할)를 선택합니다. 집계에서 Date Histogram(날짜 히스토그램)을 선택합니다. 필 드에서 타임스탬프를 선택하고 간격을 매일로 변경합니다. 11. Metrics & Axes(지표 및 축)를 선택하고 Mode(모드)를 normal(정상)로 변경합니다. 12. 변경 사항 적용 및 저장을 선택합니다. 263
4단계: 데이터 분석 및 시각화 13. 이제 시각화 세 개를 Kibana 대시보드에 추가할 수 있습니다. 대시보드를 선택하고, 대시보드를 만들고, 시각화를 추가합니다. 264
5단계: 리소스 정리 및 다음 단계 5단계: 리소스 정리 및 다음 단계 불필요한 요금 부과를 피하려면 S3 버킷과 Amazon ES 도메인을 삭제하십시오. 자세한 내용은 Amazon Simple Storage Service 개발자 가이드의 버킷 삭제와 이 설명서의 Amazon ES 도메인 삭제 (p. 9) 단원을 참 조하십시오. 녹취록은 MP3 파일보다 필요한 디스크 공간이 훨씬 적습니다. MP3 보관 기간을 줄일 수 있습니다. 다시 말 해, 3개월의 통화 녹음이 1개월로 줄어들기 때문에 몇 년치 녹취록을 보관하고도 스토리지 비용은 절약됩니 다. 또한 AWS Step Functions 및 Lambda를 사용하여 녹취 프로세스를 자동화하거나, 인덱싱하기 전에 메타데 이터를 더 추가하거나, 사용 사례에 정확히 들어맞는 보다 복잡한 시각화를 만들어 낼 수도 있습니다. 265