Apache Airflow 웹 사용자 인터페이스에 액세스

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Apache Airflow에는 워크플로(DAG)와 Airflow 환경을 관리하고 관리 작업을 수행하는 데 사용할 수 있는 웹 사용자 인터페이스(UI)가 포함되어 있습니다. 예를 들어 웹 인터페이스를 사용하여 DAG의 진행 상태를 검토하거나, 새 데이터 연결을 설정하거나, 이전 DAG 실행의 로그를 살펴볼 수 있습니다.

Airflow 웹 서버

각 Cloud Composer 환경에는 Airflow 웹 인터페이스를 실행하는 웹 서버가 있습니다. 웹 서버는 Cloud Composer 환경 아키텍처의 일부입니다.

웹 서버는 dags/ 폴더의 DAG 정의 파일을 파싱하고 DAG의 데이터와 리소스에 액세스하여 DAG를 로드하고 HTTP 요청을 처리할 수 있어야 합니다.

웹 서버는 60초 간격으로 DAG를 새로 고침합니다(Cloud Composer의 기본 worker_refresh_interval). 웹 서버가 새로고침 간격 내에 모든 DAG를 파싱할 수 없으면 웹 서버 오류가 발생할 수 있습니다.

DAG 파일 수가 많거나 DAG 파일을 로드하는 워크로드가 상당하면 DAG를 로드하는 데 60초 이상이 소요될 수 있습니다. 웹 서버가 DAG 로드 시간과 관계없이 액세스할 수 있도록 하려면 사전 구성된 간격으로 백그라운드에서 DAG를 파싱 및 로드하도록 비동기 DAG 로드를 구성하면 됩니다(composer-1.7.1-airflow-1.10.2 이상 버전에서 구성 가능). 이렇게 구성하면 DAG 새로고침 시간이 단축될 수도 있습니다.

작업자 새로고침 간격 초과 외에도 웹 서버는 대부분의 경우 DAG 로드 실패를 정상적으로 처리할 수 있습니다. DAG로 인해 웹 서버가 다운되거나 종료될 경우 브라우저에 오류가 반환될 수 있습니다. 자세한 내용은 DAG 문제 해결을 참조하세요.

DAG 파싱으로 인해 웹 서버 문제가 계속 발생할 경우에는 비동기 DAG 로드를 사용하는 것이 좋습니다.

시작하기 전에

  • Cloud Composer 환경을 볼 수 있는 역할이 있어야 합니다. 자세한 내용은 액세스 제어를 참조하세요.

  • 환경 생성 중에 Cloud Composer는 Airflow 웹 인터페이스를 실행하는 웹 서버의 URL을 구성합니다. 이 URL을 맞춤설정할 수 없습니다.

  • Airflow 웹 인터페이스의 Airflow UI 액세스 제어(Airflow 역할 기반 액세스 제어) 기능은 Composer 버전 1.13.4 이상, Airflow 버전 1.10.10 이상, Python 3을 실행하는 Cloud Composer 환경에서 지원됩니다.

Airflow 웹 인터페이스에 액세스

Airflow 웹 서버 서비스는 appspot.com 도메인에 배포되며 Airflow 웹 인터페이스에 대한 액세스를 제공합니다. Cloud Composer 1은 사용자에 대해 정의된 사용자 ID 및 IAM 정책 바인딩을 기반으로 인터페이스에 대해 액세스 권한을 제공합니다. Cloud Composer 1은 이를 위해 IAP(Identity-Aware Proxy)를 사용합니다.

새 Cloud Composer 환경을 만든 후 웹 인터페이스에서 호스팅을 종료하고 액세스 가능 상태가 되는데 최대 25분이 소요됩니다.

Google Cloud 콘솔을 통해 웹 인터페이스에 액세스

Google Cloud 콘솔에서 Airflow 웹 인터페이스에 액세스하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 환경 페이지로 이동합니다.

    환경으로 이동

  2. Airflow 웹 서버 열에서 해당 환경의 Airflow 링크를 따릅니다.

  3. 적절한 권한을 가진 Google 계정으로 로그인합니다.

Airflow 웹 서버에 대한 액세스 제한

