S3 또는 다른 데이터 소스에서 저장된 데이터를 Opensearch 워크 벤치에서 간단하게 조회하는 방법을 가이드합니다.
배경
Amazon S3에 저장된 데이터를 효율적으로 활용하기 위해, OpenSearch에서 직접 쿼리를 수행할 수 있는 방법을 소개합니다. 이는 특히 로그 파일을 저장하고 조회하거나, 사용자 정보와 같은 데이터를 S3에 보관하고 필요할 때 검색하는 사용 사례에 적합합니다. 또한 VPC, CloudTrail, AWS WAF와 같은 AWS 서비스의 로그 데이터도 효과적으로 처리할 수 있어, 보안 모니터링과 인프라 관리에도 유용하게 활용될 수 있습니다. 이러한 직접 쿼리 기능을 통해 S3와 OpenSearch 간의 원활한 데이터 접근과 분석이 가능하며, 별도의 데이터 이동이나 변환 과정 없이 효율적인 데이터 조회가 가능합니다.
전제조건
[+] OpenSearch Service에서 Amazon S3 데이터 소스 통합 생성 - 사전 조건
- OpenSearch 도메인 요구사항 : 버전 2.13 이상의 OpenSearch 도메인 필수, 직접 쿼리 통합 설정을 위한 기본 인프라 구성이 필요합니다.
- S3 버킷 구성 : 최소 2개의 S3 버킷 필요, 데이터 저장용 버킷, 쿼리 체크포인트 저장용 버킷 (참고: 현재 기사에서는 하나의 S3 버킷 만 사용)
- AWS Glue 테이블 설정 (선택사항) : S3 데이터를 가리키는 AWS Glue Data Catalog 테이블 필요, OpenSearch Query Workbench를 통한 테이블 생성
- IAM 역할 구성 (선택사항) : 데이터 소스 접근 권한 관리를 위한 IAM 역할, 수동 생성 또는 OpenSearch Service의 자동 생성 옵션 제공, 필요한 권한을 포함한 역할 정책 설정 필요
Opensearch 에서 S3 데이터를 쿼리하기 위한 방법
1. 예시데이터 생성
- 아래는 예시 데이터로 사용자들의 이름, 이메일, 나이, 회사를 컬럼으로 만든 예시 데이터 입니다.
- 해당 예시데이터를 user_data.txt 파일로 저장한뒤 추후의 만들 S3 버킷에 저장합니다.
{"name":"John Smith","email":"john.smith@gmail.com","age":32,"company":"Tesla Inc"}
{"name":"Sarah Johnson","email":"sarah.j@yahoo.com","age":28,"company":"Microsoft"}
{"name":"Mike Wilson","email":"mike.wilson@outlook.com","age":45,"company":"Apple"}
{"name":"Emma Davis","email":"emma.d@hotmail.com","age":29,"company":"Google"}
{"name":"James Brown","email":"james.brown@amazon.com","age":37,"company":"Amazon"}
{"name":"Lisa Chen","email":"lisa.chen@meta.com","age":31,"company":"Meta"}
{"name":"Robert Kim","email":"robert.k@netflix.com","age":42,"company":"Netflix"}
{"name":"Maria Garcia","email":"maria.g@intel.com","age":35,"company":"Intel"}
{"name":"David Lee","email":"david.lee@oracle.com","age":39,"company":"Oracle"}
{"name":"Amy Wong","email":"amy.w@ibm.com","age":33,"company":"IBM"}
2. AWS S3 버킷 생성
- 데이터 저장용 및 쿼리 체크포인트 저장 겸용 AWS S3 버킷 하나 생성합니다.
- 버킷 생성후에 이전 단계에서 만든 txt 파일을 넣습니다.

3. Glue 데이터 베이스 생성
- AWS Glue > Databases > Tables에서 추후 사용할 Database를 생성합니다.
- Location에 위에서 생성한 S3 버킷으로 위치를 지정해주어야 합니다.

4. Opensearch 데이터 소스 구성
- Opensearch 도메인 > 연결 - 신규 > 데이터 소스 구성을 클릭합니다.
- 기본적인 설정을 유지하고 [체크포인트 S3 버킷] 과 "모든 기존 테이블과 새 테이블에 대한 액세스 권한 부여", "모든 기존 테이블과 새 테이블에 대한 액세스 권한 부여"를 클릭합니다.

5. Opensearch 쿼리 워크벤치 테이블 생성
- Opensearch 도메인에 접속하여 Query Workbench에 접속합니다.
- 아래와 같은 쿼리를 이용하여 Spark 테이블 을 생성합니다.
(참고: repost_datasource(Opensearch에서 생성한 데이터 소스명), repost_database(glue에서 생성한 데이터 베이스명),repost_table (새롭게 생성할 테이블명))
CREATE TABLE repost_datasource.repost_database.repost_table (
name STRING,
email STRING,
age INT,
company STRING
)
USING json
LOCATION "s3://repost-s3-opensearch"
- 테이블이 정상적으로 생성되면 아래의 스크린샷과 같이 테이블을 확인할 수 있습니다.
(참고 : OpenSearch Service에서 Amazon S3로의 직접 쿼리는 AWS Glue Data Catalog내의 Spark 테이블을 사용합니다.)[1]

6. Opensearch 테이블 조회
- SQL의 Select 명령어를 통해 repost_table의 table을 조회할 수 있습니다.
SELECT * FROM repost_database.repost_table;

참고 자료
[1] OpenSearch Dashboards에서 S3 데이터 소스 구성 및 쿼리
https://docs.aws.amazon.com/ko_kr/opensearch-service/latest/developerguide/direct-query-s3-configure.html
[+] Amazon S3와 Amazon OpenSearch Service zero-ETL 통합 발표 (미리 보기)
https://aws.amazon.com/ko/blogs/korea/amazon-opensearch-service-zero-etl-integration-with-amazon-s3-preview/