Amazon OpenSearch Service
- Amazon ElasticSearch의 후속작
- DynamoDB에서 데이터베이스의 기본키나 인덱스만을 이용해 쿼리할 수 있다.
- 그러나 OpenSearch를 사용하면 모든 필드를 검색할 수 있다.
부분 매칭이여도 가능.
- OpenSearch를 이용해 애플리케이션에 검색 기능을 제공하는 방식을 주로 사용한다.
- OpenSearch를 다른 데이터베이스를 보완해서 사용하게 된다.
- OpenSearch는 검색에 사용되지만, 분석적 쿼리에도 사용한다.
- OpenSearch 클러스터 프로비저닝 2가지 모드
- 관리형 클러스터 모드
실제 물리적인 인스턴스가 프로비저닝된다.
- 서버리스 클러스터 모드
스케일링, 운영 모두 AWS에서 관리한다.
- OpenSearch는 자체적인 쿼리 언어가 있다.
그러나 플러그인으로 SQL를 활성화할 수 있다.
- Kinesis Data Firehose, AWS IoT, CloudWatch Logs, 커스텀 빌드 앱 등 다양한 곳에서 데이터를 받을 수 있다.
- 보안: Cognito, IAM 등을 통해 제공됨.
주소 암호화와 전송중 암호화 지원
- OpenSearch 대시보드를 이용해 OpenSearch 데이터를 시각화 할 수 있다.
OpenSearch 사용 패턴
- DynamoDB가 있고 거기에 데이터가 담길 때
- OpenSearch는 검색 능력을 제공하고, 데이터의 기본 출처는 DynamoDB테이블

- 사용자는 데이터를 삽입/삭제/업데이트를 한다.
- 모든 스트림을 DynamoDB Sream에 전송한다.
- 그럼 람다 함수가 그걸 잡아서 실시간으로 그 데이터를 Amazon OpenSearch에 삽입한다.
- 이 과정을 통해 애플리케이션은 특정한 항목을 검색할 능력을 가지게 된다.
ex) 항목 이름으로 부분 검색을 하거나 항목 ID를 찾을 수 있게 된다.
항목 ID를 획득하면 DynamoDB를 호출해서 실제로 그 항목을 DynamoDB 테이블에서 받게된다.
- CloudWtch Logs를 OpenSearch에 주입

- (1) CloudWatch Logs Subscription Filter를 사용해 데이터를 실시간으로 AWS가 관리하는 람다 함수에 전송
- 람다 함수는 실시간으로 모든 데이터를 OpenSearch로 전송
- (2) 또는 CloudWatch Logs를 사용하고 이어서 Subscription Filter를 사용할수도 있다.
- 이 경우엔 Kinesis Data Firehose가 Subscription Filter로부터 읽을 수 있고, Kinesis Data Firehose는 실시간의 가깝게 데이터가 OpenSearch에 삽입된다.
- Kinesis를 사용하는 다른 패턴