Composer 환경을 사용하면 Airflow 웹 서버에 대한 액세스를 제한할 수 있습니다.

  • 모든 액세스를 차단하거나 특정 IPv4 또는 IPv6 외부 IP 범위로부터의 액세스를 허용할 수 있습니다.
  • 비공개 IP 주소를 사용하여 허용되는 IP 범위를 구성할 수 없습니다.

gcloud 명령줄 도구를 통해 웹 인터페이스 URL 검색

모든 웹브라우저에서 Airflow 웹 인터페이스에 액세스할 수 있습니다. 웹 인터페이스의 URL을 가져오려면 다음 gcloud 명령어를 입력합니다.

gcloud composer environments describe ENVIRONMENT_NAME \
  --location LOCATION

다음을 바꿉니다.

  • ENVIRONMENT_NAME: 환경의 이름입니다.
  • LOCATION: 환경이 위치한 리전

gcloud 명령어는 웹 인터페이스의 URL을 비롯해 Cloud Composer 환경의 속성을 보여줍니다. URL은 airflowUri로 나열됩니다.

config:
  airflowUri: https://example-tp.appspot.com

비동기 DAG 로드 구성

비동기 DAG 로드가 사용 설정된 경우 Airflow 웹 서버가 새 프로세스를 만듭니다. 이 프로세스는 백그라운드에서 DAG를 로드하고 dagbag_sync_interval 옵션으로 정의된 간격에 따라 새로 로드된 DAG를 전송한 후 절전 모드로 전환됩니다.

이 프로세스는 주기적으로 절전 모드를 해제하여 DAG를 다시 로드하며, 간격은 collect_dags_interval 옵션으로 정의합니다.

비동기 DAG 로드를 사용 설정하려면 다음 안내를 따르세요.

  1. DAG 직렬화 사용 중지. 비동기 DAG 로드는 DAG 직렬화에 사용할 수 없습니다. async_dagbag_loaderstore_serialized_dags Airflow 구성 옵션을 사용하면 HTTP 503 오류가 발생하고 환경이 손상됩니다.

  2. 다음 Airflow 구성 옵션을 재정의하세요.

    섹션 참고
    webserver async_dagbag_loader True 기본값은 False입니다.
    webserver collect_dags_interval 30 기본값은 30입니다. 더 작은 값을 사용하면 더 빠르게 새로 고칠 수 있습니다.
    webserver dagbag_sync_interval 10 기본값은 10입니다.
    webserver worker_refresh_interval 3600 기본값은 60입니다. 비동기 DAG 로드의 경우 더 긴 새로고침 간격을 사용할 수 있습니다.

웹 서버 다시 시작

Cloud Composer 환경 디버깅 또는 문제 해결 시 일부 문제는 Airflow 웹 서버를 다시 시작하여 해결할 수 있습니다. restartWebServer API 또는 restart-web-server gcloud 명령어를 사용하여 웹 서버를 다시 시작할 수 있습니다.

gcloud beta composer environments restart-web-server ENVIRONMENT_NAME \
  --location=LOCATION

웹 서버 네트워크 액세스 구성

Airflow 웹 서버 액세스 매개변수는 환경 유형에 따라 달라지지 않습니다. 대신 웹 서버 액세스를 별도로 구성하세요. 예를 들어 비공개 IP 환경은 인터넷에서 Airflow UI에 계속 액세스할 수 있습니다.

비공개 IP 주소를 사용하여 허용되는 IP 범위를 구성할 수 없습니다.

콘솔

  1. Google Cloud 콘솔에서 환경 페이지로 이동합니다.

    환경으로 이동

  2. 환경 목록에서 환경 이름을 클릭합니다. 환경 세부정보 페이지가 열립니다.

  3. 환경 구성 탭으로 이동합니다.

  4. 네트워크 구성 섹션에서 웹 서버 액세스 제어 항목을 찾고 수정을 클릭합니다.

  5. 웹 서버 네트워크 액세스 제어 대화상자에서 다음 안내를 따르세요.

    • 모든 IP 주소의 Airfow 웹 서버에 대한 액세스 권한을 제공하려면 모든 IP 주소의 액세스 허용을 선택합니다.

    • 특정 IP 범위로만 액세스를 제한하려면 특정 IP 주소에서만 액세스 허용을 선택합니다. IP 범위 필드에서 CIDR 표기법으로 IP 범위를 지정합니다. 설명 필드에 이 범위의 설명(선택사항)을 지정합니다. 범위를 두 개 이상 지정하려면 IP 범위 추가를 클릭합니다.

    • 모든 IP 주소의 액세스를 금지하려면 특정 IP 주소에서만 액세스 허용을 선택하고 빈 범위 항목 옆에 있는 항목 삭제를 클릭합니다.

