DataStreamを使ってCloud InterconnectやVPN経由で接続されてオンプレ環境のDBかたデータを読み出す場合、以下のドキュメントで説明されているように、Reverse Proxyで通信を中継させる必要があります。
Compute Engineを使ってVMを設置して、その中にiptablesで通信を中継させる例が載っています。
しかし、VMを適切に冗長構成することを考えると、この構成はやや面倒です。
そのため、以下のような構成で接続することで、VMなしで閉域網接続を実現してみます。
DataStreamはGoogle Managed VPCに配置されており、オンプレ環境と直接繋がってはいません。
そのため、中間にあるVPCが「いい感じに」経路情報を伝搬させる必要があるので、その設定を行っていきます。
まずは、図の右側のExchange Custom Routesから設定していきます。
resource "google_datastream_private_connection" "datastream_private_connection" {
display_name = "datastream-private-connection"
location = "us-central1" # 各自の環境に合わせる
private_connection_id = "datastream-private-connection"
vpc_peering_config {
vpc = "DataStreamと接続する(図中で真ん中の)VPCを指定"
subnet = "<DataStreamに割り当てるCIDR>"
}
}
この設定を適用すると、DataStreamのPrivate Connectionが作成され、VPCとの間でVPC Peering接続がなされます。
VPC Peeringの管理画面で該当のPeeringを選択して、Export custom routesをONになるように設定を変更します。
この設定によって、オンプレ環境のCIDR情報がDataStreamの動いているGoogle Managed VPCに伝わります。
実はまだこの設定だけではVPCがcustom routesを一方的に送っているだけであり、Google Managed VPCがそのcustom routesを受け取るかどうかはわかりません。
そのため、本来ならばGoogle Managed VPC側のPeering設定でImport custom routesをONにする必要があります。
実際にCustomer ManagedなVPC同士の接続では明示的なImportは必要です。
しかし、Google Managed VPCでは作成時にデフォルトでONになっているような挙動をしているので、ImportをONする必要はありません。
次に、図の左側のCustom Route Advertisementも設定します。
Dedicated Interconnectに紐づいているCloud RouterのBGP設定を変更します。
Cloud Routerにはカスタム経路広告機能があるので、この機能を使ってVPC外のCIDRをオンプレ側に広告します。
resource "google_compute_router" "router_main" {
name = "router_main"
network = "VPCを指定"
region = local.interconnect_region
bgp {
asn = "GCPのASNを指定"
advertise_mode = "CUSTOM"
advertised_groups = ["ALL_SUBNETS"]
advertised_ip_ranges {
range = "DataStreamのCIDRを指定"
}
}
}
これによって、オンプレ・Google Managed VPCの双方にルート情報が渡されることになり、IP到達性が達成できました。
あとはFirewallの開放やデータベースのユーザー作成などを行えば、DataStreamからDBのCDC情報を読み取ることができます。
なお、この記事を書くにあたって、以下の記事を大いに参考にさせていただきました。この場を借りてお礼申し上げます。