- Kinesis Data Streams를 OpenSearch에 전송하는 데는 두 가지 전량이 있다.
- (1) Kinesis Data Firehose를 사용하는 방법
- 근 실시간 타입의 서비스
- 람다 함수를 이용해 약간의 데이터 변환후 데이터를 OpenSearch로 전송 가능
- (2) Kinesis Data Streams를 사용하는 방법
- 실시간으로 데이터 스트림을 읽는 람다 함수를 만든다.
- 그 다음 커스텀 코드를 작성해 람다 함수가 실시간으로 OpenSearch에 기록할 수 있도록 한다.
Amazon EMR(Elastic MapReduce)
- AWS에서 빅 데이터 작업을 위한 하둡 클러스터 생성에 사용된다.
하둡 클러스터 생성 = Amazon EMR
- 방대한 양의 데이터를 분석/처리
- 하둡 클러스터는 프로비저닝해야 하고, 수백 개의 EC2 인스턴스로 구성될 수 있다.
- EMR을 사용하는 이유
- EMR은 빅 데이터 전문가가 사용하는 여러 도구와 함께 제공된다.
- Apache Spark, HBase, Presto, Apache Flink 등...
- Amazon EMR은 위 서비스에 관한 프로비저닝과 구성을 대신 처리해 준다.
- 전체 클러스터를 자동으로 확장 가능
- 스팟 인스턴스와 통합되어 할인 혜택을 받을 수도 있다.
- 사용 사례: 데이터 처리/머신러닝/웹 인덱싱/빅 데이터 작업 등..
이 모든 작업은 하둡, Spark, HBase, Preso, Flink와 같은 빅 데이터 관련 기술을 사용한다.
EMR Node types & purchasing
- EMR은 EC2 인스턴스의 클러스터로 구성되며 여러 노드 유형이 있다.
- 마스터 노드(장기 실행)
- 클러스터를 관리
- 다른 모든 노드의 상태를 조정
- 코어 노드(장기 실행)
- 태스크를 실행
- 데이터 저장
- 테스크 노드(선택사항)
- 테스크만 실행
- 보통 스팟 인스턴스를 사용
- EMR의 구매 옵션(Purchasing)
- 온디맨드 EC2 인스턴스 유형
- 신뢰할 수 있다.
- 예측 가능한 유형의 워크로드를 얻음
- 절대 종료되지 않는다.
- 예약 인스턴스를 사용하는 경우(최소 1년 사용)
- 비용을 크게 절약
- EMR이 자동으로 예약 인스턴스를 사용한다.
- 즉, 예약 인스턴스는 장기 실행해야 하는 마스터 노드와 코어 노드에 적합하다.
- 스팟 인스턴스
- 종료될 수 있어 신뢰도가 떨어지지만 저렴하다.
- 스팟 인스턴스는 태스크 노드에 적합하다.
- EMR에서 배포할 때는 장기 실행 클러스터에서 예약 인스턴스를 사용하거나 임시 클러스터를 사용해 특정 작업을 수행하고 분석 완료 후에 삭제할 수 있다.
Amazon QuickSight
- QuickSight: 서버리스 머신 러닝 기반 비즈니스 인텔리전스 서비스
비즈니스 인텔리전스이기 때문에 대화형 대시보드를 생성한다.
- 대시보드를 생성하고 소유한 데이터 소스와 연결할 수 있다.

- 시각화
- 빠름
- 오토 스케일링 가능
- 웹사이트 임베드 가능
- 세션당 비용 지불
- 사용 사례: 비즈니스 분석/시각화 구현/시각화된 정보를 통한 임시 분석 수행/데이터를 활용한 비즈니스 인사이트 획득
- RDS, Aurora, Athena, Redshift, S3 등 다양한 데이터 소스에 연결 가능
- SPICE 엔진
- 인 메모리 연산 엔진
QuickSight로 데이터를 직접 가져올 때 사용 된다.
단, QuickSight가 다른 DB에 연결되어 있을때는 작동하지 않는다.
- QuickSight는 사용자 수준의 기능을 제공
QuickSight의 엔터프라이즈 에디션에서는 액세스 권한이 없는 사용자에게 일부 열이 표시되지 않도록 열 수준 보안(CLS)을 설정할 수 있다.
QuickSight Integrations(통합)

