Managed Airflow(第 3 世代) | Managed Airflow(第 2 世代) | Managed Airflow(従来の第 1 世代)
このページでは、環境が Managed Airflow(第 3 世代)の VPC ネットワークにアクセスする方法、環境を VPC ネットワークに接続する手順、以前に構成した接続を無効にする方法について説明します。
環境の Airflow コンポーネントのインターネット アクセスを有効または無効にする場合は、 環境のネットワーキング タイプ(プライベート IP またはパブリック IP)を変更するをご覧ください。
PyPI パッケージのインストール時にのみインターネット アクセスを無効または有効にする場合は、PyPI パッケージのインストール時にインターネット アクセスを構成するをご覧ください。
共有 VPC ネットワーキングを構成する場合、プロジェクトと権限の構成については、共有 VPC の構成をご覧ください。
VPC ネットワーク アクセスについて
Managed Airflow(第 3 世代)では、環境の VPC ネットワークへのアクセスを有効にできます。
環境の VPC ネットワークへのアクセスを有効にすると、次のようになります。
環境の Airflow コンポーネントは、VPC ネットワーク内のプライベート ネットワーク エンドポイントにアクセスできます 。たとえば、 DAG コードは、 構成された Airflow 接続を介して VPC ネットワーク内のリソースにアクセスできます。
環境で プライベート IP ネットワーキング を使用している場合、限定公開の Google アクセスを介してプライベート IP 環境で使用できる Google API、サービス、ドメインへのトラフィックを除き、すべてのトラフィックが VPC ネットワークに転送されます。この方法では、トラフィックがパブリック インターネットに送信されるのではなく、VPC ネットワーク経由で転送されるため、 Airflow コンポーネントを プライベートで使用されるパブリック IP(PUPI) GKE で構成された に接続することもできます。
VPC ネットワークの構成方法によっては、プライベート IP 環境で VPC ネットワークを介してインターネットにアクセスできます 。
プライベート DNS ゾーンは、VPC ネットワークで定義されており、環境の Airflow コンポーネントで自動的に利用可能になります。
環境は、VPC サブネットワーク内の 2 つの IP アドレスを予約し、メンテナンスとアップグレード中に 2 つの追加の IP アドレスを使用します。VPC サブネットワークで環境ごとに 4 つの IP アドレス を使用できることを確認してください。
Managed Airflow は、 ネットワーク アタッチメントを使用して 環境を VPC ネットワークに接続します。
VPC ネットワークとサブネットワークを指定すると、Managed Airflow はプロジェクトに新しいネットワーク アタッチメントを作成します。このアタッチメントは、環境の削除 、VPC ネットワークへの接続の無効化、VPC 接続パラメータの上書きのいずれかを行うと削除されます。
既存のネットワーク アタッチメントを指定する場合は、環境と同じプロジェクトに配置する必要があります。このアタッチメントは、環境の削除、接続の無効化、VPC 接続パラメータの上書きを行っても削除されません。
共有 VPC ネットワーキングの場合:
マネージド Airflow に共有 VPC ネットワーキングが構成されていることを確認します。マネージド Airflow のプロジェクトと権限の構成については、 共有 VPC の構成をご覧ください。
共有 VPC ネットワーキングを構成したら、ホスト プロジェクトから環境を VPC ネットワークに接続できます。既存のネットワーク アタッチメントを使用する場合は、サービス プロジェクト(環境が配置されている場所)で作成し、共有 VPC ネットワークに接続する必要があります。
Managed Airflow(第 3 世代)での推移的 DNS ピアリングの制限事項
推移的 DNS ピアリングの制限事項は、 Managed Airflow(第 3 世代)環境に次のように適用されます。
- Cloud DNS には 1 つの推移的ホップの制限があります。つまり、合計で 2 つのホップのみがサポートされます。
- マネージド Airflow(第 3 世代)では、環境のコンポーネントは テナント プロジェクトで実行され、DNS ピアリングを介して環境が配置されているプロジェクトと通信します。推移的ホップはテナント プロジェクトの DNS ピアリングで使用されるため、合計で 1 つのホップのみを使用できます。
環境の内部 IP 範囲について
マネージド Airflow(第 3 世代)環境では、コンポーネントに複数の IP アドレスが必要です。これらのコンポーネントは、テナント プロジェクトで実行され、環境のクラスタや Cloud SQL Proxy などがあります。これらの IP アドレスは 環境の内部 IP 範囲から取得されます。
デフォルトの内部 IP 範囲は
100.64.128.0/20です。環境の作成時に別の内部 IP 範囲を指定できます。この範囲では
/20マスクを使用する必要があります。既存の環境の内部 IP 範囲を変更することはできません。
内部 IP 範囲は、VPC ネットワークと次のように相互に作用します。
内部 IP 範囲は、Managed Airflow 環境が接続されている VPC サブネットワークと競合しないようにしてください。内部 IP 範囲と重複している場合、その VPC サブネットワークとの接続を有効にすることはできません。
環境の内部 IP 範囲が VPC ネットワーク範囲と重複する場合、重複する IP アドレスを持つ VPC ネットワークのエンドポイントには、その環境からアクセスすることができません。
たとえば、内部範囲が
100.64.128.0/20の場合、VPC ネットワーク内の100.64.128.1エンドポイントへのリクエストは失敗します。リクエストがテナント プロジェクトを離れないためです。内部 IP 範囲は予約されていません。異なる環境で使用される内部 VPC ネットワークは分離されているため、追加の設定をしなくても複数の環境で同じ内部 IP 範囲を使用できます。
内部範囲の IP アドレスは、環境内の DAG とタスクがリクエストを行わない限り他の目的に使用できます。
VPC ネットワークに接続する
コンソール
コンソールで、[Environments] ページに移動します。 Google Cloud
環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。
[環境の設定] タブに移動します。
[ネットワークの構成] セクションで、[ネットワーク アタッチメント] 項目を見つけて [編集] をクリックします。
[ネットワーク アタッチメント] ダイアログで、次の操作を行います。
新しいネットワーク アタッチメントを作成するには、[ネットワーク アタッチメント] リストで [新しいネットワーク アタッチメントを作成] を選択します。[ネットワーク] リストと [サブネットワーク] リストで、VPC ネットワークとサブネットワークを選択します。
既存のネットワーク アタッチメントを使用するには、[ネットワーク アタッチメント] リストでアタッチメントを選択します。
[保存] をクリックします。
gcloud
次の Google Cloud CLI 引数は、VPC ネットワーク接続パラメータを指定します。
--network: VPC ネットワーク ID。--subnetwork: VPC サブネットワーク ID。--network-attachment: 代わりに既存のネットワーク アタッチメントを使用します。
新しいネットワーク アタッチメント
新しいネットワーク アタッチメントを介して環境を VPC ネットワークに接続するには、次の Google Cloud CLI コマンドを実行します。
gcloud beta composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--network NETWORK_ID \
--subnetwork SUBNETWORK_ID
以下を置き換えます。
ENVIRONMENT_NAME: 環境の名前LOCATION: 環境が配置されているリージョンNETWORK_ID: VPC ネットワーク IDSUBNETWORK_ID: VPC サブネットワーク ID
例:
gcloud beta composer environments update example-environment \
--location us-central1 \
--network projects/example-project/global/networks/example-network \
--subnetwork projects/example-project/regions/us-central1/subnetworks/example-subnetwork
既存のネットワーク アタッチメント
新しいネットワーク アタッチメントを介して環境を VPC ネットワークに接続するには、次の Google Cloud CLI コマンドを実行します。
gcloud beta composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--network-attachment NETWORK_ATTACHMENT_ID
以下を置き換えます。
ENVIRONMENT_NAME: 環境の名前LOCATION: 環境が配置されているリージョンNETWORK_ATTACHMENT_ID:projects/{project}/regions/{region}/networkAttachments/{networkAttachment}形式のネットワーク アタッチメント。
例:
gcloud beta composer environments update example-environment \
--location us-central1 \
--network-attachment projects/example-project/regions/us-central1/networkAttachments/example-network-attachment
API
environments.patchAPI リクエストを作成します。このリクエストで次のように操作します。
新しいネットワーク アタッチメントを作成するには:
updateMaskパラメータで、config.node_config.network,config.node_config.subnetworkマスクを指定します。リクエスト本文の
networkフィールドとsubnetworkフィールドに、VPC ネットワーク ID とサブネットワーク ID を指定します。
既存のネットワーク アタッチメントを使用するには:
updateMaskパラメータで、config.node_config.composer_network_attachmentマスクを指定します。リクエスト本文で、既存のネットワーク アタッチメントの値を
projects/{project}/regions/{region}/networkAttachments/{networkAttachment}形式で指定します。
例(新しいネットワーク アタッチメント):
// PATCH https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.node_config.network,config.node_config.subnetwork
"config": {
"nodeConfig": {
"network": "projects/example-project/global/networks/example-network",
"subnetwork": "projects/example-project/regions/us-central1/subnetworks/example-subnetwork"
}
}
例(既存のネットワーク アタッチメント):
// PATCH https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.node_config.composer_network_attachment
"config": {
"nodeConfig": {
"composerNetworkAttachment": "projects/example-project/regions/us-central1/networkAttachments/example-network-attachment"
}
}
Terraform
node_config ブロックの次のフィールドで、VPC ネットワーク接続パラメータを指定します。
network: VPC ネットワーク ID。subnetwork: VPC サブネットワーク ID。composer_network_attachment: 代わりに既存のネットワーク アタッチメントを使用します。
新しいネットワーク アタッチメント
resource "google_composer_environment" "example" {
provider = google-beta
name = "ENVIRONMENT_NAME"
region = "LOCATION"
config {
node_config {
network = NETWORK_ID
subnetwork = SUBNETWORK_ID
}
}
}
以下を置き換えます。
ENVIRONMENT_NAME: 環境の名前。LOCATION: 環境が配置されているリージョン。NETWORK_ID: VPC ネットワーク IDSUBNETWORK_ID: VPC サブネットワーク ID
例(新しいネットワーク アタッチメント):
resource "google_composer_environment" "example" {
provider = google-beta
name = "example-environment"
region = "us-central1"
config {
node_config {
network = "projects/example-project/global/networks/example-network"
subnetwork = "projects/example-project/regions/us-central1/subnetworks/example-subnetwork"
}
... other configuration parameters
}
}
既存のネットワーク アタッチメント
その結果、環境ではアタッチメントが使用されなくなります。この問題に対処するには、次のようにして、アタッチメントの producer_accept_lists パラメータに対して行われた変更を Terraform が無視するようにします。
resource "google_compute_network_attachment" "NETWORK_ATTACHMENT_ID" {
lifecycle {
ignore_changes = [producer_accept_lists]
}
# ... other configuration parameters
}
その後、このアタッチメントを環境に指定します。Terraform で管理されていないアタッチメントを指定することもできます。例をご覧ください。
resource "google_composer_environment" "example" {
name = "example-environment"
region = "us-central1"
config {
node_config {
composer_network_attachment = google_compute_network_attachment.NETWORK_ATTACHMENT_ID.id
}
# ... other configuration parameters
}
}
以下を置き換えます。
ENVIRONMENT_NAME: 環境の名前。LOCATION: 環境が配置されているリージョン。NETWORK_ATTACHMENT_ID: ネットワーク アタッチメント ID。
例(既存のネットワーク アタッチメント):
resource "google_compute_network_attachment" "example" {
lifecycle {
ignore_changes = [producer_accept_lists]
}
# ... other configuration parameters
}
resource "google_composer_environment" "example" {
provider = google-beta
name = "example-environment"
region = "us-central1"
config {
node_config {
# Attachment is managed in Terraform:
composer_network_attachment = google_compute_network_attachment.NETWORK_ATTACHMENT_ID.id
# Attachment is not managed in Terraform:
# composer_network_attachment = projects/example-project/regions/us-central1/networkAttachments/example-network-attachment
}
# ... other configuration parameters
}
}
VPC ネットワークへの接続を無効にする
コンソール
コンソールで、[Environments] ページに移動します。 Google Cloud
環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。
[環境の設定] タブに移動します。
[ネットワークの構成] セクションで、[ネットワーク アタッチメント] 項目を見つけて [編集] をクリックします。
[ネットワーク アタッチメント] ダイアログで、[なし] を選択して [保存] をクリックします。
gcloud
--disable-vpc-connectivity 引数は、環境の VPC ネットワーク接続を無効にします。
gcloud beta composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--disable-vpc-connectivity
以下を置き換えます。
ENVIRONMENT_NAME: 環境の名前LOCATION: 環境が配置されているリージョン
例:
gcloud beta composer environments update example-environment \
--location us-central1 \
--disable-vpc-connectivity
API
environments.patchAPI リクエストを作成します。このリクエストで次のように操作します。
updateMaskパラメータで、config.node_config.network,config.node_config.subnetworkマスクを指定します。リクエスト本文の
networkフィールドとsubnetworkフィールドに、空の値を指定します。
例:
// PATCH https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.node_config.network,config.node_config.subnetwork
"config": {
"nodeConfig": {
"network": "",
"subnetwork": ""
}
}
Terraform
Terraform を使用して VPC ネットワークを切断することはできません。代わりに、別の VPC ネットワークを接続するか、Google Cloud CLI などの他のツールを使用してネットワークを切断できます。