최근 이직으로 인해서 오랜만에 인사를 드립니다. 이직을 하면서 새로운 환경에서 새로운 데이터 파이프라인을 만들다 보니 처음 접하는 도구를 사용하는 일이 많아졌습니다. GCP에 새로운 기능이 많이 생겼고 인원이 없는 경우 Saas를 이용해서 빠르게 무언가를 구축해야 하는 경우가 있어서 이번에는 GCP의 Composer를 사용하게 되었습니다.
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을 연동하도록 하였습니다.
Cloud Build를 이용해서 계속해서 GCS와 Sync 하도록 합니다. 몇 가지 간단한 설정으로 Sync가 가능합니다. 여기서 주의할 점은 GCS와 Git 간의 양방향으로 동기화가 아니라는 것입니다. Git repo의 업데이트된 내용만 GCS로 연동 되므로, 연동하기 전에 dags / plugins 등의 폴더를 깨끗하게 비우고 연동하는 게 좋습니다. (나중에 헷갈릴 수 있음)
연동 방법
연동하는 방법은 생각보다 간단 합니다. 일단 연동하기 위해서는 사전에 준비물이 몇 가지 필요합니다.
1. git repo 생성
2. cloudbuild.yaml 파일
1번은 당연히 준비를 하셨다고 가정하고 2번을 생성해야 합니다. 이는 어떻게 sync를 할지 설정하는 파일인데, 설정은 다음과 같습니다.
위의 파일은 repo와 어떻게 연동하는지에 대한 옵션 값이며 위에 내용을 보시면 dags폴더와 plugins 폴더 2개만 연동하도록 하고 있습니다. 어차피 다른 폴더와 파일은 굳이 필요하지 않으므로 2개의 폴더만 연동하게 해 놨습니다.
이제 Cloud Build를 세팅하도록 하겠습니다.
이 부분에서 특히 주의해야 하는 것이 리전을 asia-northeast3로 할 경우 오류가 난다는 것입니다. 분명히 만들어지는데, 나중에 다음과 같은 오류가 나옵니다. 분명히 결제 계정 및 전부 연동해놨고 문제가 없는데 다음과 같이 오류가 나옵니다. 나중에 글로벌 리전으로 하였는데, 정상적으로 작동하는 것으로 봐선 무언가 문제가 있는 거 같습니다.
빌드를트리거하지못했습니다.: generic::failed_precondition: generic::failed_precondition: due to quota restrictions, cannot run builds in this region
다음으로 git을 연동해주는 작업을 하는데 특별한 것은 없습니다. 단순히 git에 권한을 요청하고 연동하는 과정입니다.
그다음으로 아까 만들었던 yaml 파일과 변수를 세팅합니다. git repo 최상단에 yaml 파일을 넣어두셨다면 그냥 그대로 하시면 됩니다. (아닐 경우 Cloud Build 구성 파일 위치 수정)
변수에는 _GCS_BUCKET을 넣고 옆에 GCS Bucket명을 넣습니다. (yaml 파일 보시면 변수로 받습니다.) 이렇게 하면 추후에 GCS 버킷이 변경될 경우 유연하게 대처가 가능합니다. 이 모든 세팅을 끝내시면 만들기를 클릭하시면 정상적으로 Cloud Build가 세팅됩니다. 큰 어려움이 없이 세팅이 가능하고 git과 연동해서 사용하시면 정상적으로 작동되는 것을 볼 수 있습니다.
생각보다 엄청나게 빠르게 연동되는 것을 볼 수 있습니다. 하지만 여기서 중요한 게 리전이 서로 다르고 계속해서 감지를 해야 하므로 비용이 많이 발생할 수 있으며 이를 꼭 모니터링하시길 권장드립니다.