gcloud

환경을 업데이트할 때 다음 인수가 웹 서버 액세스 매개변수를 제어합니다.

  • --web-server-allow-all은 모든 IP 주소의 Airflow에 대한 액세스를 제공합니다. 기본 옵션입니다.

  • --web-server-allow-ip는 특정 소스 IP 범위로만 액세스를 제한합니다. 여러 IP 범위를 지정하려면 이 인수를 여러 번 사용합니다.

  • --web-server-deny-all은 모든 IP 주소의 액세스를 금지합니다.

gcloud composer environments update ENVIRONMENT_NAME \
    --location LOCATION \
    --web-server-allow-ip ip_range=WS_IP_RANGE,description=WS_RANGE_DESCRIPTION

다음을 바꿉니다.

  • ENVIRONMENT_NAME: 환경의 이름입니다.
  • LOCATION: 환경이 위치한 리전
  • WS_IP_RANGE: CIDR 표기법으로 나타낸 IP 범위. Airflow UI에 액세스할 수 있습니다.
  • WS_RANGE_DESCRIPTION: IP 범위에 대한 설명.

예를 들면 다음과 같습니다.

gcloud composer environments update example-environment \
    --location us-central1 \
    --web-server-allow-ip ip_range=192.0.2.0/24,description="office net 1" \
    --web-server-allow-ip ip_range=192.0.4.0/24,description="office net 3"

API

  1. [environments.patch][api-patch] API 요청을 작성합니다.

  2. 이 요청의 작성 방법:

    1. updateMask 매개변수에서 config.webServerNetworkAccessControl 마스크를 지정합니다.

    2. 요청 본문에서 Airflow 태스크 로그가 저장되는 방법을 지정합니다.

      • 모든 IP 주소에서 Airflow에 대한 액세스를 제공하려면 빈 config 요소를 지정합니다(webServerNetworkAccessControl 요소가 없어야 함).

      • 특정 IP 범위로만 액세스를 제한하려면 allowedIpRanges에 하나 이상의 범위를 지정합니다.

      • 모든 IP 주소의 액세스를 금지하려면 빈 webServerNetworkAccessControl 요소를 지정합니다. webServerNetworkAccessControl 요소는 있어야 하지만 allowedIpRanges 요소를 포함해서는 안 됩니다.

{
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "WS_IP_RANGE",
          "description": "WS_RANGE_DESCRIPTION"
        }
      ]
    }
  }
}

다음을 바꿉니다.

  • WS_IP_RANGE: CIDR 표기법으로 나타낸 IP 범위. Airflow UI에 액세스할 수 있습니다.
  • WS_RANGE_DESCRIPTION: IP 범위에 대한 설명.

예를 들면 다음과 같습니다.

// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.webServerNetworkAccessControl

{
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "192.0.2.0/24",
          "description": "office net 1"
        },
        {
          "value": "192.0.4.0/24",
          "description": "office net 3"
        }
      ]
    }
  }
}

Terraform

allowed_ip_range 블록의 web_server_network_access_control에서 웹 서버에 액세스할 수 있는 IP 범위를 지정합니다.

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    web_server_network_access_control {

      allowed_ip_range {
        value = "WS_IP_RANGE"
        description = "WS_RANGE_DESCRIPTION"
      }

    }

  }
}

다음과 같이 바꿉니다.

  • WS_IP_RANGE를 CIDR 표기법으로 나타낸 IP 범위로 바꿉니다. Airflow UI에 액세스할 수 있습니다.
  • WS_RANGE_DESCRIPTION을 IP 범위 설명으로 바꿉니다.

예를 들면 다음과 같습니다.

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    web_server_network_access_control {
      allowed_ip_range {
        value = "192.0.2.0/24"
        description = "office net 1"
      },
      allowed_ip_range {
        value = "192.0.4.0/24"
        description = "office net 3"
      }

    }
}

다음 단계