Overview
지난번에는 BigQuery와 Data WareHouse에 대해서 알아보았다.
2023.05.21 - [GCP] - GCP BigQuery란? & Data Warehouse
BigQuery와 DataFlow를 활용한 Data ETL 과정에 대해서 설명해보려고 한다.
아래와 같은 WorkFlow를 가지고 있다.
mongodb → bigquery → google sheet
사용할 GCP 리소스는 아래와 같다.
- Dataflow
- Bigquery
- Cloud Scheduler
- Cloud function
- Cloud Storage
Google Cloud Dataflow란?
Google Cloud Platform(GCP)에서 제공하는 완전 관리형 스트림 및 일괄 데이터 처리 서비스이다.
실시간 및 일괄 처리 사용 사례 모두에 대해 데이터 처리 파이프라인을 구축, 배포 및 실행하는 방법을 제공한다. Dataflow는 일괄 및 스트리밍 데이터 처리 파이프라인을 모두 구성하기 위한 오픈소스 통합 모델인 Apache Beam을 기반으로 구축되었다.
GCP에서는 `Dataflow template`을 제공해준다. 사용한 템플릿은 MongoDB_to_BigQuery 이다.
따라서 `Dataflow template`을 활용해서 `MongoDB → Bigquery Table`로 변환해 줄 수 있다.
주요 특징
- Fully Managed Services(완전 관리형 서비스)
- Apache Beam SDK 기반
- Auto Scaling(오토 스케일링)
- Integration(통합)
- Real-Time and Batch Processing(실시간 및 배치 처리)
- Code Portability(코드 이식성=재사용성)
- Debugging and Monitoring(디버깅 및 모니터링)
Google Cloud Function이란?
Google Cloud Functions(GCF)는 GCP에서 제공하는 서버리스 컴퓨팅 서비스이다. 개발자는 서버를 관리할 필요 없이 클라우드 이벤트에 의해 트리거되는 코드를 실행하게 할 수 있다.
주요 특징
- Serverless(서버리스)
- Event-driven(이벤트 기반)
- Scalability(확장성)
- Languages Supported(지원되는 언어)
- `Node.js, Python, Go, Java, .NET, Ruby, PHP`
- Intergrated with GCP Services(GCP 서비스와 통합)
- Stateless(실행 간 상태유지 X)
- Short-lived(빠른 실행)
- Pay-as-you-go(실행시간에 대해서만 비용 지불)
- Security(보안)
- Local Development & Testing(SDK를 활용해 로컬 테스트 가능)
Google Cloud Scheduler란?
Google Cloud Scheduler는 크론 작업 스케줄링 서비스이다. 기본적으로 Linux의 Cron과 비슷한 기능을 제공하지만 클라우드 환경에서의 확장성, 관리 및 통합 기능이 추가되어 있다.
주요 특징
- Fully Managed Services(완전 관리형 서비스)
- HTTP, Pub/Sub, App Engine Calls( HTTP, Pub/Sub, App Engine 호출)
- CRON Grammar(CRON 문법)
- Retry Failure(작업이 실패할 경우 재시도)
- Time Zone Support(국가별 시간대 지원)
- Monitoring and Logging(모니터링 및 로깅)
- Security(보안)
- Integration(통합)
mongodb → bigquery → google sheet Dataflow
Dataflow에 대한 과정은 아래와 같다.
Enable API →BigQuery Service Account 생성 및 권한 부여 → Google Sheet 생성 및 권한부여 →
BigQuery Dataset 생성 → Cloud-function용 storage 생성 →
mongodb → bigquery table workflow → bigquery table → googlesheet workflow
차트는 Mermaid Live Editor를 활용해서 그렸다.
flowchart TD
Z["Enable API Service"] --> A["Create BigQuery Service Account and Grant Permission"]
A --> B["Create Google Sheet and Grant Permission"]
B --> C["Create BigQuery Dataset"]
C --> D["Create Storage for Cloud-function"]
D --> E1["mongodb → bigquery table workflow"]
E1 --> F1["Compress Zip file (source code)"]
E1 --> G1["Upload Zip file (source code) to bucket"]
E1 --> H1["Create cloud function"]
E1 --> I1["Create cloud scheduler"]
D --> E2["bigquery table → googlesheet workflow"]
E2 --> F2["Compress Zip file (source code)"]
E2 --> G2["Upload Zip file (source code) to bucket"]
E2 --> H2["Create cloud function"]
E2 --> I2["Create cloud scheduler"]
IaC 도구를 활용한 Dataflow 구축
IaC 도구를 활용해서 Dataflow를 구축할 수 있다. 2가지의 IaC 도구를 사용하여 구축해 볼 예정이다.
- Terraform
- Pulumi
Terraform
소스코드는 Github에 전부 작성하였다.
https://github.com/somaz94/terraform-infra-gcp/tree/main/project/somaz-bigquery-project
생성되는 순서는 `mongodb → bigquery → google sheet Dataflow` 과정을 참고하면 된다. 혹시 리소스 생성에 대한 dependency에 걸리면 `depends on`을 활용하여 수정해주면 된다.
디렉토리 구조는 아래와 같다. `main.py`는 상황에 맞게 사용할 수 있도록 여러가지 Version으로 작성하였다.
README를 참고하여 진행하면 된다.
somaz-bigquery-project/
├── README.md
├── bigquery-to-google-sheet
│ ├── bigquery.json
│ ├── main.py
│ ├── main.py.all_data
│ ├── main.py.date
│ ├── main.py.single_db
│ ├── main.py.time_UTC
│ └── requirements.txt
├── bigquery.tfvars
├── cloud-storage.tf
├── locals.tf
├── mongodb-bigquery-googlesheet-workflow.tf
├── mongodb-to-bigquery
│ ├── MongoDB_to_BigQuery
│ ├── main.py
│ ├── main.py.local
│ ├── main.py.single_db
│ └── requirement.txt
├── provider.tf
├── terraform-backend.tf
└── variables.tf
Pulumi
Pulumi 소스코드도 마찬가지로 Github에 전부 작성하였다.
https://github.com/somaz94/pulumi-study/tree/main/gcp/python/bigdata-flow-functions
생성되는 순서는 Terraform과 동일하다.
디렉토리 구조는 아래와 같다. `main.py`는 상황에 맞게 사용할 수 있도록 여러가지 Version으로 작성하였다.
README를 참고하여 진행하면 된다.
bigdata-flow-functions/
├── Pulumi.yaml
├── README.md
├── __main__.py
├── bigquery-to-google-sheet
│ ├── bigquery.json
│ ├── main.py
│ ├── main.py.all_data
│ ├── main.py.date
│ ├── main.py.single_db
│ ├── main.py.time_UTC
│ └── requirements.txt
├── bq_dataset.py
├── bq_sheet_archive.py
├── bq_sheet_function.py
├── config.py
├── mdb_bq_archive.py
├── mdb_bq_function.py
├── mongodb-to-bigquery
│ ├── main.py
│ ├── main.py.local
│ ├── main.py.single_db
│ └── requirements.txt
├── requirements.txt
├── scheduler_manager.py
├── storage.py
└── utils.py
Reference
https://medium.com/analytics-vidhya/etl-with-dataflow-bigquery-bfaf22fbd0d0
https://github.com/somaz94/terraform-infra-gcp/tree/main/project/somaz-bigquery-project
https://console.cloud.google.com/storage/browser/dataflow-templates/latest
https://github.com/somaz94/pulumi-study/tree/main/gcp/python/bigdata-flow-functions
https://github.com/somaz94/terraform-infra-gcp/tree/main/project/somaz-bigquery-project
'GCP' 카테고리의 다른 글
GCP를 활용한 데이터 자동화(MongoDB, CloudSQL, GA, Dune) (2) | 2023.12.22 |
---|---|
Shared VPC를 사용하여 GKE 클러스터 생성시 IAM 설정 (0) | 2023.10.08 |
GCP BigQuery란? & Data Warehouse (0) | 2023.05.21 |
GCP vs AWS 리소스 비교 (1) | 2023.05.05 |
GCP IAM이란? (0) | 2023.04.17 |