Amazon Athena: 서버리스 SQL 쿼리 서비스
Amazon Athena는 서버리스 SQL 쿼리 서비스로, Amazon S3 버킷에 저장된 데이터를 분석하는 데 사용된다. Athena는 Presto 엔진을 기반으로 하며, S3에 저장된 데이터를 별도의 이동 없이 바로 쿼리하고 분석할 수 있다. 데이터를 표준 SQL 언어로 쿼리하여, CSV, JSON, ORC, Avro, Parquet와 같은 다양한 파일 형식을 지원한다.
Athena의 주요 특징
- 서버리스: 데이터베이스를 프로비저닝할 필요 없이, Athena는 S3에 저장된 데이터를 바로 분석할 수 있다.
- 가격 책정: Athena는 스캔된 데이터의 TB당 고정 가격을 지불하는 간단한 가격 책정을 제공한다.
- 다양한 파일 형식 지원: CSV, JSON, ORC, Avro, Parquet와 같은 다양한 파일 형식을 지원한다.
- 성능 최적화: Apache Parquet와 ORC 형식을 사용하면 성능을 크게 향상시킬 수 있다.
Athena와 Amazon QuickSight
Athena는 Amazon QuickSight와 함께 사용되는 경우가 많다. QuickSight는 Athena가 쿼리한 데이터를 시각화하고, 보고서와 대시보드를 생성하는 데 활용된다.
사용 사례
- 임시 쿼리 수행
- 비즈니스 인텔리전스 분석 및 보고
- AWS 서비스 로그 분석 (VPC 흐름 로그, 로드 밸런서 로그, CloudTrail 추적 등)
성능 향상 방법
- 열 기반 데이터 형식 사용: Apache Parquet, ORC(데이터 변환에는 Glue가 유용함)와 같은 열 기반 형식을 사용하면 필요한 열만 스캔할 수 있어 성능을 향상시키고 비용을 절감할 수 있다.
- 데이터 압축: 데이터를 압축하면 더 적은 데이터를 스캔하게 되어 성능을 최적화할 수 있다.
- 데이터 분할: 데이터를 연도, 월, 일별로 분할하여 필요한 데이터만 검색할 수 있다. 예를 들어
/year=1991/month=1/day=1 형식으로 데이터를 분할하면, Athena는 정확히 필요한 폴더만 스캔한다.
- 큰 파일 사용: S3에 작은 파일이 너무 많으면 성능이 저하되므로, 128MB 이상의 큰 파일을 사용하는 것이 성능에 유리하다.
연합 쿼리
Athena는 Amazon S3뿐만 아니라, 다양한 데이터 소스에서 데이터를 쿼리할 수 있다. 관계형 데이터베이스, 비관계형 데이터베이스, 객체 및 사용자 정의 데이터, 온프레미스 데이터 원본을 쿼리할 수 있다. 이를 위해 데이터 원본 커넥터를 사용하며, Lambda 함수를 통해 다른 서비스와 연합 쿼리를 실행한다. Athena는 ElastiCache, DynamoDB, Redshift, Aurora, SQL 서버, MySQL, HBase 등의 다양한 데이터베이스와 연합 쿼리를 실행할 수 있다. 쿼리 결과는 Amazon S3에 저장할 수 있다.
Amazon Athena는 서버리스로 S3에 저장된 데이터를 분석할 수 있는 강력한 도구이다. SQL 기반으로 데이터를 쿼리하며, 성능 최적화와 다양한 데이터 형식 지원으로 높은 효율성을 제공한다. 또한 연합 쿼리를 통해 다양한 데이터 원본을 통합하여 분석할 수 있다.
Athena 실습
S3버킷의 액세스 로그를 쿼리해보자
1. Athena 콘솔 > Explore the query editor 선택
쿼리 실행 전 S3내 쿼리 결과 위치를 설정해야 한다. Edit Setting으로 들어가 쿼리 결과 위치를 지정해준다.
2. 액세스 로그를 저장하고 있는 S3버킷을 Data Source로 지정
미리 액세스 로그를 저장하고 있는 S3버킷을 생성
3. 데이터 베이스를 생성
쿼리의 첫 줄에 데이터베이스 생성문을 입력
create database s3_access_logs_db;
RUN을 하면 데이터베이스가 생성되고 왼쪽 Database에서 새로 생성한 데이터베이스 선택
4. 객체를 표시할 표 생성
액세스 로그를 생성하기 위한 쿼리 유닛은 아래 링크에서 참고하여 Location의 타겟버킷이름과 prefix를 수정해주면 된다.
https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-s3-access-logs-to-identify-requests.html
생성하고 나면 테이블에 표가 생성되어 있다.
테이블의 점 세개를 누르고 Preview Table을 누르면 열 개의 행을 반환받을 수 있다.
탭에서 최근 쿼리와 저장된 쿼리도 확인이 가능하고 쿼리 결과를 대상 버킷에 암호화하기 위해 Settings를 편집할 수 있다.
Amazon Redshift
Amazon Redshift 개요
Amazon Redshift는 PostgreSQL 기술을 기반으로 한 OLAP(Online Analytical Processing) 유형의 데이터베이스로, 데이터 분석 및 데이터 웨어하우징에 사용된다. Redshift는 대규모 데이터 처리에서 뛰어난 성능을 제공하며, 특히 PB(페타바이트) 규모의 데이터를 효율적으로 처리할 수 있다.
데이터 웨어하우징(Data Warehousing)이란, 조직 내에서 발생하는 다양한 데이터를 수집하고 저장하여, 이를 분석하고 의사 결정을 지원하는 시스템을 의미한다. 데이터 웨어하우스는 여러 소스에서 데이터를 추출하여 정리하고 통합한 후, 분석을 용이하게 할 수 있도록 데이터를 저장하는 중앙 집중형 데이터베이스이다.
주요 특징 및 성능:
- Columnar Storage(열 기반 저장소): 데이터를 열 기반으로 저장하여 병렬 쿼리 엔진을 통해 효율적인 데이터 처리와 성능 향상을 이룬다.
- 고성능 쿼리: Redshift는 데이터 웨어하우징 및 분석에 최적화되어 있어 빠른 쿼리 처리 성능을 제공한다.
- SQL 사용: 데이터 분석을 위해 SQL 문을 사용하여 쿼리를 수행한다.
- 비즈니스 인텔리전스 툴 통합: Amazon QuickSight, Tableau와 같은 BI 도구와 통합되어 시각화 및 대시보드 생성이 용이하다.
Redshift와 Athena 비교:
- Redshift는 S3로부터 모든 데이터를 로드해야 하고, 로드하고 나면 훨씬 빠른 쿼리 성능을 제공하며, 인덱스가 있어 복잡한 조인 및 데이터 집합 처리에서 우수한 성능을 보인다.
- Athena는 S3에 저장된 데이터를 쿼리할 수 있지만, 복잡한 쿼리 처리에서 Redshift보다 성능이 떨어질 수 있다.
Redshift 클러스터 구조:
- 리더 노드: 쿼리 계획 및 결과 집합을 담당한다.
- 계산 노드: 실제로 쿼리를 수행하고 결과를 리더 노드로 전송한다.
Redshift 클러스터와 비용:
- 클러스터 구성: Redshift는 리더 노드와 계산 노드로 구성되며, 이 노드 수에 따라 비용이 결정된다. 예약 인스턴스를 사용하면 비용 절감이 가능하다.
- 멀티 AZ 지원: 최근에는 멀티 AZ(가용 영역) 클러스터를 지원하여, 복구가 용이하다.
스냅샷 및 DR(재해 복구):
- 스냅샷: 싱글 AZ라면 피해 복구를 위해 스냅샷을 사용해야 한다. Redshift는 클러스터의 Point-in-Time 백업을 자동 또는 수동으로 생성할 수 있다. 자동화 시키면 매 8시간마다 스냅샷이 찍힐 것이고 혹은 5GB마다 찍히도록 할 수도 있다. 저장기간을 설정할 수 있다. 수동 스냅샷은 내가 삭제할 때까지 저장되어 있다. S3에 저장되며, 변경된 부분만 저장되어 저장 공간을 절약할 수 있다.
- 멀티 리전 복사: 자동,수동 스냅샷 여부와 관계없이 자동으로 스냅샷을 다른 AWS 리전으로 복사하여, 재해 복구 기능을 제공한다.
데이터 로딩 방법:
1. Kinesis Data Firehose: 다양한 소스에서 데이터를 수집하여 자동으로 S3에 저장한 후, 이를 Redshift로 로드한다.
2. S3와 복사 명령: S3에 데이터를 저장한 후, Redshift에서 복사 명령을 실행하여 데이터를 로드할 수 있다.
데이터를 S3에서 Redshift로 복사할 때 사용할 수 있는 두 가지 방법이 있다:
1. 인터넷을 통한 데이터 전송 (기본 방식)
- S3 버킷은 공용: S3 버킷은 인터넷을 통해 접근 가능하기 때문에 데이터를 인터넷을 거쳐 Redshift로 전송한다.
- 향상된 VPC 라우팅 미사용: 이 방식에서는 데이터가 VPC 내부를 거치지 않고, 퍼블릭 네트워크를 통해 이동한다.
2. VPC 내부를 통한 데이터 전송 (향상된 VPC 라우팅 사용)
- 프라이빗 네트워크 유지: 여러분이 모든 네트워크를 프라이빗하게 유지하고 싶다면, 향상된 VPC 라우팅을 사용하여 S3에서 Redshift로 데이터를 전송할 수 있다.
- 향상된 VPC 라우팅 활성화: 이 경우, 데이터는 인터넷을 거치지 않고 VPC 내부 경로를 통해 안전하게 이동한다.
- 보안 강화: 데이터를 퍼블릭 인터넷에 노출시키지 않기 때문에 보안이 강화된다.
요약
- 인터넷을 통한 전송은 기본적으로 사용되는 방식이며, 향상된 VPC 라우팅을 활성화하면 모든 데이터가 VPC 내부를 통해 흐르게 되어 보안과 네트워크 최적화가 이루어진다.
- JDBC 드라이버: 애플리케이션에서 직접 Redshift 클러스터로 데이터를 로드하는 방법이다. 이 경우에는 큰 묶음의 데이터를 작성하는 것이 좋다. 한번에 한 행씩 작성하는 것은 매우 비효율적일 것이다.
Redshift Spectrum:
- S3 데이터 분석: Redshift Spectrum을 사용하면 Amazon S3에 저장된 데이터를 Redshift 클러스터에서 직접 쿼리할 수 있다. 이는 데이터를 Redshift로 로드하지 않고도 분석할 수 있도록 해준다. 이를 이용하려면 Redshift 클러스터가 이미 있어야 한다.
- 성능 향상: Redshift Spectrum은 수천 개의 노드를 사용하여 대규모 데이터 처리 및 병합 작업을 수행하며, 이를 통해 Redshift 클러스터의 처리 능력을 확장할 수 있다.
결론:
Amazon Redshift는 데이터 웨어하우징과 분석에 최적화된 강력한 솔루션으로, 대규모 데이터 처리에 뛰어난 성능을 발휘한다. 다양한 데이터 로딩 방법과 멀티 리전 복사 기능을 통해 데이터 관리 및 복구가 용이하며, Redshift Spectrum을 활용하여 S3에 저장된 데이터를 직접 분석할 수 있는 유연성도 제공한다.
Amazon OpenSearch Service
- Amazon ElasticSerch의 후속작이다. 라이선싱 문제때문에 이름이 변경되었다.
- DynamoDB에서는 데이터베이스의 기본 키나 인덱스만을 이용해서 쿼리를 할 수 있다.
- OpenSearch를 사용하면 모든 필드를 검색할 수 있다. 부분 매칭이어도 가능하다.
- 애플리케이션에 검색 기능을 제공하는 방식으로 많이 사용되며 분석적 쿼리에도 사용할 수 있다.
- 자체 쿼리 언어가 있다. SQL을 지원하지 않지만 플러그인으로 SQL 호환성을 활성화할 수 있다.
- Kinesis Data Firehose, AWS IoT, CloudWatch Logs 또는 나의 커스텀 빌드 앱 등 다양한 곳에서 오는 데이터를 받을 수 있다.
- 보안은 Cognito, IAM 등을 통해 제공된다. 주소 암호화와 전송 중 암호화를 사용할 수 있다.
- 분석에 사용할 경우 OpenSearch 대시보드를 이용해 OpenSearch 데이터를 시각화할 수 있다.
OpenSearch 클러스터를 프로비저닝하는 두 가지 모드
- 관리형 클러스터 모드: 실제 물리적인 인스턴스가 프로비저닝되고 확인할 수 있다.
- 서버리스 클러스터 모드: 스케일링부터 운영까지 모두 AWS에서 관리하게 된다.
사용 사례
- DynamoDB에서 CURD가 발생하면 DynamoDB Stream에 모든 스트림을 전송한다.
그러면 람다 함수가 실시간으로 데이터를 Amazon OpenSearch에 삽입한다.
그럼 이제 애플리케이션은 특정한 항목을 검색할 능력을 갖게 된다.
항목 이름으로 부분 검색을 하거나 항목 ID를 찾을 수 있게 된다. 항목 ID를 획득하면 DynamoDB를 호출해 실제로 그 항목을 테이블에서 받게 된다.
여기서 OpenSearch는 검색 능력을 제공하고 데이터의 기본 출처는 여전히 DynamoDB 테이블이다.
- CloudWatch Logs Subscription Filter를 사용해 데이터를 실시간으로 람다함수에 전송한다. 람다 함수는 모든 데이터를 OpenSearch에 전송한다.
혹은 람다 함수 말고 Kinesis Data Firehose로 OpenSearch로 보낼 수 있다. 이렇게 하면 근 실시간으로 데이터가 OpenSearch에 삽입된다.
Amazon EMR(Elastic MapReduce)
- AWS에서 빅 데이터 작업을 위한 하둡 클러스터 생성에 사용된다.
- 방대한 양의 데이터를 분석하고 처리할 수 있다.
- 하둡 클러스터는 프로비저닝해야 하며 수백 개의 EC2인스턴스로 구성될 수 있다.
- EMR은 빅데이터 전문가가 사용하는 여러 도구와 함께 제공된다. Apache Spark, HBase, Presto Apache Flink는 설정이 어려운데 Amazon EMR이 상기 서비스에 관한 프로비저닝과 구성을 대신 처리해 준다.
- 전체 클러스터를 자동으로 확장할 수 있고 스팟 인스턴스와 통합되므로 가격 할인 혜택을 받을 수도 있다.
사용사례
- 데이터 처리, 기계학습, 웹 인덱싱 빅데이터 작업
모든 작업은 하둡, Spark, HBase, Presto, Flink와 같은 빅 데이터 관련 기술을 사용한다.
노드 유형
Amazon EMR은 EC2 인스턴스 클러스터로 구성되며, 각 클러스터는 여러 노드 유형으로 나뉜다.
-
마스터 노드
- 클러스터를 관리하고 다른 모든 노드의 상태를 조정한다.
- 장기 실행이 필요하다.
-
코어 노드
- 태스크를 실행하고 데이터를 저장한다.
- 장기 실행이 필요하다.
-
태스크 노드
- 주로 테스트만 실행하며, 대개 스팟 인스턴스를 사용한다.
- 선택적 사용이며, 종료될 수 있다.
구매 옵션
-
온디맨드 EC2 인스턴스:
- 신뢰할 수 있고 예측 가능한 워크로드에 적합하며 절대 종료되지 않는다.
-
예약 인스턴스:
- 최소 1년 사용을 전제로 하며, 비용 절감 효과가 크다.
- EMR은 가능하면 자동으로 예약 인스턴스를 사용한다.
- 장기 실행이 필요한 마스터 노드와 코어 노드에 적합하다.
-
스팟 인스턴스:
- 종료될 수 있어 신뢰도는 낮지만 저렴하다.
- 주로 태스크 노드에 사용된다.
배포 방식
- 장기 실행 클러스터에서는 예약 인스턴스를 사용하거나,
- 임시 클러스터를 사용하여 특정 작업을 수행하고, 분석이 끝난 후 삭제할 수 있다.
Amazon QuickSight
- Amazon QuickSight는 서버리스 머신 러닝 기반 비즈니스 인텔리전스 서비스이다.
- 대화형 대시보드를 생성할 수 있는 비즈니스 인텔리전스(BI) 도구이다. 주요 기능과 사용 사례는 다음과 같다:
1. 대시보드 생성 및 연결
- QuickSight는 대시보드를 생성하고, 다양한 데이터 소스와 연결하여 데이터를 시각화할 수 있다.
- 오토 스케일링이 가능하며, 빠르고 효율적인 시각화를 제공한다.
2. 사용 사례
- 비즈니스 분석: 데이터를 기반으로 비즈니스 인사이트를 얻고, 시각화를 통해 임시 분석을 수행한다.
- 웹사이트 임베드: 대시보드를 웹사이트에 임베드할 수 있다.
- 세션당 비용: 사용자는 세션 단위로 비용을 지불한다.
3. 데이터 소스 연결
- QuickSight는 여러 AWS 데이터 소스와 연결할 수 있다:
- RDS, Aurora, Redshift, Athena, S3 등
- SPICE 엔진: 인메모리 연산 엔진으로 데이터를 빠르게 처리하며, 다른 DB에 연결된 상태에서는 작동하지 않는다.
4. 보안 및 사용자 관리
- 열 수준 보안 (CLS): 엔터프라이즈 버전에서는 액세스 권한이 없는 사용자에게 특정 열이 표시되지 않도록 설정할 수 있다.
- 사용자 및 그룹 관리: QuickSight 내에서만 사용자를 정의하고 그룹을 설정할 수 있다. IAM 사용자는 관리용이며, QuickSight의 사용자 및 그룹은 별개이다.
5. 통합 서비스
- QuickSight는 AWS 내 다양한 데이터 소스와 통합된다:
- RDS, Aurora, Redshift, Athena, S3, OpenSearch, Timestream
- 타사 데이터 소스와도 통합 가능하며, Salesforce, Jira, Teradata 등과 연결할 수 있다.
- JDBC 프로토콜을 사용하는 온프레미스 데이터베이스도 통합된다.
- Excel, CSV, JSON, TSV, ELF, CLF 파일을 직접 가져올 수 있다.
6. 대시보드 및 분석
- 대시보드: 읽기 전용 스냅샷 형태로 분석 결과를 공유하며, 설정된 필터, 매개변수 제어, 정렬 옵션 등이 저장된다.
- 분석: 대시보드와 분석은 특정 사용자나 그룹과 공유할 수 있다.
7. 세 가지 주요 개념
- 대시보드: 결과를 공유하는 읽기 전용 스냅샷
- 분석: 데이터를 분석하고 결과를 대시보드에 표시
- 사용자: QuickSight 내에서 정의되며 IAM과는 다르다. 그룹은 엔터프라이즈 버전에서만 지원
8. 시험 대비
- QuickSight와 Athena 또는 Redshift를 함께 사용하는 문제가 자주 출제된다. 다른 통합 서비스도 시험에 나올 수 있다.
AWS Glue
AWS Glue는 ETL(Extract, Transform, Load) 서비스로, 데이터를 추출하고 변환하여 로드하는 작업을 관리하는 완전 서버리스 서비스이다. 분석을 위해 데이터를 준비하고 변환하는 데 유용하다.
-
ETL 작업: Glue는 S3, RDS와 같은 데이터 소스에서 데이터를 추출한 후, 필요한 변환 작업을 거쳐 데이터를 Redshift와 같은 데이터 웨어하우스에 로드한다. 이 모든 작업은 Glue 내에서 이루어진다.
-
Parquet 형식 변환: 예를 들어, CSV 형식의 데이터를 Glue를 사용해 Parquet 형식으로 변환한 후 S3에 저장할 수 있다. Parquet 형식은 Athena와 같은 분석 서비스에서 더 효율적으로 처리된다.
-
자동화: Glue ETL 작업은 Lambda 함수나 EventBridge로 자동화할 수 있다. S3에 파일이 업로드될 때마다 Lambda나 EventBridge가 트리거 되어 ETL 작업이 실행된다.
-
Glue Data Catalog: Glue는 데이터 세트를 관리하는 Data Catalog를 제공한다. 데이터 크롤러는 S3, RDS, DynamoDB, 온프레미스 JDBC 데이터베이스 등에서 메타 데이터를 추출해 Data Catalog에 저장한다. Athena, Redshift Spectrum, EMR 등 다른 AWS 서비스도 Glue Data Catalog를 활용하여 데이터를 검색한다.
-
Glue 작업 북마크: ETL 작업을 실행할 때 이전 데이터를 재처리하지 않도록 돕는 기능이다. 이를 통해 효율적인 데이터 처리가 가능하다.
-
Glue Elastic Views: SQL을 사용해 여러 데이터 스토어의 데이터를 결합하고 복제하는 기능이다. RDS, Aurora, S3 등을 하나의 뷰로 묶을 수 있다. 데이터 변경 사항을 자동으로 모니터링하고 가상 테이블을 생성한다.
-
Glue DataBrew: 사전 빌드된 변환을 사용해 데이터를 정리하고 정규화하는 서비스이다.
-
Glue Studio: GUI를 통해 Glue에서 ETL 작업을 생성, 실행, 모니터링할 수 있는 서비스이다.
-
Glue 스트리밍 ETL: Apache Spark Structured Streaming을 기반으로 하며, 배치 작업이 아닌 실시간 스트리밍 데이터를 처리할 수 있다. Kinesis Data Streaming, Kafka, MSK에서 데이터를 읽을 수 있다.
AWS Lake Formation은 데이터 레이크 생성을 돕는 완전 관리형 서비스이다.
데이터 레이크란?
데이터 레이크는 데이터를 한곳에 모아두어 다양한 분석 및 처리를 할 수 있는 중앙 집중식 저장소이다. 정형 데이터와 비정형 데이터를 결합하여 저장할 수 있다.
Lake Formation의 역할
Lake Formation은 데이터 레이크를 쉽게 생성할 수 있게 도와주며, 데이터 검색, 정제, 변환 및 주입을 지원한다. 데이터 수집, 정제, 카탈로깅, 복제 등을 자동화하고, 기계 학습(ML)을 이용해 중복을 제거하는 기능도 제공한다.
데이터 이전 및 블루프린트
Lake Formation은 데이터 레이크로 데이터를 이전하는 데 유용한 블루프린트를 제공한다. 이 블루프린트는 Amazon S3, RDS, NoSQL 데이터베이스 등에서 지원되며, 데이터를 손쉽게 주입할 수 있다.
세분화된 액세스 제어
Lake Formation의 큰 장점은 세분화된 액세스 제어가 가능하다는 점이다. 행 및 열 수준에서 액세스를 제어할 수 있어, 사용자마다 데이터에 대한 접근 권한을 세밀하게 설정할 수 있다.
Lake Formation 작동 방식
Lake Formation은 AWS Glue 위에 빌드되지만, Glue와 직접 상호작용하지 않는다. 데이터 레이크는 Amazon S3에 저장되며, 다양한 데이터 소스(Amazon S3, RDS, Aurora, 온프레미스 데이터베이스 등)에서 블루프린트를 통해 데이터를 주입할 수 있다.
보안 및 액세스 제어
Lake Formation은 데이터를 보호하기 위한 보안 설정과 액세스 제어 기능을 제공한다. 데이터 레이크 내에서 모든 액세스 제어와 보안을 관리할 수 있으며, 이를 통해 데이터에 대한 접근 권한을 중앙에서 관리할 수 있다.
사용되는 서비스
Athena, Redshift, EMR과 같은 분석 도구가 Lake Formation과 함께 사용된다. 이러한 서비스는 Lake Formation에 연결되어, 데이터에 대해 안전하게 접근할 수 있다.
중앙화된 권한 관리
데이터 소스가 많아질수록 보안 관리가 어려워질 수 있다. 하지만 Lake Formation은 중앙화된 권한 관리를 통해 모든 데이터에 대한 보안을 한곳에서 관리할 수 있게 해준다. Athena나 QuickSight를 사용할 때 사용자는 허용된 데이터만 볼 수 있어야 하고 읽기 권한이 있어야 한다. 데이터 소스, Athena, QuickSight 각각에서 보안을 설정하고 버킷 정책, 사용자 정책에서 보안을 따로 관리하면 엉망이 될 것이다. 이때 Lake Formation을 통해 보안 설정을 일관되게 적용할 수 있다. 액세스 제어기능과 열 및 행 수준 보안 기능이 있기 때문이다.
핵심 장점
Lake Formation에 주입된 모든 데이터는 중앙 S3 버킷에 저장되지만 모든 액세스 제어와 행, 열 수준 보안은 Lake Formation 내에서 관리된다. 따라서 Lake Formation에 연결하는 서비스는 읽기 권한이 있는 데이터만 볼 수 있게 된다. Athena, QuickSight 등 어떤 도구를 사용하든 Lake Formation에 연결하면 한곳에서 보안을 관리할 수 있다.
Kinesis Data Analytics
Kinesis Data Analytics에는 두 가지 종류가 있다.
1. SQL 애플리케이션용
2. Apache Flink용
1. SQL 애플리케이션용 Kinesis Data Analytics
- 데이터 소스: Kinesis Data Streams와 Kinesis Data Firehose에서 데이터를 읽어온다.
- 실시간 분석: SQL 문을 사용해 실시간 분석을 처리한다. Amazon S3 버킷의 데이터를 참조하여 참조 데이터와 조인할 수 있다.
- 데이터 전송: 실시간으로 분석된 데이터를 여러 대상에 전송할 수 있다. 두 가지 방법:
- Kinesis Data Firehose로 전송하면 데이터를 Amazon S3, Amazon Redshift, Amazon OpenSearch 등으로 보낼 수 있다.
- Kinesis Data Streams로 전송하면 EC2에서 실행되는 애플리케이션이나 AWS Lambda로 실시간 데이터를 스트리밍하여 처리할 수 있다.
- 완전 관리형 서비스: 서버를 프로비저닝할 필요가 없고, 오토 스케일링이 가능하다. 데이터에 대한 비용만 지불한다.
- 사용 사례: 시계열 분석, 실시간 대시보드, 실시간 지표 분석 등에서 사용된다.
2. Apache Flink용 Kinesis Data Analytics
- Apache Flink: Kinesis Data Analytics에서 Apache Flink를 사용할 수 있다. Java, Scala, SQL로 애플리케이션을 작성해 스트리밍 데이터를 처리하고 분석할 수 있다.
- Flink 애플리케이션: Flink는 코드 작성이 필요하며, Kinesis Data Analytics의 Flink 전용 클러스터에서 실행된다.
- 데이터 소스: Kinesis Data Streams와 Amazon MSK(Kafka의 AWS관리형 서비스)에서 데이터를 읽을 수 있다. Kinesis Data Firehose는 읽지 못한다.
- 고급 쿼리 능력: Apache Flink는 표준 SQL보다 훨씬 강력하므로, 복잡한 쿼리나 고급 스트리밍 분석이 필요할 때 사용한다.
- 컴퓨팅 리소스 자동 프로비저닝: 병렬 연산과 오토 스케일링이 가능하며, 체크포인트와 스냅샷 기능을 통해 애플리케이션을 백업할 수 있다.
- 사용 사례: 고급 분석, 대규모 스트리밍 데이터 처리 등에서 사용된다.
Kinesis Data Analytics 실습
Kinesis Data Analytics의 옵션에는 두 가지가 있다.
1. 스트리밍 애플리케이션 만들기
2. 스튜디오로 이동
1. 스트리밍 애플리케이션 만들기 (Apache Flink 활용)
- Apache Flink를 활용하는 Kinesis Data Analytics 서비스이다.
- 런타임 버전을 선택하고 애플리케이션 이름을 작성한다.
- 프로덕션 정보를 입력한 후 스트리밍 애플리케이션이 생성된다.
- Create streaming application을 눌러 Apache Flink 애플리케이션을 업로드하고 실행 후 Apache Flink 대시보드에서 모니터링할 수 있다.
2. Studio notebook으로 이동
- SQL 애플리케이션용 Kinesis Data Analytics를 사용해 스트리밍 애플리케이션을 실행할 수 있는 노트북을 빠르게 생성한다.
- 여기서도 Apache Flink를 활용하지만, 이 옵션은 좀 더 간편하다.
3. SQL 애플리케이션 (레거시)
- Kinesis Data Analytics Studio와 Apache Flink 사용을 권장하지만, Kinesis Data Firehose로 데이터를 읽으려면 레거시 SQL 애플리케이션을 생성해야 한다.
- 애플리케이션 이름만 정의한 후, 실시간 분석 탭에서 SQL 코드를 작성할 수 있다.
전반적으로, 이 시험에서는 Kinesis Data Analytics가 나오지 않지만, 옵션과 콘솔 구성을 간단히 살펴보았다.
Amazon Managed Streaming for Apache Kafka(MSK)
Kafka는 Amazon Kinesis의 대안이다. 두 서비스 모두 데이터를 스트리밍하는 방식이다.
MSK (Amazon Managed Streaming for Apache Kafka)는 AWS의 완전 관리형 Kafka 클러스터 서비스이다. 그때그때 클러스터를 생성, 업데이트, 삭제한다. MSK는 브로커 노드와 Zookeeper 노드를 생성하고 관리하며, 고가용성을 위해 VPC 내에서 최대 세 개의 다중 AZ 전역에 클러스터를 배포한다. Kafka 장애는 자동으로 복구되며, EBS 볼륨에 데이터를 저장할 수 있다.
MSK에는 서버리스 옵션도 있다. 서버리스에서는 서버 프로비저닝이나 용량 관리가 필요 없다. MSK가 리소스를 자동으로 프로비저닝하고, 컴퓨팅과 스토리지를 스케일링한다.
Apache Kafka는 데이터를 스트리밍하는 방식이다. Kafka 클러스터는 여러 브로커로 구성되고, 데이터를 생산하는 생산자는 Kinesis, IoT, RDS 등에서 데이터를 클러스터로 주입한다. Kafka 주제로 데이터를 전송하면, 데이터는 다른 브로커로 복제된다. 주제는 실시간으로 데이터를 스트리밍하고, 소비자는 이를 폴링하여 데이터를 소비한다. 소비자는 데이터를 처리하거나 EMR, S3, SageMaker, Kinesis, RDS 등으로 보낸다.
Kinesis와 MSK의 차이점
- 메시지 크기: Kinesis Data Streams는 1MB의 메시지 크기 제한이 있지만, MSK는 기본적으로 1MB이고, 10MB로 설정할 수 있다.
- 데이터 스트리밍 방식: Kinesis는 샤드를 사용해 데이터를 스트리밍하고, MSK는 파티션을 사용하여 Kafka 주제를 스트리밍한다.
- 용량 확장: Kinesis는 샤드 분할로 용량을 확장하고, 샤드 병합으로 축소한다. MSK는 파티션을 추가하여 주제를 확장할 수 있지만, 파티션 제거는 불가능하다.
- 전송 중 암호화: Kinesis는 TLS 전송 중 암호화 기능이 있고, MSK는 평문과 TLS 전송 중 암호화 기능이 있다.
- 저장 데이터 암호화: 두 서비스 모두 저장 데이터 암호화가 가능하다.
기타 특징
- 데이터 보관: Amazon MSK는 EBS 스토리지 비용을 지불하면 데이터를 1년 이상 보관할 수 있다.
- 데이터 생산: MSK에 데이터를 생산하려면 Kafka 생산자를 생성해야 한다.
- 데이터 소비: MSK의 데이터를 소비하는 방법은 다양하다. Apache Flink용 Kinesis Data Analytics를 사용하거나, AWS Glue를 통해 ETL 작업을 스트리밍할 수 있다. Glue는 Apache Spark Streaming으로 구동된다.
- 이벤트 소스: MSK를 이벤트 소스로 사용하려면 Lambda 함수를 활용할 수 있다. 자체 Kafka 소비자를 생성해 Amazon EC2 인스턴스, EC2 클러스터, EKS 클러스터 등에서 실행할 수도 있다.
빅데이터 수집 파이프라인
빅 데이터 수집 파이프라인의 아키텍처는 다음과 같은 단계로 구성된다:
-
데이터 수집 (Ingestion)
IoT 디바이스들이 데이터를 실시간으로 생성한다고 가정할 때, IoT Core를 통해 IoT 디바이스를 관리하고 데이터를 수집한다. 이 데이터는 Kinesis 데이터 스트림으로 전송된다. Kinesis는 빅 데이터를 실시간으로 처리하고, Kinesis Data Firehose를 통해 데이터를 S3 버킷으로 주기적으로 전송한다. 이때 Firehose는 데이터를 매 분마다 전송하며, S3 버킷은 수집된 데이터를 저장하는 역할을 한다.
-
데이터 변환 (Transformation)
Kinesis Data Firehose는 AWS Lambda와 연결되어 데이터를 실시간으로 변환하거나 정리할 수 있다. Lambda 함수는 Firehose에서 수집된 데이터를 받아 변환 작업을 수행한다.
-
데이터 쿼리 (Query)
변환된 데이터는 Amazon Athena를 사용해 SQL 쿼리로 처리된다. Athena는 서버리스 SQL 서비스로, 데이터를 S3 버킷에서 읽어 SQL 쿼리를 실행하고 결과를 보고 버킷에 저장한다.
-
데이터 시각화 및 분석 (Visualization and Analysis)
데이터를 분석하거나 시각화하려면, Amazon QuickSight를 사용하여 S3 버킷의 데이터를 시각화할 수 있다. 또한, 데이터를 더 깊이 분석하려면 Amazon Redshift 같은 데이터 웨어하우스로 데이터를 로드하여 분석을 진행할 수 있다. Redshift는 QuickSight와 연동되어 분석 결과를 시각화할 수 있는 엔드포인트 역할을 한다.
파이프라인의 주요 구성 요소:
- IoT Core: 다양한 IoT 디바이스에서 데이터를 수집하고 관리한다.
- Kinesis: 실시간 데이터 스트리밍 및 처리에 적합한 서비스.
- Kinesis Data Firehose: 데이터를 S3 버킷으로 주기적으로 전송한다.
- AWS Lambda: 실시간 데이터 변환 및 처리.
- Amazon S3: 수집된 데이터를 저장하고, SQS, SNS, Lambda와 연동해 알림 및 처리를 관리한다.
- Amazon Athena: S3에 저장된 데이터를 서버리스 SQL로 쿼리한다.
- Amazon QuickSight: 시각화 도구로, S3 버킷의 데이터를 시각화한다.
- Amazon Redshift: 데이터 웨어하우스, QuickSight와 연동하여 데이터 분석을 진행한다.
이 파이프라인은 실시간 데이터 수집, 서버리스 데이터 변환, 서버리스 SQL 쿼리, 시각화 및 분석을 가능하게 한다.