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 をロードし、HTTP リクエストを処理するため、DAG のデータとリソースにアクセスできる必要があります。
ウェブサーバーは DAG を 60 秒ごとに更新します。これは、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 では、この目的のために Identity-Aware Proxy を使用します。
新しい Cloud Composer 環境を作成してから、ウェブ インターフェースがホスティングを終了してアクセス可能になるまでに最大で 25 分間かかります。
Google Cloud Console からウェブ インターフェースへのアクセス
Google Cloud Console から Airflow ウェブ インターフェースにアクセスするには:
Google Cloud Console で [環境] ページに移動します。
[Airflow webserver] 列で、ご使用の環境の [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 を読み込み、新たに読み込まれた DAG を dagbag_sync_interval
オプションで定義された間隔で送信して、スリープ状態になります。
プロセスは定期的に起動し、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 Console で [環境] ページに移動します。
環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。
[環境の設定] タブに移動します。
[ネットワークの構成] セクションで、[ウェブサーバーのアクセス制御] 項目を見つけて [編集] をクリックします。
[ウェブサーバーのネットワーク アクセス制御] ダイアログで、次の操作を行います。
すべての IP アドレスから Airflow ウェブサーバーへのアクセスを許可するには、[すべての 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
: Airflow UI にアクセスできる IP 範囲(CIDR 表記)。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
で 1 つ以上の範囲を指定します。すべての IP アドレスに対するアクセスを禁止するには、空の
webServerNetworkAccessControl
要素を指定します。webServerNetworkAccessControl
要素は存在する必要がありますが、その中にallowedIpRanges
要素を含めることはできません。
{
"config": {
"webServerNetworkAccessControl": {
"allowedIpRanges": [
{
"value": "WS_IP_RANGE",
"description": "WS_RANGE_DESCRIPTION"
}
]
}
}
}
次のように置き換えます。
WS_IP_RANGE
: Airflow UI にアクセスできる IP 範囲(CIDR 表記)。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
は、Airflow UI にアクセスできる IP 範囲(CIDR 表記)に置き換えます。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"
}
}
}