안녕하세요 서후아빠입니다. ^_^
이번 세션은 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*) 선택 > 우측에 히트 카운터 확인됨
'Database' 카테고리의 다른 글
[실습] Amazon Managed Workflows for Apache (MWAA) 구성하기 (0) | 2023.03.13 |
---|---|
[실습] RDS 생성하기 (MySQL) (0) | 2022.08.08 |
[이론] AWS Database 기본 개념 (0) | 2022.07.06 |
[Tip] AWS DMS endpoint 실패 조치하기 (0) | 2022.07.06 |
[Tip] Amazon RDS 서브넷 그룹 (Subnet groups) 생성 Error 조치 방법 알아보기 (0) | 2022.07.01 |