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 웹 인터페이스에 액세스하려면 다음 안내를 따르세요.
Google Cloud 콘솔에서 환경 페이지로 이동합니다.
Airflow 웹 서버 열에서 해당 환경의 Airflow 링크를 따릅니다.
적절한 권한을 가진 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 로드를 사용 설정하려면 다음 안내를 따르세요.
DAG 직렬화 사용 중지. 비동기 DAG 로드는 DAG 직렬화에 사용할 수 없습니다.
async_dagbag_loader
및store_serialized_dags
Airflow 구성 옵션을 사용하면 HTTP 503 오류가 발생하고 환경이 손상됩니다.다음 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 범위를 구성할 수 없습니다.
콘솔
Google Cloud 콘솔에서 환경 페이지로 이동합니다.
환경 목록에서 환경 이름을 클릭합니다. 환경 세부정보 페이지가 열립니다.
환경 구성 탭으로 이동합니다.
네트워크 구성 섹션에서 웹 서버 액세스 제어 항목을 찾아 수정을 클릭합니다.
웹 서버 네트워크 액세스 제어 대화상자에서 다음 안내를 따르세요.
모든 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
[
environments.patch
][api-patch] API 요청을 작성합니다.이 요청의 작성 방법:
updateMask
매개변수에서config.webServerNetworkAccessControl
마스크를 지정합니다.요청 본문에서 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"
}
}
}