본문 바로가기

Database

[이른/실습] Amazon OpenSearch Service-1편(생성)

반응형

안녕하세요 서후아빠입니다. ^_^

이번 세션은 Amazon OpenSearch Service에 대해서 업무적으로 필요한 최소한의 개념과 사용방법에 대해서 정리해 보았습니다. 그리고 콘솔에서 지원되지 않는 스냅샷과 복원까지 알아보도록 하겠습니다. 


개요

OpenSearch는 기존에 ElasticSearch로 알려진 서비스와 호환되는 서비스입니다. 원래는 AWS에서 ElasticSearch로 서비스를 하던 중, 양사간 분쟁이 발생함에 따라 AWS에서 OpenSearch로 이름을 바꾸고 서비스를 유지하고 있으며, 기능은 ElasticSearch에 비해 줄어들었다는 이야기가 있습니다. 

OpenSearch는 오픈 소스 기반으로 검색 및 분석에 특화된 서비스이며, 주로 애플리케이션 모니터링과 로그 분석 및 시각화에 사용되고 있습니다. 사용되는 용어는 아래와 같습니다.

index document filed
테이블과 유사한 개념
문서가 저장되는 저장소
데이터와 유사한 개념 열과 유사한 개념

1단계 : Opensearch domain 생성

Amazon OpenSearch Service > Domains > Create domain

Domain name Custom endpoint Deployment type Auto-Tune Maintenance window
my-opensearch Disabled (or Enable) Type : Development and testing
Version : OpenSearch 최신 버전 선택
Enable compatibility mode (호환) : Disabled (or Enable)
Enable (or Disabled) Disabled (or Enable)
Deployment type
 - Production, Development and testing, Custom 중 선택
 - Version : OpenSearch, Elasticsearch 중 선택
Maintenance window Enable 예시(매주 일요일 00시 동작, 2시간동안)
 - Windows duration : 2hours
 - Repeats (반복)
   1) Every week 방식 : Monday, 02:00 Start (UTC)
   2) Custom 방식 : 0 2 * * 1
Data nodes  Dedicated master nodes Snapshot configuration Network Fine-grained access control 
 Availability Zones : 1-AZ
Instance type : t3.small.search
Number of nodes : 1
Storage type : EBS 
EBS volume type : gp2
EBS storage size per node(10~100 GiB) : 10
Disabled Hourly, 00:00 UTC (고정값) Public access 
(or VPC access)
Enable (or Disabled)
Master user : Create master user
Master username : myuser
Master password : PassW0rd!
Data nodes
 -  Availability Zones : 3-AZ, 2-AZ, 1-AZ 중 선택, 1-AZ는 Development 경우 활성화
 - Number of nodes : 3-AZ는 3~10 범위 입력, 2-AZ는 2~10 범위 입력
 - gp3 : Total Provisioned IOPS(3000~11800), Total Provisioned Throughput(125~260MiB/s) 옵션 설정 가능
Dedicated master nodes 
 - Development 경우는 기본 비활성화이며, 필요 시 활성화 가능
 - Instance type 선택, Number of master nodes(3 or 5) 선택
Network : 간단한 테스트 경우는 Public으로 선택, 운영 경우는 보안을 위해서 VPC access 선택 
 - VPC access 경우 : VPC, Subnets, Security groups 선택 
Fine-grained access control  Enable 경우 : 새 마스터 사용자 생성해도 기존 마스터 사용자는 유지, Domain access policy를 공개 액세스 허용일 경우 활성화 필수이며 한번 활성화 후에는 비활성화 불가능
 - Master user : Create master user, Set IAM ARN as master user 중 선택
   1) master user 경우 : Master username, Master password 입력
   2) Set IAM ARN as master user 경우 : IAM ARN 입력 (ex : arn:aws:iam::AWS계정12자리:role/아이디)