QuickSight - 대시보드 & 분석 & 사용자
- 스탠다드 버전
- 사용자 정의 가능
- 엔터프라이즈 버전
- 사용자 정의 가능
- 그룹 사용 가능
- 사용자와 그룹을 정의한 후 대시보드를 생성하면 된다.
대시보드는 읽기 전용 스냅샷이고 분석 결과를 공유 할 수 있다.
또한 분석의 구성을 저장한다.
분석을 위해 설정한 필터 또는 매개변수 제어, 정렬 옵션 등이 저장되어 대시보드에 표시된다.
- 분석에 더 충실하고, 특정 사용자/그룹과 분석 결과나 대시보드를 공유 가능.
- 일단 대시보드부터 게시해야 한다.
- 액세스 권한이 있는 사용자는 기본 데이터를 볼 수도 있다.
- 즉, QuickSight에서는 분석 및 대시보드를 생성해야 하고, 특정 사용자나 그룹과 공유할 수 있다.
AWS Glue
- Glue: 추출/변환 로드 서비스 관리(ETL서비스라고도 한다.)
- 분석을 위해 데이터를 준비하고 변환하는데 유용
- 완전 서버리스 서비스

- 예시1) S3 버킷이나 RDS에 있는 데이터를 Redshift(데이터 웨어하우스)에 로드할 경우
- Glue를 사용해 추출한 다음 일부 데이터를 필터링하거나 열을 추가하는 등 데이터 변형 가능
- 이후 최종 출력 데이터를 Redshift 데이터 웨어하우스에 로드 한다.
- 이는 Glue ETL 서비스 내에서 모든 작업이 이뤄진다.

- 예시2) 데이터를 Parquet 형식으로 변환
- Parquet은 열 기반의 데이터 형식이기 떄문에 Athena같은 서비스와 함께 사용하면 효과적이다.
- S3 버킷에 CSV 형식으로 된 데이터를 삽입한다고 보면 Glue ETL 서비스를 사용해 CSV 파일을 가져와 Glue 서비스 내에서 Parquet 형식으로 변환한 다음 출력 S3 버킷으로 데이터를 보낸다.
- Parquet 형식으로 변환하면 Athena가 파일을 훨씬 더 잘 분석한다.
- 이 전체 과정을 자동화할 수도 있는데, 파일이 S3 버킷에 삽입될 때마다 lambda 함수로 이벤트 알림을 보내 Glue ETL 작업을 트리거할 수 있다.(람다 대신 EventBridge 사용 가능)
Glue Data Catalog: 데이터 세트의 카탈로그

- Glue Data Catalogsms Glue 데이터 크롤러를 실행해 S3, RDS, DynamoDB, 호환 가능한 온프레미스 JDBC 데이터베이스에 연결한다.
- Glue 데이터 크롤러는 데이터베이스를 크롤링하고, 데이터베이스의 테이블 열, 데이터 형식 등의 모든 메타 데이터를 Glue 데이터 카탈로그에 기록한다.
- 따라서 ETL을 수행하기 위한 Glue 작업에 활용될 모든 데이터베이스, 테이블 메타 데이터를 갖게 된다.
- Athena는 데이터와 스키마를 검색할 때 백그라운드에서 Glue Data Catalog를 활용한다.
- Redshift Spectrum과 EMR도 마찬가지이다.
- Glue Data Catalog서비스는 다른 여러 AWS 서비스의 중심.
Glue - 알아야 할 기능
- Glue 작업 북마크
- 새 ETL 작업을 실행할 때 이전 데이터의 재처리를 방지한다.
- Glue Elastic Views
- SQL을 사용해 여러 데이터 스토어의 데이터를 결합하고 복제한다.
- RDS, Aurora, S3에 걸친 뷰를 생성
- 커스텀 코드를 지원하지 않는다.
- Glue가 원본 데이터의 변경 사항을 모니터링한다.
- 서버리스 서비스
- 여러 데이터 스토어에 분산된 구체화된 뷰인 가상 테이블을 생성할 수 있다.
- Glue Data Brew
- 사전 빌드된 변환을 사용해 데이터를 정리하고 정규화한다.
- Glue Studio
- Glue에서 ETL 작업을 생성, 실행 및 모니터링하는 GUI이다.
- Glue Streaming ETL
- Apache Spark Structured Streaming위에 빌드되고, ETL 작업을 배치 작업이 아니라 스트리밍 작업으로 실행할 수 있다.
- Kinesis Data Streaming Kafka 또는 AWS의 관리형 Kafka(MSK)에서 Glue 스트리밍 ETL을 사용해 데이터를 읽을 수 있다.
- Lake Formation: 데이터 레이크 생성을 돕는다.
데이터 레이크: 데이터 분석을 위해 모든 데이터를 한곳으로 모아 주는 중앙 집중식 저장소
즉, Lake Formation은 데이터 레이크 생성을 수월하게 해 주는 완전 관리형 서비스이다.
- Lake Formation을 사용하면 수개월 걸릴 작업을 며칠 만에 완료할 수 있다.
- Lake Formation은 데이터 레이크에서의 데이터 검색, 정제, 변환, 주입을 돕는다.
- 데이터 수집, 정제나 카탈로깅, 복제 같은 복잡한 수작업을 자동화하고, 기계학습 변환 기능으로 중복제거를 수행한다.
- 데이터 레이크에서는 정형 데이터와 비정형 데이터 소스를 결합할 수 있다.
- 블루프린트를 제공
내장된 블루프린트는 데이터를 데이터 레이크로 이전(migrate)하는 것을 도와준다.
S3, RDS, 온프레미스에서 실행되는 관계형 데이터베이스, NoSQL 데이터베이스 등에서 지원된다.
- Lake Formation을 설정하는 이유
- 모든 데이터를 한곳에서 처리하는 것 외에도 애플리케이션에서 행, 열 수준의 세분화된 액세스 제어를 할 수 있기 때문이다.
- Lake Formation에 연결된 애플리케이션에서는 세분화된 액세스 제어가 가능하다.
- Lake Formation 작동 방법
- AWS Glue 위에 빌드되는 계층이지만 Glue와 직접 상호 작용하지 않는다.

