環境を VPC ネットワークに接続する

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

このページでは、環境が Cloud Composer 3 の VPC ネットワークにアクセスする方法、環境を VPC ネットワークに接続する手順、以前に構成した接続を無効にする方法について説明します。

VPC ネットワーク アクセスについて

Cloud Composer 3 では、環境の VPC ネットワークへのアクセスを有効にできます。

環境の VPC ネットワークへのアクセスを有効にした場合:

  • 環境の Airflow コンポーネントは、VPC ネットワーク内のプライベート ネットワーク エンドポイントにアクセスできます。たとえば、DAG コードは、構成された Airflow 接続を介して VPC ネットワーク内にあるリソースにアクセスできます。

  • 環境でプライベート IP ネットワーキングを使用している場合、限定公開の Google アクセスを介してプライベート IP 環境で使用できる Google API、サービス、ドメインへのトラフィックを除き、すべての内部トラフィックが VPC ネットワークにルーティングされます

  • VPC ネットワークの構成方法によっては、プライベート IP 環境が VPC ネットワーク経由でインターネットにアクセスできる場合があります。

  • VPC ネットワークで定義された限定公開 DNS ゾーンは、環境の Airflow コンポーネントで自動的に利用可能になります。

  • 環境は、VPC サブネットワークに 2 つの IP アドレスを予約します。

Cloud Composer は、ネットワーク アタッチメントを使用して環境を VPC ネットワークに接続します。

  • VPC ネットワークとサブネットワークを指定すると、Cloud Composer はプロジェクトに新しいネットワーク アタッチメントを作成します。このアタッチメントは、環境の削除、VPC ネットワークへの接続の無効化、VPC 接続パラメータの上書きのいずれかを行うと削除されます。

  • 既存のネットワーク アタッチメントを指定する場合は、環境と同じプロジェクトに配置する必要があります。このアタッチメントは、環境の削除、接続の無効化、VPC 接続パラメータの上書きを行っても削除されません。

  • 共有 VPC ネットワーキングでは、次のようになります。

    • Cloud Composer の共有 VPC ネットワークが構成されていることを確認します。Cloud Composer のプロジェクトと権限の構成については、共有 VPC の構成をご覧ください。

    • 共有 VPC ネットワーキングが構成されたら、ホスト プロジェクトから環境を VPC ネットワークに接続できます。既存のネットワーク アタッチメントを使用する場合は、サービス プロジェクト(環境が配置されているプロジェクト)で作成し、共有 VPC ネットワークに接続する必要があります。

環境の内部 IP 範囲について

Cloud Composer 3 環境では、環境のクラスタや Cloud SQL Proxy など、テナント プロジェクトで実行されるコンポーネントに複数の IP アドレスが必要です。これらの IP アドレスは、環境の内部 IP 範囲から取得されます。

  • デフォルトの内部 IP 範囲は 100.64.128.0/20 です。

  • 環境を作成するときに、別の内部 IP 範囲を指定できます。この範囲には /20 マスクを使用する必要があります。

  • 既存の環境の内部 IP 範囲は変更できません。

内部 IP 範囲は、次の方法で VPC ネットワークとやり取りします。

  • 内部 IP 範囲は、Cloud Composer 環境が接続されている VPC サブネットワークと競合しないようにする必要があります。内部 IP 範囲と重複している場合、その VPC サブネットワークとの接続を有効にすることはできません。

  • 環境の内部 IP 範囲が VPC ネットワーク範囲と重複する場合、重複する IP アドレスを持つ VPC ネットワークのエンドポイントには、その環境からアクセスすることができません

    たとえば、内部範囲が 100.64.128.0/20 の場合、VPC ネットワーク内の 100.64.128.1 エンドポイントへのリクエストは失敗します。リクエストがテナント プロジェクトを離れないためです。

  • 内部 IP 範囲は予約されていません。異なる環境で使用される内部 VPC ネットワークは分離されているため、追加の設定をしなくても複数の環境で同じ内部 IP 範囲を使用できます。

  • 内部範囲の IP アドレスは、環境内の DAG とタスクがリクエストを行わない限り他の目的に使用できます。

VPC ネットワークに接続する

コンソール

  1. Google Cloud コンソールで [環境] ページに移動します。

    [環境] に移動

  2. 環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。

  3. [環境の設定] タブに移動します。

  4. [ネットワークの構成] セクションで、[ネットワーク アタッチメント] 項目を見つけて [編集] をクリックします。

  5. [ネットワーク アタッチメント] ダイアログで、次の操作を行います。

    • 新しいネットワーク アタッチメントを作成するには、[ネットワーク アタッチメント] リストで [新しいネットワーク アタッチメントを作成] を選択します。[ネットワーク] リストと [サブネットワーク] リストで、VPC ネットワークとサブネットワークを選択します。

    • 既存のネットワーク アタッチメントを使用するには、[ネットワーク アタッチメント] リストでアタッチメントを選択します。

  6. [保存] をクリックします。

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 ネットワーク ID
  • SUBNETWORK_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

  1. environments.patch API リクエストを作成します。

  2. このリクエストで次のように操作します。

    • 新しいネットワーク アタッチメントを作成するには:

      1. updateMask パラメータで、config.node_config.network,config.node_config.subnetwork マスクを指定します。

      2. リクエスト本文の network フィールドと subnetwork フィールドに、VPC ネットワーク ID とサブネットワーク ID を指定します。

    • 既存のネットワーク アタッチメントを使用するには:

      1. updateMask パラメータで、config.node_config.composer_network_attachment マスクを指定します。

      2. リクエスト本文で、既存のネットワーク アタッチメントの値を 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 ネットワーク ID
  • SUBNETWORK_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
  }
}

既存のネットワーク アタッチメント

その結果、環境でアタッチメントが使用されなくなります。この問題に対処するには、Terraform がアタッチメントの producer_accept_lists パラメータの変更を無視するようにします。

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 ネットワークへの接続を無効にする

コンソール

  1. Google Cloud コンソールで [環境] ページに移動します。

    [環境] に移動

  2. 環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。

  3. [環境の設定] タブに移動します。

  4. [ネットワークの構成] セクションで、[ネットワーク アタッチメント] 項目を見つけて [編集] をクリックします。

  5. [ネットワーク アタッチメント] ダイアログで [なし] を選択し、[保存] をクリックします。

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

  1. environments.patch API リクエストを作成します。

  2. このリクエストで次のように操作します。

    1. updateMask パラメータで、config.node_config.network,config.node_config.subnetwork マスクを指定します。

    2. リクエスト本文の 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 などの他のツールを使用してネットワークを切断できます。

次のステップ