Google Cloudで複数のプロジェクトをまたいで通信したい
プロジェクト間で通信がしたい
今年ももう終わりますね。皆様今年も各種クラウドベンダでたくさんプロジェクトを立ち上げたのではないでしょうか。
プロジェクトをいっぱい立ち上げると、やりたくなるのがプロジェクト間の通信ですよね!!
これはどのクラウドベンダでも起きることだと思います。
「ああ、あのプロジェクトのあのリソースとこのプロジェクトのこのリソースを通信したいなあ…」ってやつです。
なかったとしても、来年はありますね。
そんなときに役に立つのがVPCピアリングです。
VPCピアリングとは
先ほど書いたようなVPC間の通信を成り立たせる方法のVPCピアリングですが、
Google Cloudでは正式名称 Google Cloud VPC ネットワーク ピアリング となっています。
AWSではVPCピアリングという名前で、Azureなら仮想ネットワーク ピアリングです。
というわけで、今年最後に覚えておきたいのが、プロジェクト間で通信する方法はどのクラウドベンダにおいても、あるということです。
バリバリに使っている方も大勢いらっしゃるかもしれません。
VPCネットワークピアリングの活用例
では、なんでこのVPCネットワークピアリングを使うのか、というところです。
単純に部署レベル等で分けたプロジェクト間で通信が発生した場合…というのもあるかと思いますが、今回は「Google Cloud Interconnect」を使った場合について紹介します。(実際にあったユースケースです)
Cloud Interconnectは平たく言えばオンプレとVPCを繋ぐためのものです。
(Cross-Cloud Interconnectが最近加わりましたので、「オンプレ」の他に別クラウドインフラもありますが)
一番最初にこういったものに触れたときは、オンプレ側設備に対してクラウドインフラからpingが飛ぶ!と感動したものです。
で、このCloud Interconnectは一つのプロジェクト内のVPCからCloud Routerを経由して出て行く形になりますので、ただ繋いだだけだとオンプレと接続できるプロジェクトは1つだけになります。
この図でいうと、Project Aからは通信できるけど、Project Bは独立しているので、同一組織にあろうと通信できないということですね。
それだとオンプレ設備と通信したいときは用途ごとにプロジェクトを分けられないので微妙だよね、というところで出てくるのがVPCピアリングです。
異なるプロジェクトをVPC同士を相互に接続することで
この図のように、プロジェクトBでもInterconnectを通して外に出て行けるようになる、というわけです。
先ほど述べたようにGoogle CloudでもCross-Cloud Interconnectが登場しましたので、 「マルチクラウド」文脈でも今後こういったものの需要は上がっていくのではないでしょうか。
VPCネットワークピアリングの設定方法
では、Google CloudのVPCネットワークピアリングの設定方法について解説します。
VPCネットワークの作成
既存のプロジェクトに対して通信したい新しいプロジェクトを立ち上げて、まだVPCネットワークを作っていない場合は、まずVPCネットワークを作成します。
とりあえず「vpc」とでも検索して「VPCネットワーク」を選択します。
VPCネットワークを作成。
ここで2つのサブネットのCIDR範囲については可能な限り重複を避けるべきです。
先ほどのマニュアルページの「仕様」の項目にも
片側のピア VPC ネットワーク内のサブネット CIDR 範囲ともう片側のピア ネットワーク内の静的ルートは重複できません。このルールは、サブネット ルートと静的ルートの両方に適用されます。Google Cloud は次の状況で重複が発生していないか確認し、重複が発生した場合にエラーを生成します。
とあります。
詰まったときはこの「仕様」ページが全てを解決してくれるので、VPCピアリングを行う際はよく読んでおいたほうがいいです。
VPCネットワークピアリングの設定
VPCネットワークピアリングはそのまま左側メニューから選択できます。
この設定を接続を行う2つのプロジェクト両方で行います。
ピアリング接続はなんということなく、接続したい先のプロジェクトIDとVPCネットワークを指定するだけです…
が、仮にCloud Interconnect等、VPCから外に出ているプロジェクトと接続する場合は「カスタムルートのインポート」を選択しないと接続先のプロジェクトのさらに外には出ていくことができません。
個人的にはこれに結構ハマりました… (言われればそりゃそうやろな案件なのですが)
もちろん、外部と繋がっている方のVPCでのピアリング接続作成時は「カスタムルートをエクスポートする」を選択しておきます。
これでルート自体も交換でき、無事に接続できるというわけです。
なお、外向けに繋ぐ必要がなく、単純にプロジェクト間で通信したいだけであれば、このあたりを気にする必要はありません。
あと、今回は触れませんが、Interconnectの際は、Cloud RouterのBGPセッションを編集して自分で外部と直接繋がっていないほうのVPCのCIDRをアドバタイズしないと認識されないのでこれもまた気をつけて下さい。(これもまた当たり前と言われればそうなんですが…なかなか気付けない 😭 )
まとめ
今回はVPCピアリングについて扱いました。
こういったことを知らないとなんでも一つのプロジェクトの中でやってしまったりして(それはそれで問題無いユースケースもあるのかもしれませんが)、コスト管理が雑になってしまったりとか、不要なリソースの判定が難しくなったりとかしがちなのではないかと思います。
冒頭でも述べた通りどのクラウドベンダでも提供されている機能なので、適切にVPCを切って通信させたほうがいいシーンでは積極的に使っていきたいですね。