- Lake Formation S3에 저장되는 데이터 레이크의 생성을 돕는다
- 데이터 소스로는 S3, RDS, Aurora, SQL, NoSQL같은 온프레미스 데이터베이스가 있다.
- Lake Formation의 블루프린트를 통해 데이터를 주입한다.
- Lake Formation에는 소스 크롤러와 ETL 및 데이터 준비 도구, 데이터 카탈로깅 도구가 포함된다. -> Glue의 기본 서비스에 해당
- 데이터 레이크의 데이터를 보호하는 보안 설정과 액세스 제어도 포함된다.
- Lake Formation을 활용하는 서비스는 Athena, Redshift, EMR, Apache Spark 프레임워크 같은 분석 도구가 있다.
- 사용자는 이와 같은 서비스를 통해 Lake Formation 및 데이터 레이크에 연결한다.

1. 중앙화된 권한
- 회사가 데이터 분석에 Athena와 QuickSight를 사용할 때 사용자는 허용된 데이터만 볼 수 있어야 하고, 읽기 권한이 있어야 한다.
- 데이터 소스는 S3, RDS, Aurora 등 이다.
- Athena에 보안을 설정하거나 QuickSight에서 사용자 수준의 보안을 설정할 수 있다.
- S3 버킷 정책이나 사용자 정책에 보안 설정을 할 수도 있다. (RDS,Aurora도 마찬가지)
- 이처럼 보안을 관리할 곳이 많아지면 복잡해진다.
- 이때 Lake Formation을 사용한다.
-> 액세스 제어 기능과 열 및 행 수준 보안이 있기 때문이다.
- Lake Formation에 주입된 모든 데이터는 중앙 S3 버킷에 저장되지만 모든 액세스 제어와 행, 열 수준 보안은 Lake Formation 내에서 관리된다.
- 따라서 Lake Formation에 연결하는 서비스는 읽기 권한이 있는 데이터만 볼 수 있게 된다.
- Athena, QuickSight 등 어떤 도구를 사용하든 Lake Formation에 연결하면 한곳에서 보안을 관리할 수 있다.