Google Cloud Composer
Cloud Composer 환경 아키텍처 | Google Cloud
완전 관리형 서비스를 조사한 이유!
- 프로젝트 규모를 보면 Airflow DAG가 최대 5개로 예측되며, DAG당 작업량이 적음
- 확장성을 크게 고려할 필요없음
- 안정성과 프로젝트 기간, 관리 측면에서 볼 때 다른 부분도 신경써야 될 부분 많음
- 추상화
- 실패 및 변경 처리 시간 최소화
위와 같은 이유들로 Airflow 구축하고 관리하는 시간을 단축하고자 완전 관리형 서비스도 고려해봄
1. 완전 관리형 Google Cloud Composer란?
참고 : https://cloud.google.com/composer/docs/concepts/overview?hl=ko
- 환경 : Google Kubernetes Engine에 기반을 둔 독립 실행형 Airflow
- 기능 :
- Airflow 환경
- Airflow 관리
- 모니터링 대시보드
- 모든 DAG 파일의 총 파싱 시간 모니터링
- 스케줄러 CPU 및 메모리 측정항목 모니터링
- 작업자 포드 제거 모니터링
- 활성 작업자 모니터링
- 작업자 CPU 및 메모리 사용량 모니터링
- … (더보기_’환경 성능 및 비용 최적화)
- 모니터링 대시보드
- Airflow 구성
- Airflow DAG(워크플로)
- 커스텀 Apache 플러그인
- Airflow에 기본 제공되는 커넥터를 사용하여 다른 Google Cloud 서비스와 함께 작동
- 버전 : Airflow 1, 2 모두 지원
- Airflow 메타 데이터 DB 변경 불가 (사용자 제공 데이터베이스로사용 불가)
- 자체 관리형 Google Kubernetes Engine 클러스터를 기반으로 Cloud Composer 환경을 빌드 불가
- Terraform으로 코드로 관리 가능함 (추후 확장 가능)
2. 버전
Cloud Composer1 과 2가 있고 각각은 Airflow 버전과 동일
▶ 간단 분석
- Cloud Composer 2.
- 자동 확장
- ‘워크로드’로 수직 확장
- 유지보수 작업시, 55분 미만의 테스크는 영향받지 x
- Cloud Composer 1.
- 수동 확장
- 하나씩 수직 확장
- 유지보수 작업시, 모든 테스크 영향 받음
상세 분석 표 ( 문서 )
Cloud Composer 이미지 버전 | composer-1.x.x | composer-2.x.x |
Airflow 버전 | Airflow 1.10.* 및 Airflow 2 | Airflow 2 |
Python 버전 | 3.8.12 | 3.8.12 |
환경 클러스터 | 표준 모드 VPC 기반 또는 경로 기반 Google Kubernetes Engine 클러스터 | Autopilot 모드 VPC 기반 Google Kubernetes Engine 클러스터 |
수평 확장 | 환경 클러스터의 노드 수를 조정할 수 있습니다. 이렇게 하면 Airflow 작업자 수가 변경됩니다.Airflow 스케줄러 수를 조정할 수 있습니다. | 수요에 따라 Airflow 작업자 수를 자동으로 확장합니다. 작업자 수의 상한과 하한을 설정하고 변경할 수 있습니다.Airflow 스케줄러 수를 조정할 수 있습니다. |
수직 확장 | 환경을 만들 때 클러스터 노드, Airflow 웹 서버, 데이터베이스의 머신 유형을 설정할 수 있습니다. Airflow 웹 서버와 데이터베이스의 머신 유형을 변경할 수 있습니다. | 워크로드 구성(Airflow 작업자, 스케줄러, 웹 서버, 데이터베이스의 CPU, 메모리, 스토리지 매개변수)을 설정하고 변경할 수 있습니다. |
가격 책정 모델 | Cloud Composer 1 가격 책정 모델 | Cloud Composer 2 가격 책정 모델 |
액세스 제어 | Cloud Composer 역할 | Cloud Composer 역할. 워크로드 아이덴티티를 사용하고 Cloud Composer 서비스 에이전트 계정에 대한 추가 권한이 필요합니다. |
직원 ID 제휴를 통한 액세스 | 지원되지 않음 | 지원됨 |
환경 아키텍처 | Cloud Composer 1 환경 아키텍처 | Cloud Composer 2 환경 아키텍처 |
비공개 IP 네트워킹 | VPC 피어링 | VPC 피어링 또는 Private Service Connect |
Terraform 지원 | Cloud Composer 1 환경을 만들고 업데이트할 수 있습니다. | Cloud Composer 2 환경을 만들고 업데이트할 수 있습니다. |
CMEK | 지원됨 | 지원됨 |
웹 서버 액세스 제어 | 지원됨 | 지원됨 |
웹 서버 다시 시작 | 지원됨 | 지원됨 |
웹 서버 플러그인 | DAG 직렬화가 사용 중지된 Airflow 1 환경에서 지원됨 | 지원됨 |
커스텀 플러그인 설치 | 지원됨 | 지원됨 |
유지보수 작업 | 모든 태스크가 영향을 받을 수 있습니다. | 실행 시간이 55분 미만인 태스크는 영향을 받지 않습니다. |
비동기 DAG 로드 | Airflow 1에서 지원됨 | 지원되지 않음 |
DAG 직렬화 | Airflow 2에서 항상 사용 설정됩니다. Airflow 1에서 사용 중지할 수 있습니다. | Airflow 2에서 항상 사용 설정됩니다. |
네트워크 태그 지원 | 예 | 예 |
GPU가 포함된 클러스터 노드 | 예 | 아니요 |
스냅샷 저장 | Airflow 2.x 및 1.10.15 버전에 지원됨 | 지원됨 |
스냅샷 로드 | 지원되지 않음 | 지원됨 |
예약된 스냅샷 | 지원되지 않음 | 지원됨 |
3. 요금
버전 2 기준으로
3-1. 비용 계산 법
💡 비용 요약 : SKU (CPU+Memory+Storage) + 환경 요금 + 환경 수수료
대분류 | 큰 구성(#️⃣)과 세부 구성 | 설명 |
Cloud Composer Compute |
#️⃣ Cloud Composer Compute SKUs (컴퓨팅 SKU) | Airflow 스케줄러, 웹서버, 워커들의 Compute Engine Airflow 워커는 오토스케일되고, 워커 수에 따라 비용 달라짐 |
1) Cloud Composer Compute CPUs (컴퓨팅 CPU) |
Compute Engine의 모든 컴포넌트들의 vCPU 수의 합계. 즉, 클러스터의 Pod와 서비스 비용 포함됨 •모든 환경의 Airflow 작업자는 환경 클러스터의 포드에서 실행됨 • 시간당 1,000mCPU(밀리코어)로 측정 (1시간 vCPU1개 == 1000mCPU) | |
2) Cloud Composer Compute Memory (컴퓨팅 메모리) | Compute Engine의 모든 컴포넌트들의 메모리양 합계 | |
3) Cloud Composer Compute Storage (컴퓨팅 스토리지) | Compute Engine의 모든 컴포넌트들의 스토리지 용량 합계 | |
Cloud Composer Database |
#️⃣ Cloud Composer Database Storage (데이터베이스 스토리지) |
Cloud SQL(Airflow 데이터베이스 스토리지)의 디스크 용량에 다른 비용 Cloud SQL는 오토스케일 되고, 사용량에 따라 비용 달라짐 |
Small /Medium /Large Cloud Composer Environment |
#️⃣ Small/Medium/Large Cloud Composer Environment Fee (환경 요금) | Cloud Composer 환경의 관리형 인프라 규모를 소형.중형.대형 총 3가지 크기를 제공하는데, 이 크기에 따라 요금 달라짐 |
#️⃣ Small/Medium/Large Highly Resilient Cloud Composer Environment Fee (환경 수수료) | 서비스 중단시 복원 기능(고가용성) | |
기타요금 | 1. 모니터링 | •수집 : (30일간 스토리지 포함)최초 50Gib까지는 무료, 그 이후 $0.50/GiB •스토리지 : 기본 보관기간동안의 스토리지 비용 부과 X. 30일 이상 보관된 로그의 경우 GiB당 $0.01/월 |
2. Cloud Key Management Service 사용 | 고객 관리 암호화키 사용하는 경우 해당 서비스 사용에 대한 추가요금 납부 | |
3. Private Service Connect시 추가 요금 | Private Service Connect의 엔드포인트, 데이터 처리에 대한 요금 책정 | |
4. 환경 Snapshot 비용 | Cloud Storage와 관련된 추가 비용이 발생. 비용은 스냅샷 생성 빈도와 스냅샷 크기에 따라 다름 | |
5. Cloud Storage 버킷 | DAG 관리 및 태스크 로그 보관에 사용되는 환경인 Storage 버킷 버킷은 아래 항목에 대해 요금 책정함 • 데이터 스토리지 • 데이터 처리 • 네트워크 사용량 가격표 : https://cloud.google.com/storage/pricing?hl=ko | |
6. 노드/Cloud SQL/웹서버 머신 유형에 따른 비용 다름 |
3-2. 지역별 요금
3-3. 예시 (문서)
Cloud Composer 2 environment (아이오와(us-central1 기준))
[ Environment 구조 ]
- Environment 크기 : Small
- 스케줄러 : 1개
- 워커 (스케일링) : 1~3개
- 스케줄러와 웹서버 (1~3개로 스케일링 시) :
- vCPU : 0.5 ~ 1.5vCPU
- 메모리 : 1.875 ~ 5.625GiB
- 디스크 : 1 ~ 3 GiB
- 데이터베이스(크기에 따라 오토스케일링 되지 않도록 설정) : 10GiB (디폴트)
[ 작업 내용 ]
- 7일 + 12시간 (총 180시간) 사용 → 사용 후 삭제함
- 전체의 50%의 시간동안 1개의 worker가, 나머지 50%의 시간은 2개의 worker가 동작함
대분류 큰 구성(#️⃣)과 세부 구성 수식 (사용량 * 해당 요금가격) 가격
대분류 | 큰 구성(#️⃣)과 세부 구성 | 계산 | 비용 |
Cloud Composer Compute | #️⃣ Cloud Composer Compute SKUs (컴퓨팅 SKU) |
||
1) Cloud Composer Compute CPUs (컴퓨팅 CPU) |
( 90 hours * 1.5 vCPU + 90 hours * 2 vCPU ) * $0.045 per 1000 mCPU hours | $14.175 | |
2) Cloud Composer Compute Memory (컴퓨팅 메모리) |
( 90 hours * 5.625 GiB + 90 hours * 7.5 GiB ) * $0.005 per GiB / hour | $5.906 | |
3) Cloud Composer Compute Storage (컴퓨팅 스토리지) |
( 90 hours * 3 GiB + 90 hours * 4 GiB ) * $0.0002 per GiB / hour | $0.126 | |
Cloud Composer Database | #️⃣ Cloud Composer Database Storage (데이터베이스 스토리지) | 180 hours out of 740 hours * 10 GiB * $0.17 per GiB / month | 월별 GiB당 $0.17 |
Small /Medium /Large Cloud Composer Environment |
#️⃣ Small/Medium/Large Cloud Composer Environment Fee(환경 요금) | 180 hours * $0.35 per hour | $63.00 |
#️⃣ Small/Medium/Large Highly Resilient Cloud Composer Environment Fee(환경 수수료) | - | - | |
합계 | $83.62 |
⇒ 합리적인 요금 (예시 부분보면 무료 크레딧 300달러 안에서 충분히 사용 가능할 것으로 판단)
4. Airflow 환경 및 관리
4-1. 환경
- GKE 클러스터: Airflow 스케줄러, 워커, Redis 큐는 단일 클러스터에서 GKE(구글 클라우드 쿠버네티스) 워크로드로 실행되며 DAG 처리 및 실행을 담당힘.
- 또한 Composer Agent 및 Airflow Monitoring과 같은 다른 Cloud Composer 구성요소를 호스팅하여 1) Cloud Composer 환경 관리를 돕고,
- Cloud Logging에 저장할 로그를 수집하고,
- Cloud Monitoring에 업로드할 측정항목을 수집함.
- 웹 서버: Apache Airflow 웹 서버(웹 인터페이스)
- 데이터베이스: Apache Airflow 메타데이터 저장
- Cloud Storage 버킷: Cloud Composer는 Cloud Storage 버킷과 환경을 연결합니다. 연결된 버킷은 DAG, 로그, 커스텀 플러그인, 데이터를 저장4-2. Airflow 전반적 관리
- 웹 인터페이스 : Google Cloud Console
- 명령줄 도구 : Google Cloud CLI
5. Airflow DAG 관리 (Cloud Storage)
참고 문서 : DAG, DAG 실행, 태스크 보기 | Cloud Composer | Google Cloud
5-1. DAG 관리
- Airflow webUI
- Google Cloud Console
5-1. DAG 추가
기본적으로 Cloud Composer는 Cloud Storage 버킷의 /dags 폴더에 DAG를 저장함
- DAG 변경사항은 3-5분 이내에 Airflow로 전파됨 → Airflow webUI나 Google Cloud Console 에서 DAG 확인 가능
5-2. 쿠버네티스 Operator DAG 작성
- 로컬에서 작업한대로 다양한 Operator 사용 가능함
- KubernetesPodOperator를 사용하면 구축한 Cloud Composer 의 클러스터에서 Kubernetes Pod를 실행함.
- Cloud Composer 2에서 환경 클러스터는 자동으로 확장됨
- 실행할 네임스페이스를 지정할 수 있어서, 미리 개별 네임스페이스를 만들어줘야됨
- 그 외 KubernetesPodOperator 를 사용하기 위해 메뉴얼 해줄 것이 필요함 (추가 조사 필요)
- 참고 문서
5-3. DAG 트리거
[ 트리거 방법 ] (문서)
- 일정에 따라 트리거 (기존에 Airflow DAG 코드에서 조정)
- **수동으로 트리거 (**Airflow UI 혹은 gcloud)
- 이벤트에 대한 응답으로 트리거
⇒ 핵심 : Cloud Storage 버킷의 /dags 폴더에 DAG 저장함
6. 인프라 구성
6-1. GitHub에서 DAG 테스트, 동기화, 배포
https://cloud.google.com/composer/docs/composer-2/dag-cicd-github?hl=ko
문서의 예시는 개발 환경에만 CI/CD 파이프라인을 구성하는 예제
- Cloud Build를 사용하여 자동화된 Github push를 검사함
- DAG에 대한 단위 테스트
- 개발 Cloud Composer 환경의 DAG를 GitHub 저장소의 DAG와 동기화
⇒ 정리 :
- Cloud Build에서 push된 깃 소스를 단위 테스트 실행하여 DAG 유효한지 검사
- 유효하면 개발 Cloud Composer 환경에 변경사항 저장하고 동작함
- 잘 작동하면 프로덕션 Cloud Composert에도 업로드
6-2. 환경 아키텍처
버전 2에서 구축 가능한 아키텍처 구성 (문서)
6-3. 전반적인 흐름
https://cloud.google.com/composer/docs/security-practices?hl=ko
⇒ 핵심 : 6-1와 6-3의 아키텍처 응용해서 인프라 구축하면 좋을 듯 함
7. 기타 추가 문서
환경 구축하기
Cloud Functions 및 Airflow REST API로 Cloud Composer DAG 트리거 | Google Cloud
DAG 테스트
Cloud Composer 1만 관련 독스 있음. 이거 참고해서 하면 될듯
DAG 테스트(워크플로) | Cloud Composer | Google Cloud
Airflow 안전하게 실행하기 (강연)
Run Airflow DAGs in a secure way
8. 구축 계획
Cloud Composer2를 쓴다는 가정하에 작성
- 전반적인 인프라 재구성 (추가 조사 필요)
- 서비스 설정 및 권한 설정
- 환경 규모 및 성능 매개변수 구성
- 환경 크기
- 워크로드 (스케줄러,웹서버, 워커, 트리거등의 CPU, 메모리, 스토리지 수 등)
- (선택) 복원력 모드 설정
- (선택) 환경 네트워킹 구성 / 네트워크 태그 / 웹서버 네트워크 액세스 설정
- Airflow 구성 재정의 및 환경 변수 지정
- (선택) 유지보수 기간 지정
- (선택사항) 데이터 암호화 구성(CMEK)