새소식

반응형
GCP

[GCP] Composer를 Git repo에 연동

  • -
반응형

안녕하세요. 

최근 이직으로 인해서 오랜만에 인사를 드립니다. 이직을 하면서 새로운 환경에서 새로운 데이터 파이프라인을 만들다 보니 처음 접하는 도구를 사용하는 일이 많아졌습니다. GCP에 새로운 기능이 많이 생겼고 인원이 없는 경우 Saas를 이용해서 빠르게 무언가를 구축해야 하는 경우가 있어서 이번에는 GCP의 Composer를 사용하게 되었습니다. 

 


Composer란? 

 

https://cloud.google.com/composer/docs/composer-2/run-apache-airflow-dag

 

빠른 시작: Cloud Composer 2에서 Apache Airflow DAG 실행  |  Google Cloud

Cloud Composer 환경을 만들고 Cloud Composer 2에서 Apache Airflow DAG를 실행합니다.

cloud.google.com

GCP는 AWS와 다르게 공식문서가 정말 깔끔하게 정리되어 있습니다. Composer가 무엇인지 공식문서를 보신다면 빠르고 쉽게 이해가 될 것 같습니다. Composer를 간단하게 설명하면 GCP에서 Saas 형태로 제공하는 Airflow입니다. 

 

Composer는 1,2가 있는데 저는 2를 사용하였습니다. 1을 사용해보진 않았으나 2와는 많이 다르다고 하며 2의 경우 GKE(Google Kubernetes Engine) 위에 Airflow를 올리는 방식으로 동작합니다. 하여 Lens와 같은 도구로도 접근이 가능 합니다. 

 

Saas 형태인만큼 우리가 어느정도어느 정도 설정은 가능하지만 대부분의 설정이 기본적으로 제공되며 GCP에서 어느 정도 운영 및 모니터링도 가능합니다. 그렇기 때문에 우리가 현재 하려는 Git의 repo를 연동하는 부분도 바로 연동을 불가능한 것으로 보입니다. (혹시 있으면 알려주세요...)

 


연동 구조 

위에서 언급 했듯이 즉시 연동은 안 되는 것으로 보입니다. Composer에 Dag폴더에 보면 GCS(Google Cloud Storage)로 이미 생성되어 있습니다. 옵션에서 따로 repo를 선택할 수 없는 것으로 보입니다. 그래서 다음과 같은 구조로 GCS와 git을 연동하도록 하였습니다. 

 

그 방법은 GCP의 Cloud Build를 이용하는 것 입니다. 

 

Cloud Build를 이용한 연동 구조

 

Cloud Build를 이용해서 계속해서 GCS와 Sync 하도록 합니다. 몇 가지 간단한 설정으로 Sync가 가능합니다. 여기서 주의할 점은 GCS와 Git 간의 양방향으로 동기화가 아니라는 것입니다. Git repo의 업데이트된 내용만 GCS로 연동 되므로, 연동하기 전에 dags / plugins 등의 폴더를 깨끗하게 비우고 연동하는 게 좋습니다. (나중에 헷갈릴 수 있음)

 


 

연동 방법 

연동하는 방법은 생각보다 간단 합니다. 일단 연동하기 위해서는 사전에 준비물이 몇 가지 필요합니다. 

 

1. git repo 생성

2. cloudbuild.yaml 파일 

 

1번은 당연히 준비를 하셨다고 가정하고 2번을 생성해야 합니다. 이는 어떻게 sync를 할지 설정하는 파일인데, 설정은 다음과 같습니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
steps:
- name: ubuntu
  args: ['bash', '-c', "echo '$COMMIT_SHA' > REVISION.txt"]
- name: gcr.io/cloud-builders/gsutil
  args:
    - '-m'
    - 'rsync'
    - '-d'
    - '-r'
    - 'dags'
    - 'gs://${_GCS_BUCKET}/dags'
- name: gcr.io/cloud-builders/gsutil
  args:
    - '-m'
    - 'rsync'
    - '-d'
    - '-r'
    - 'plugins'
    - 'gs://${_GCS_BUCKET}/plugins'
options:
  logging: CLOUD_LOGGING_ONLY
cs

 

위의 파일을 생성하여 git repo의 가장 상단에 넣어줍니다. 

위의 파일은 repo와 어떻게 연동하는지에 대한 옵션 값이며 위에 내용을 보시면 dags폴더와 plugins 폴더 2개만 연동하도록 하고 있습니다. 어차피 다른 폴더와 파일은 굳이 필요하지 않으므로 2개의 폴더만 연동하게 해 놨습니다.

cloudbuild.yaml 파일을 만든다.

 

이제 Cloud Build를 세팅하도록 하겠습니다. 

이름 , region 세팅

 

이 부분에서 특히 주의해야 하는 것이 리전을 asia-northeast3로 할 경우 오류가 난다는 것입니다. 분명히 만들어지는데, 나중에 다음과 같은 오류가 나옵니다. 분명히 결제 계정 및 전부 연동해놨고 문제가 없는데 다음과 같이 오류가 나옵니다. 나중에 글로벌 리전으로 하였는데, 정상적으로 작동하는 것으로 봐선 무언가 문제가 있는 거 같습니다. 

 

빌드를 트리거하지 못했습니다.: generic::failed_precondition: generic::failed_precondition: due to quota restrictions, cannot run builds in this region

 

다음으로 git을 연동해주는 작업을 하는데 특별한 것은 없습니다. 단순히 git에 권한을 요청하고 연동하는 과정입니다.

 

git repo 세팅

 

그다음으로 아까 만들었던 yaml 파일과 변수를 세팅합니다. git repo 최상단에 yaml 파일을 넣어두셨다면 그냥 그대로 하시면 됩니다. (아닐 경우 Cloud Build 구성 파일 위치 수정)

 

구성 세팅

 

변수에는 _GCS_BUCKET을 넣고 옆에 GCS Bucket명을 넣습니다. (yaml 파일 보시면 변수로 받습니다.) 이렇게 하면 추후에 GCS 버킷이 변경될 경우 유연하게 대처가 가능합니다. 이 모든 세팅을 끝내시면 만들기를 클릭하시면 정상적으로 Cloud Build가 세팅됩니다. 큰 어려움이 없이 세팅이 가능하고 git과 연동해서 사용하시면 정상적으로 작동되는 것을 볼 수 있습니다. 

 

생각보다 엄청나게 빠르게 연동되는 것을 볼 수 있습니다. 하지만 여기서 중요한 게 리전이 서로 다르고 계속해서 감지를 해야 하므로 비용이 많이 발생할 수 있으며 이를 꼭 모니터링하시길 권장드립니다.

 


 

참고

https://engineering.adwerx.com/sync-a-github-repo-to-your-gcp-composer-airflow-dags-folder-2b8 7eb065915

 

Sync a GitHub repo to your GCP Composer (Airflow) DAGs folder

Google Cloud Platform recently released a general-audience hosted Apache Airflow service called Composer. Airflow reads a configured…

engineering.adwerx.com

https://medium.com/@zy.brian/how-to-use-gcp-cloud-build-trigger-gcp-composers-dataflow-job-a 95fe0698dfd

 

How to use GCP cloud build trigger GCP composer’s dataflow job

I am working as data engineer in a Fintech company. My manager assigned me a task which is deploying a data pipline in google cloud…

medium.com

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.