Cloud Composer 환경 아키텍처

환경을 만들면 Cloud Composer가 Google 관리 테넌트 프로젝트와 고객 프로젝트 간에 환경 리소스를 분산시킵니다.

환경 구성

Cloud Composer 환경은 공개 IP, 비공개 IP, 도메인 제한 공유(DRS)의 세 가지 구성으로 만들 수 있습니다. 각 구성은 프로젝트 리소스의 아키텍처를 약간 변경합니다.

공개 IP

공개 IP 구성에서 환경 리소스는 고객과 테넌트 프로젝트 간에 배포됩니다. 테넌트 프로젝트는 Airflow 데이터베이스를 실행하기 위한 Cloud SQL 인스턴스와 Google App Engine Flex VM을 호스팅하여 Airflow 웹 서버를 실행합니다.

아래 그림과 같이 Airflow 스케줄러, 작업자, 웹 서버는 Cloud SQL 프록시 프로세스를 사용하여 Airflow 데이터베이스에 연결합니다.

테넌트 프로젝트 및 고객 프로젝트의 공개 IP Cloud Composer 환경 리소스(확대하려면 클릭)
Cloud Composer 공개 IP 아키텍처 (확대하려면 클릭)

비공개 IP

비공개 IP 구성에서 Cloud Composer 리소스는 고객과 테넌트 프로젝트 간에 배포됩니다. 테넌트 프로젝트는 Airflow 데이터베이스를 실행하기 위한 Cloud SQL 인스턴스와 Google App Engine Flex VM을 호스팅하여 Airflow 웹 서버와 Cloud SQL 프록시 프로세스를 실행합니다.

Airflow 스케줄러와 작업자는 GKE 클러스터에서 실행되는 HAProxy 프로세스를 사용하여 테넌트 프로젝트에서 실행 중인 Cloud SQL 프록시 프로세스에 연결됩니다. HAProxy 프로세스는 아래 그림과 같이 테넌트 프로젝트에서 실행 중인 두 Cloud SQL 프록시 간의 프록시 인스턴스에 트래픽을 부하 분산합니다.

테넌트 프로젝트 및 고객 프로젝트의 비공개 IP Cloud Composer 환경 리소스(확대하려면 클릭)
Cloud Composer 비공개 IP 아키텍처(확대하려면 클릭)

도메인 제한 공유 조건이 있는 비공개 IP

도메인 제한 공유 조직 정책이 사용 설정된 경우 Cloud Composer는 테넌트 프로젝트에 웹 서버가 직접 액세스할 수 있는 추가 버킷을 만듭니다. Cloud Composer GKE 클러스터에서도 추가 프로세스가 실행되어 고객 프로젝트에 있는 Cloud Storage 버킷의 데이터를 테넌트 프로젝트에 있는 Cloud Storage 버킷과 동기화합니다.

테넌트 프로젝트 및 고객 프로젝트의 DRS Cloud Composer 환경 리소스(확대하려면 클릭)
Cloud Composer DRS 아키텍처(확대하려면 클릭)

테넌트 프로젝트 리소스

Cloud Composer는 통합 ID 및 액세스 관리 액세스 제어 및 데이터 보안 강화를 위해 Cloud SQL 및 App Engine을 테넌트 프로젝트에 배포합니다.

Cloud SQL

Cloud SQL은 Airflow 메타데이터를 저장합니다. Cloud Composer는 환경을 만드는 데 사용된 기본 또는 지정된 커스텀 서비스 계정만 데이터베이스 액세스를 허용하여 민감한 연결 및 워크플로 정보를 보호합니다. Cloud Composer는 데이터 손실 가능성을 최소화하기 위해 Airflow 메타데이터를 매일 백업합니다.

Cloud Composer 환경을 만드는 데 사용하는 서비스 계정은 Cloud SQL 데이터베이스의 데이터에 액세스할 수 있는 유일한 계정입니다. Cloud Composer는 애플리케이션, 클라이언트 또는 기타 Google Cloud 서비스에서 Cloud SQL 데이터베이스로의 액세스를 원격으로 승인하기 위해 GKE 클러스터에 Cloud SQL 프록시를 제공합니다.

App Engine

App Engine 가변형 환경은 Airflow 웹 서버를 호스팅합니다. 기본적으로 Airflow 웹 서버는 IAP(Identity-Aware Proxy)와 통합되어 있습니다. Cloud Composer에서는 IAP 통합 세부정보가 숨겨져 있으며 Cloud Composer IAM 정책을 사용하여 웹 서버 액세스를 관리할 수 있습니다. Airflow 웹 서버에만 액세스 권한을 부여하려면 composer.user 역할을 할당하거나 개발자 환경의 다른 리소스에 대한 액세스 권한을 제공하는 다른 Cloud Composer 역할을 할당하면 됩니다. 또한 추가 액세스 제어 요구사항이 있는 조직에서 Cloud Composer는 고객 프로젝트에 자체 관리형 Airflow 웹 서버를 배포할 수 있도록 지원합니다.

고객 프로젝트 리소스

Cloud Composer는 고객 프로젝트에 Cloud Storage, Google Kubernetes Engine, Cloud Logging, Cloud Monitoring을 배포합니다.

Cloud Storage

