💡Today I Learned
- 데이터 웨어하우스, SQL, BI 대시보드에 대한 세 번째 수업을 진행했습니다.
- Redshift 스냅샷, Spectrum, SageMaker을 이용한 ML 실습
1. Redshift의 권한/보안
- IAM Role
: AWS 리소스 관련 권한 설정 서비스
: 역할(Role) 혹은 그룹(Group) 별로 스키마별 접근 권한을 주는 것이 일반적
: 사용자 집합 = 그룹, 테이블 집합 = 스키마
: 역할(계승 o → 포함관계, 상속 느낌), 그룹(계승 x)
GRANT [권한 옵션] ON SCHEMA [스키마 이름] TO GROUP [그룹 이름];
GRANT [권한 옵션] ON ALL TABLES IN SCHEMA [스키마 이름] TO GROUP [그룹 이름];
: 컬럼 레벨의 보안 → 특정 컬럼에 특정 사용자/그룹/역할만 접근 가능
: 레코드 레벨 보안 → 특정 레코드에 특정 사용자/그룹/역할만 접근 가능
2. Redshift의 백업/테이블 복구
- Snapshot (in 고정 비용 옵션)
: 마지막 백업으로부터 바뀐 것들만 저장
: 과거로 돌아가 그 시점의 내용으로 특정 테이블을 복구함
: 자동 백업 / 매뉴얼 백업
: 재난 시 다른 지역의 리소스에 백업 (Cross-regional snapshot copy 설정)
: 자동 백업은 기본 1일~최대 35일까지 보관 가능 (스토리지 비용은 더 증가할 수 o)
- Recovery Points (in 가변 비용 옵션 _ Redshift Serverless)
: 백업 내용이 과거 24시간에 대해서만 유지됨 (백업이 하루 단위밖에 안됨)
: Recovery Point를 Snapshot으로 바꾼 다음 여기서 테이블을 복구하거나 새로운 Redshift 클러스터를 생성하거나 ..
: 스냅샷이 자동으로 생기지 않음 (고정 비용과 다르게)
: 가변비용 = 컴퓨팅 자원 & 스토리지가 서로 구분돼있기 때문 (별개로 존재), 쓴만큼 비용 지불
→ 스토리지, 컴퓨팅 리소스가 특정 고객에게 고정된 것이 없음
→ 스냅샷을 계속 잡을 수 없음
3. Redshift 관련 기타 서비스
- Redshift Spectrum
: Redshift의 확장 기능
: (Redshift와 같은 지역에 있는) S3 등에 있는 큰 파일을 Redshift에서 (따로 로딩하지 않고) 외부 테이블처럼 사용 가능하게 해줌
: Redshift로 로딩하는 오버헤드 없음
: S3의 정보 처리를 Redshift_with Spectrum 에서 할 수 있도록 구현
: 임시 목적으로 사용 (DB 내부로 복사하고 쓰는 것이 x)
: 보통 읽기 전용으로 참조만 함
*) S3 = 스토리지, 데이터 레이크, Fact 테이블=외부 테이블
*) Redshift = 데이터 웨어하우스, Scalability가 작음, Dimension 테이블
- Athena (Apache Presto를 서비스화 함)
: Redshift Spectrum과 비슷한 기능 제공
: S3의 데이터를 기반으로 SQL 쿼리 기능 제공
: 이런 경우에는 S3를 데이터 레이크로 봄
: Redshift 쓰지 않는다면 Athena 사용
- Redshift ML
: SQL만 사용해서 ML 모델 훈련/사용할 수 있게 해주는 Redshift 기능
: AWS SageMaker(ML end-to-end framework)에 의해 지원
: 1) 다수의 레코드로 ML 모델 학습부터~.. 2) 이미 만들어진 모델을 로딩해서 Redshift, SQL 내의 함수처럼 사용 가능
*) 지도학습 모델만 대상으로 함 (y_label o)
4. Redshift Spectrum으로 S3 외부 테이블 조작
- Fact 테이블
: 분석의 초점이 되는 양적 정보를 포함하는 중앙 테이블
: (일반적으로 Dimension보다) 크기가 큼
: 사용자들이 한 행동들이 기록됨
: 일반적으로 외래 키를 통해 여러 Dimension 테이블과 연결됨
→ S3에 저장해 필요할 때마다 로딩해서 사용
→ ex) user_session_channel
- Dimension 테이블
: Fact 테이블에 대한 상세 정보를 제공하는 테이블
: (일반적으로 Fact보다) 크기가 작음
: 일반적으로 primary key를 가지고, Fact 테이블의 foreign key에서 참조함
→ 웨어하우스(Redshift)저장해 필요할 때 Join해서 사용
→ ex) user, channel (user_session_channel을 만들 때 사용된)
- Use case
: S3에 대용량 Fact 테이블들이 파일로 존재 + Redshift에 소규모 Dimension 테이블들이 존재
→ 적재하지 않고 두 테이블을 join하고싶을 때 Spectrum 사용!
: 이 때 S3, Redshift는 동일 region에 있어야 함
: S3의 IAM Role에 AWSGlueConsoleFullAccess 권한 추가
: Redshift 내에 외부 테이블용 스키마 생성
- AWS Glue
: AWS의 Serverless ETL 서비스 (Airflow와 유사 but AWS specific함)
: 데이터 카탈로그, ETL 작업 생성, 작업 모니터링/로그, 서버리스 실행
: AWS Spectrum, Athena 사용할 경우 함께 사용하는 서비스
5. Redshift ML
- 머신러닝
: 입력 = training set / 출력 = label
- Amazon SageMaker
: ML end-to-end
: MLOps 프레임워크
: 모델 개발~끝까지
: 1) 트레이닝 셋 준비 2) 모델 훈련 3) 모델 검증 4) 모델 배포/관리 (API endpoint로 배포, 실제 production의 로깅, 배치 서빙, ..)
: 모델 훈련에도 다양한 ML 프레임워크 지원 (tf, PyTorch, MXNet, scikit-learn..)
: SageMaker Studio라는 (코랩 비슷한) 웹 기반 환경 제공
: 파이썬 모듈(SageMaker 모듈)도 있음 *) 비용 o
- AutoPilot
: AutoML (모델 빌딩을 위한 훈련 집합을 제공하면 자동으로 모델 만들어 줌)
: 모델 개발의 속도를 단축시킬 수 있음
: 최종적으로 사용자가 모델 선택 후 API로 만드는 것도 가능
- SageMaker 실습
: 훈련용 데이터셋 준비 (Kaggle의 Orange_Telecom_Customer_Churn 데이터)
: .csv파일을 S3 버킷 아래의 폴더로 업로드
: Redshift의 raw_data 스키마 아래에 'orange_telecom_customers' 테이블로 벌크 업데이트 (COPY)
: SageMaker 사용 권한을 Redshift cluster에 지정 (IAM Role 생성 → AmazonSageMakerFullAccess 정책 지정)
- 1) SageMaker가 Redshift cluster의 테이블에 access하기 위한 권한
- 2) Redshift가 SageMaker의 기능을 background에서 사용하기 위한 권한
- IAM Role (AWS service=SageMaker) > SageMaker & S3 FullAccess 정책 추가 > 신뢰 관계 > 신뢰 정책 편집 > 보안 주체 추가 > AWS services의 "redshift.amazonaws.com" 정책 추가 > 업데이트
- 만든 IAM Role의 ARN 사용
- Redshift serverless > 네임스페이스 > 보안/암호화 > IAM 역할 관리, 연결 (방금 만든 'Redshift-ML' 역할)
: 80%의 레코드를 이용해 모델 생성 (CREATE MODEL) *) SageMaker 비용 발생
- CREATE MODEL [모델 이름] FROM([사용할 훈련 feature_column 선택])
- TARGET [예측할 label인 column]
- FUNCTION [모델을 최종적으로 만들었을 때의 SQL 함수 이름]
- IAM_ROLE '[Role ARN string 복붙]'
- SETTINGS (S3_BUCKET '[관련 로그를 저장할 s3 버킷 이름]')
- SHOW MODEL [모델 이름] 으로 모델이 준비됐는지 체크 *) 비용 발생
: Model SQL 함수 사용해 모델 예측 수행
: SageMaker 관련 리소스 모두 제거하기!!
- Drop Model
- SageMaker 웹 콘솔에서 관련 리소스 삭제
6. Redshift 중지/삭제
*) Serverless에는 중지/삭제의 컨셉은 따로 없음.. (가변비용이라)
- VACUUM 명령
: 테이블 청소, 최적화
: 테이블 데이터 정렬
: 디스크 공간 해제
: 삭제된 행에서의 공간 회수 (테이블에서 행 삭제 시 VACUUM 명령 전까지 이 공간은 회수되지 않음)
: 테이블 통계 업데이트
- Redshift 클러스터 중지/재실행
: 웹 콘솔 > Actions > Pause/Reboot/Delete
: 삭제 전 Redshift의 스냅샷을 S3에 저장할 수 있음 (추후 새로운 Redshift cluster을 이 스냅샷을 통해 만들 수 있음)
- Redshift serverless 삭제
1) 모든 workgroup 삭제
2) 그 다음 모든 namespace 삭제
💡Furthermore
- GRANT USAGE ON ~.. 의 의미
'데브코스 > TIL' 카테고리의 다른 글
[TIL] 8주차_Day35: 데이터 웨어하우스 관리, 고급 SQL, BI 대시보드 (5) (1) | 2023.12.01 |
---|---|
[TIL] 8주차_Day34: 데이터 웨어하우스 관리, 고급 SQL, BI 대시보드 (4) (0) | 2023.11.30 |
[TIL] 8주차_Day32: 데이터 웨어하우스 관리, 고급 SQL, BI 대시보드 (2) (0) | 2023.11.28 |
[TIL] 8주차_Day31: 데이터 웨어하우스 관리, 고급 SQL, BI 대시보드 (1) (2) | 2023.11.27 |
[TIL] 7주차_Day30: AWS 클라우드 실습 (5) (1) | 2023.11.25 |