SAML authentication Amazon Cognito authentication Access policy Encryption   Advanced cluster settings(옵션) 
Disabled (or Enable) Disabled (or Enable) Domain access policy : Only use fine-grained access control Encryption : Require HTTPS for all traffic to the domain만 체크
Choose an AWS KMS key : Use AWS owned key
Fielddata cache allocation (0~100) : 20 
Max clause count (1~2147483647) : 1024 
Access policy의 Domain access policy 
 - Only use fine-grained access control : 공개 액세스 허용, 간단한 테스트 경우 선택    
 - Do not set domain level access policy : 모든 요청 거부
 - Configure domain level access policy : JSON으로 정책 만들어 사용 (아래 예시 참조)
Encryption
 - Require HTTPS for all traffic to the domain : 모든 트래픽 HTTPS 처리여부
 - Node-to-node encryption : 노드간 암호화 처리여부
 - Enable encryption of data at rest : 미사용 데이터 암호화 처리여부
# Configure domain(OnenSearch 도메인 : my-opensearch) level access policy 예시

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::AWS계정12자리:user/IAM사용자계정ID"
        ]
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:ap-northeast-2:AWS계정12자리:domain/my-opensearch/*"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:ap-northeast-2:AWS계정12자리:domain/my-opensearch/*"
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "100.100.1.1",
            "100.100.1.2"
          ]  
        }
      }  
    }
  ]
}

Amazon OpenSearch Service > Domains > my-opensearch 선택 > General information (tab) > OpenSearch Dashboards URL 및 Domain endpoint 확인 > OpenSearch Dashboards URL 클릭 > Username(myuser), Password(PassW0rd!) > Select your tenant (Private) > Confirm 

도메인 생성까지 대략 20분 이상 소요됩니다. 
OpenSearch Dashboards URL 예시 : https://search-my-opensearch-sobajscwvcol4kyhzuvvhmse5i.ap-northeast-2.es.amazonaws.com/_dashboards
  ※ ElasticSearch로 생성한 경우는 Kibana URL를 제공합니다. 
Domain endpoint 예시 : https://search-my-opensearch-sobajscwvcol4kyhzuvvhmse5i.ap-northeast-2.es.amazonaws.com

2단계 : Opensearch에 Document(=데이터) 업로드

1. curl을 이용한 document 업로드 : 직접 ID 지정, 소량 Document 업로드 시 적합

# Linux계열 EC2에서 아래 명령어로 Document 업로드 수행
$ curl -XPUT -u 'myuser:PassW0rd!' 'https://search-my-opensearch-sobajscwvcol4kyhzuvvhmse5i.ap-northeast-2.es.amazonaws.com/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'

{"_index":"movies","_id":"1","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}

2. opensearch.js 라이브러리를 이용한 document 업로드 : 대량 Document 업로드 시 적합, 방법은 구글링 참조

3단계 : Document 검색

1. curl을 이용한 document 검색

# Linux계열 EC2에서 아래 명령어로 Document 검색 
$ curl -XGET -u 'myuser:PassW0rd!' 'https://search-my-opensearch-sobajscwvcol4kyhzuvvhmse5i.ap-northeast-2.es.amazonaws.com/movies/_search?q=mars&pretty=true'

{
  "took" : 9,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "movies",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "director" : "Burton, Tim",
          "genre" : [
            "Comedy",
            "Sci-Fi"
          ],
          "year" : 1996,
          "actor" : [
            "Jack Nicholson",
            "Pierce Brosnan",
            "Sarah Jessica Parker"
          ],
          "title" : "Mars Attacks!"
        }
      }
    ]
  }
}

2. OpenSearch DashBoard 이용한 document 검색

OpenSearch Dashboards URL 클릭 > Username(myuser), Password(PassW0rd!)

Management > Stack Management > Index pattern > Create index pattern > Index pattern name (my) > Next step > Create index pattern 

OpenSearch DashBoard > Discover > 좌측 메뉴에서 앞에서 생성한 패턴(my*) 선택 > 우측에 히트 카운터 확인됨

반응형