Cloud Storage는 DAG, 플러그인, 데이터 종속 항목, 로그를 스테이징할 수 있도록 스토리지 버킷을 제공합니다. 워크플로(DAG)를 배포하려면 사용자 환경의 버킷으로 파일을 복사합니다. Cloud Composer가 작업자, 스케줄러, 웹 서버 간의 DAG 동기화 작업을 처리합니다. Cloud Storage를 사용하면 크기 제한에 대한 염려 없이 data/ 폴더와 logs/ 폴더에 워크플로 아티팩트를 저장하고 데이터 액세스를 완벽하게 제어할 수 있습니다.

Google Kubernetes Engine

기본적으로 Cloud Composer는 Airflow 스케줄러, 워커 노드, CeleryExecutor와 같은 핵심 구성요소를 GKE에 배포합니다. 또한 Cloud Composer는 확장성 및 보안 강화를 위해 별칭 IP를 사용하는 VPC 기반 클러스터도 지원합니다.

CeleryExecutor의 메시지 브로커인 Redis는 StatefulSet 애플리케이션으로 실행되므로 컨테이너를 다시 시작해도 메시지가 유지됩니다.

GKE에서 스케줄러와 작업자를 실행하면 KubernetesPodOperator를 사용하여 모든 컨테이너 작업 부하를 실행할 수 있습니다. 기본적으로 Cloud Composer는 보안 취약점으로부터 GKE 클러스터를 보호하도록 자동 업그레이드자동 복구를 사용 설정합니다.

Airflow 작업자 및 스케줄러 노드, Airflow 웹 서버는 서로 다른 서비스 계정에서 실행됩니다.

  • 스케줄러 및 작업자: 환경을 만들 때 서비스 계정을 지정하지 않으면 환경이 기본 Compute Engine 서비스 계정에서 실행됩니다.
  • 웹 서버: 서비스 계정은 환경을 만들 때 자동으로 생성되며 웹 서버 도메인에서 파생됩니다. 예를 들어 도메인이 foo-tp.appspot.com이면 서비스 계정은 foo-tp@appspot.gserviceaccount.com입니다.

환경 세부정보에서 serviceAccountairflowUri 정보를 확인할 수 있습니다.

Cloud Logging 및 Cloud Monitoring

Cloud Composer는 Cloud Logging 및 Cloud Monitoring과 통합되므로 모든 Airflow 서비스와 워크플로 로그를 중앙에서 볼 수 있습니다.

Cloud Logging의 스트리밍 특성으로 인해 Airflow 로깅 모듈 동기화를 기다릴 필요 없이 Airflow 스케줄러와 작업자가 내보낸 로그를 즉시 볼 수 있습니다. 그리고 Cloud Composer에 대한 Cloud Logging 로그는 google-fluentd를 기반으로 하므로 스케줄러와 작업자 컨테이너가 생성하는 모든 로그에 액세스할 수 있습니다. 이러한 로그는 디버깅을 크게 개선하고, 유용한 시스템 수준 및 Airflow 종속성 정보를 포함합니다.

Cloud Monitoring은 Cloud Composer에서 측정항목, 이벤트, 메타데이터를 수집하여 대시보드와 차트를 통해 유용한 정보를 생성합니다.

Airflow 구성 정보

일부 Airflow 매개변수는 Cloud Composer 환경에 맞게 사전 구성되어 있으며, 변경할 수 없습니다. 다른 매개변수는 환경을 만들 때 구성합니다.

Cloud Composer는 워크플로를 성공적으로 실행하기 위해 다음 구성을 사용합니다.

  • Cloud Composer 서비스 백엔드는 구독을 사용하여 Pub/Sub를 통해 GKE 서비스 에이전트를 조정하며 Pub/Sub의 기본 동작을 사용하여 메시지를 관리합니다. .*-composer-.* 주제를 삭제하지 마세요. Pub/Sub는 프로젝트당 주제를 최대 10,000개까지 지원합니다.
  • Cloud Composer 서비스는 Cloud Logging을 사용하여 로깅을 조정합니다. Google Cloud 프로젝트의 로그 수를 제한하려면 모든 로그 수집을 중지하면 됩니다. Logging을 중지하지 마세요.
  • Cloud Composer 서비스 계정의 ID 및 액세스 관리 정책 binding을 수정하지 마세요(예: service-your-project-number@cloudcomposer-accounts.iam.gserviceaccount.com).
  • Airflow 데이터베이스 스키마를 변경하지 마세요.

중요사항

  • Cloud Composer가 Airflow 배포 시 사용하는 독립형 Google Cloud 제품에 적용되는 할당량 또는 한도는 Cloud Composer 환경에도 적용됩니다.
  • 안정적인 Airflow 버전을 실행하는 Cloud Composer 출시 버전에는 이후 Airflow 버전에서 백포트된 Airflow 업데이트가 포함될 수 있습니다.
  • 작업자 및 스케줄러 노드는 용량이 다르며 Airflow 웹 서버와 다른 서비스 계정으로 실행됩니다. Airflow 웹 서버에서 DAG 오류를 방지하려면 웹 서버가 DAG 파싱 시 액세스할 수 없는 Google Cloud 리소스에 액세스하거나 고강도 컴퓨팅을 수행하지 마세요.
  • 환경을 삭제해도 고객 프로젝트에서 개발자 환경의 Cloud Storage 버킷, Logging 로그, GKE 클러스터에서 실행되는 Redis 큐에서 사용되는 Persistent Disk는 삭제되지 않습니다. Google Cloud 계정에 비용이 청구되지 않도록 하려면 필요에 따라 데이터를 내보낸 후 삭제합니다.