환경 아키텍처

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

이 페이지에서는 Cloud Composer 환경 아키텍처를 설명합니다.

환경 아키텍처 구성

Cloud Composer 1 환경에서 가능한 아키텍처 구성은 다음과 같습니다.

고객 및 테넌트 프로젝트

환경을 만들 때 Cloud Composer는 테넌트와 고객 프로젝트 사이에 환경 리소스를 배포합니다.

  • 고객 프로젝트는 환경을 만드는 Google Cloud 프로젝트입니다. 단일 고객 프로젝트에서 2개 이상의 환경을 만들 수 있습니다.

테넌트 프로젝트는 Google에서 관리되는 테넌트 프로젝트입니다. 테넌트 프로젝트는 해당 환경에 통합된 액세스 제어 및 추가적인 데이터 보안 레이어를 제공합니다. 각 Cloud Composer 환경에는 고유 테넌트 프로젝트가 포함됩니다.

환경 구성요소

Cloud Composer 환경은 환경 구성요소로 구성됩니다.

환경 구성요소는 환경의 일부로 Google Cloud에서 실행되는 관리형 Airflow 인프라의 요소입니다. 환경 구성요소는 해당 환경의 테넌트 고객 프로젝트에서 실행됩니다.

환경 클러스터

환경 클러스터가 사용자 환경의 표준 모드 VPC 기반이거나 경로 기반 Google Kubernetes Engine 클러스터인 경우:

기본적으로 Cloud Composer는 보안 취약점으로로부터 환경 클러스터를 보호하기 위해 노드 자동 업그레이드노드 자동 복구를 사용 설정합니다. 이러한 작업은 환경에 대해 지정한 유지보수 기간에 수행됩니다.

환경 버킷

환경 버킷은 DAG, 플러그인, 데이터 종속 항목 및 Airflow 로그를 저장하는 Cloud Storage 버킷입니다. 환경 버킷은 고객 프로젝트에 있습니다.

환경 버킷의 /dags 폴더에 DAG 파일을 업로드하면 Cloud Composer가 DAG를 해당 환경의 Airflow 구성요소에 동기화합니다.

Airflow 웹 서버

Airflow 웹 서버는 환경의 Airflow UI를 실행합니다.

Cloud Composer 1에서 Airflow 웹 서버는 환경의 테넌트 프로젝트에서 실행됩니다.

Airflow 웹 서버는 IAP(Identity-Aware Proxy)와 통합되어 있습니다. Cloud Composer에서 IAP 통합 세부정보는 숨겨지고, 사용자에 대해 정의된 사용자 ID 및 IAM 정책 바인딩을 기반으로 웹 서버에 대한 액세스를 제공합니다.

Cloud Composer 1에서 Airflow 웹 서버는 Airflow 작업자 및 Airflow 스케줄러와 다른 서비스 계정으로 실행됩니다. 웹 서버의 서비스 계정은 환경을 만들 때 자동으로 생성되고, 웹 서버 도메인에서 파생됩니다. 예를 들어 도메인이 example.appspot.com이면 서비스 계정은 example@appspot.gserviceaccount.com입니다.

Airflow 데이터베이스

Airflow 데이터베이스는 해당 환경의 테넌트 프로젝트에서 실행되는 Cloud SQL 인스턴스입니다. 이 데이터베이스는 Airflow 메타데이터 데이터베이스를 호스팅합니다.

Cloud Composer는 환경의 서비스 계정에만 데이터베이스 액세스를 허용하여 민감한 연결 및 워크플로 정보를 보호합니다.

기타 Airflow 구성요소

환경에서 실행되는 다른 Airflow 구성요소는 다음과 같습니다.

  • Airflow 스케줄러는 DAG 정의 파일을 파싱하고 일정 간격에 따라 DAG 실행을 예약하고 Airflow 작업자의 실행을 위해 태스크를 큐에 추가합니다. Cloud Composer 1에서 Airflow DAG 프로세서는 스케줄러 구성요소의 일부로 실행됩니다.

  • Airflow 작업자는 Airflow 스케줄러에서 예약된 태스크를 실행합니다.

공개 IP 환경 아키텍처

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

