Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Apache Airflow には、Airflow DAG の管理、DAG 実行ログの表示、Airflow のモニタリング、管理アクションの実行に使用できる Airflow UI と呼ばれるウェブ ユーザー インターフェースが含まれています。
Airflow ウェブサーバーについて
各 Cloud Composer 環境には、Airflow UI を実行するウェブサーバーが用意されています。ウェブサーバーは Cloud Composer 環境のアーキテクチャの一部です。
始める前に
Cloud Composer 環境を表示できるロールを付与されている必要があります。詳細については、アクセス制御をご覧ください。
環境の作成中に、Cloud Composer によって Airflow UI を実行するウェブサーバーの URL が構成されます。この URL はカスタマイズできません。
Cloud Composer 2 は、Airflow UI の Airflow UI アクセス制御(Airflow ロールベース アクセス制御)機能をサポートしています。
[API の制御] > [未設定のサードパーティ製アプリ] > [ユーザーにサードパーティ製アプリへのアクセスを許可しない] オプションが Google Workspace で有効になっており、Cloud Composer アプリの Apache Airflow が明示的に許可されていない場合、アプリケーションを明示的に許可しない限り、ユーザーは Airflow UI にアクセスできません。アクセスを許可するには、Google Workspace で Airflow UI へのアクセスを許可するの手順を実施します。
Chrome Enterprise Premium のコンテキストアウェア アクセス バインディングが、デバイス属性に依存するアクセスレベルで使用され、Cloud Composer アプリの Apache Airflow が除外されていない場合、ログイン ループが発生するため、Airflow UI にアクセスできません。アクセスを許可するには、コンテキストアウェア アクセス バインディングで Airflow UI へのアクセスを許可するの手順を実施します。
プロジェクトを保護する VPC Service Controls 境界で上り(内向き)ルールが構成され、Cloud Composer サービスへのアクセスを許可する上り(内向き)ルールで
ANY_SERVICE_ACCOUNT
またはANY_USER_ACCOUNT
ID タイプが使用されている場合、ユーザーは Airflow UI にアクセスできず、ログイン ループに陥ります。このシナリオに対処する方法については、VPC Service Controls 上り(内向き)ルールで Airflow UI へのアクセスを許可するをご覧ください。
Airflow UI にアクセスする
Cloud Composer 2 では、Airflow ウェブサーバーは環境のクラスタ内でワークロードとして実行されます。ウェブサーバーは composer.googleusercontent.com
ドメインにデプロイされ、Airflow UI にアクセスできます。
Cloud Composer 2 では、ユーザー ID と、ユーザー用に定義された IAM ポリシー バインディングに基づいて、インターフェースにアクセスできます。Cloud Composer 1 と比較して、Cloud Composer 2 は Identity-Aware Proxy に依存しない別のメカニズムを使用します。
Google Cloud コンソールから Airflow UI にアクセスする
Google Cloud コンソールから Airflow UI にアクセスするには:
Google Cloud コンソールで [環境] ページに移動します。
[Airflow ウェブサーバー] 列で、ご使用の環境の [Airflow] リンクをクリックします。
適切な権限を持つ Google アカウントでログインします。
Google Cloud CLI を使用して Airflow UI の URL を取得する
Airflow UI には、任意のウェブブラウザからアクセスできます。Airflow UI の URL を取得するには、Google Cloud CLI で次のコマンドを実行します。
gcloud composer environments describe ENVIRONMENT_NAME \
--location LOCATION
以下を置き換えます。
ENVIRONMENT_NAME
: 環境の名前。LOCATION
: 環境が配置されているリージョン。
Google Cloud CLI コマンドにより、Airflow UI の URL を含む Cloud Composer 環境のプロパティが表示されます。URL は、airflowUri
および airflowByoidUri
として一覧表示されます。
airflowUri
URL アドレスは、Google アカウントで使用されます。airflowByoidUri
URL アドレスは、プロジェクトで Workforce Identity 連携を構成する場合に、外部 ID で使用されます。
config:
airflowUri: https://example-dot-us-central1.composer.googleusercontent.com
airflowByoidUri: https://example-dot-us-central1.composer.byoid.googleusercontent.com
ウェブサーバーを再起動する
Cloud Composer 環境のデバッグやトラブルシューティングを行う際は、Airflow ウェブサーバーを再起動することで一部の問題が解決する場合があります。ウェブサーバーを再起動するには、restartWebServer API または Google Cloud CLI の restart-web-server
コマンドを使用します。
gcloud beta composer environments restart-web-server ENVIRONMENT_NAME \
--location=LOCATION
以下を置き換えます。
ENVIRONMENT_NAME
: 環境の名前。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="example range" \
--web-server-allow-ip ip_range=192.0.4.0/24,description="example range 2"
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": "example range"
},
{
"value": "192.0.4.0/24",
"description": "example range 2"
}
]
}
}
}
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 = "example range"
},
allowed_ip_range {
value = "192.0.4.0/24"
description = "example range 2"
}
}
}