Cloud Composer 1의 공개 IP 환경 아키텍처에서 다음 안내를 따르세요.

  • 테넌트 프로젝트는 Cloud SQL 인스턴스, Cloud SQL 스토리지, Airflow 웹 서버를 실행하는 App Engine Flex 인스턴스를 호스팅합니다.
  • 고객 프로젝트는 해당 환경의 다른 모든 구성요소를 호스팅합니다.
  • 고객 프로젝트의 Airflow 스케줄러 및 작업자는 고객 프로젝트에 있는 Cloud SQL 프록시 인스턴스를 통해 Airflow 데이터베이스와 통신합니다.
  • 테넌트 프로젝트의 Airflow 웹 서버는 테넌트 프로젝트에 있는 Cloud SQL 프록시 인스턴스를 통해 Airflow 데이터베이스와 통신합니다.

비공개 IP 환경 아키텍처

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

비공개 IP 환경 아키텍처에서 다음이 수행됩니다.

  • 테넌트 프로젝트는 Cloud SQL 인스턴스, Cloud SQL 스토리지, Airflow 웹 서버를 실행하는 두 개의 App Engine 인스턴스를 호스팅합니다.
  • 고객 프로젝트는 해당 환경의 다른 모든 구성요소를 호스팅합니다.
  • Airflow 스케줄러와 작업자는 환경 클러스터의 HAProxy 프로세스를 통해 Airflow 데이터베이스에 연결합니다.
  • HAProxy 프로세스는 테넌트 프로젝트에 있는 두 Cloud SQL 프록시 인스턴스 간의 Cloud SQL 인스턴스에 트래픽을 부하 분산합니다. 고객 프로젝트가 네트워크 제한으로 인해 데이터베이스에 직접 액세스하지 않으므로 비공개 IP 환경은 2개의 Cloud SQL 프록시 인스턴스를 사용합니다. 환경 구성요소가 데이터베이스에 항상 액세스할 수 있도록 하려면 두 개의 인스턴스가 필요합니다.

DRS를 사용하는 비공개 IP

테넌트 프로젝트 및 고객 프로젝트의 DRS를 사용하는 비공개 IP Cloud Composer 환경 리소스입니다(확대하려면 클릭).
그림 3. 비공개 IP 환경 아키텍처(확대하려면 클릭)

프로젝트에서 도메인 제한 공유(DRS) 조직 정책이 사용 설정된 경우 Cloud Composer는 DRS 환경 아키텍처에서 비공개 IP를 사용합니다.

DRS를 사용하는 비공개 IP 환경 아키텍처에서 다음을 수행합니다.

  • 테넌트 프로젝트는 Cloud SQL 인스턴스, Cloud SQL 스토리지, Airflow 웹 서버를 실행하는 두 개의 App Engine 인스턴스를 호스팅합니다.

  • 이 테넌트 프로젝트는 추가 환경의 버킷을 호스팅합니다. Airflow 웹 서버는 이 버킷에 직접 액세스합니다.

  • 고객 프로젝트는 해당 환경의 다른 모든 구성요소를 호스팅합니다.

  • 고객 프로젝트는 해당 환경의 클러스터에서 버킷 동기화 프로세스를 호스팅합니다. 이 프로세스는 2개의 환경 버킷을 동기화합니다.

  • Airflow 스케줄러와 작업자는 환경 클러스터의 HAProxy 프로세스를 통해 Airflow 데이터베이스에 연결합니다.

  • HAProxy 프로세스는 테넌트 프로젝트에 있는 두 Cloud SQL 프록시 인스턴스 간의 Cloud SQL 인스턴스에 트래픽을 부하 분산합니다. 고객 프로젝트가 네트워크 제한으로 인해 데이터베이스에 직접 액세스하지 않으므로 비공개 IP 환경은 2개의 Cloud SQL 프록시 인스턴스를 사용합니다. 환경 구성요소가 데이터베이스에 항상 액세스할 수 있도록 하려면 두 개의 인스턴스가 필요합니다.

Cloud Logging 및 Cloud Monitoring과의 통합

Cloud Composer는 Google Cloud 프로젝트의 Cloud Logging 및 Cloud Monitoring과 통합되므로 Airflow 및 DAG 로그를 중앙에서 볼 수 있습니다.

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

Cloud Logging의 스트리밍 특성으로 인해 Airflow 로그가 사용자 환경의 Cloud Storage 버킷에 나타날 때까지 기다리는 대신 Airflow 구성요소에서 내보낸 로그를 즉시 볼 수 있습니다.

Google Cloud 프로젝트의 로그 수를 제한하려면 모든 로그 수집을 중지하면 됩니다. Logging을 중지하지 마세요.

다음 단계