Amazon VPC Peeringの技術的考察と留意点
ども、大瀧です。
昨日、Amazon VPCの新機能VPC Peeringがリリースされました。従来のVPCの使い勝手を大きく向上させる、素晴らしいアップデートです。
Amazon VPCは、AWSの仮想ネットワーク関連サービスとして任意のIPアドレス帯域を提供する他、ファイヤーウォール機能やルーティング機能などを提供するものです。従来は、VPCに設定したアドレス帯域は独立したもので、他のVPCとはインターネットやVPN、専用線など外部ネットワークを経由して通信する方法しかありませんでした。今回のVPC Peeringは、2つのVPC間のL3ネットワーク通信を提供し、外部ネットワークなしでVPC間の相互接続を実現します。
接続できる相手のVPCには、以下の要件があります。
要件 | 説明 |
---|---|
IPアドレス帯域 | 重複するVPC間でのPeeringは不可。L2レベルのサブネット拡張はできない。 |
アベイラビリティゾーン | 不問。異なるアベイラビリティゾーン間でも通信可 |
リージョン | 同一リージョン間のみPeering&通信可 |
AWSアカウント | 異なるアカウントでも、承認プロセスを経てPeeringし通信可 |
大事なことなのでもう1回言います。今回のVPC Peeringは、2つのVPC間のL3ネットワーク通信を提供します。
...言わんとするところ、伝わったでしょうか。伝わりにくいですかね?(笑)説明としては上の文章でいいのですが、思い浮かぶイメージと実現できることにはそれなりに隔たりがあるので、そこを理解いただきたいというのが今回のエントリーの狙いです。VPC Peeringの仕組みを自分なりに考察(≒妄想)し、そこから見えてくる留意点を紹介してみます。以下に要点をまとめます。
- ルーティングの設計はユーザーが行う。
- Peeringなので、2VPC間以外のルーティングを取り持つことはできない。
- Peering経由でIGW/VGWは利用できない。
ルーティングの設計はユーザーが行う
Peeringの設定は、VPCの[Peering Connections]画面で、作成・管理します。ただ、このPeering Connection(pcx-XXXXXX)を作成しただけでは、まだVPC間の相互通信はできません。VPCサブネットにひもづくルーティングテーブルに接続先VPCのエントリーを追加する必要があります。以下の例では、VPC Peering(pcx-111111)のエントリーをそれぞれのVPCのルーティングテーブルに追加で指定しています。
Peering Connectionは異なるLANをつなぐケーブルのようなもので、実際に通信を行うためにはルーティングエントリーをルーターに追加しなければならない、というように従来の物理ネットワークに例えてイメージすると理解しやすいかもしれません。また、ユーザーで設定することを逆手に取り、より複雑な構成も可能です。例えば、ルーティングエントリーにはVPCのネットワークアドレスではなく、サブネットルーティングやホストルーティングの指定を行うことも可能です。これにより、Longenst Prefix Matchなどの応用的なルーティングテクニックも許容できるようになっています。
Peeringで繋ぐ2VPC間以外のルーティングを取り持つことはできない
先ほどの例にあるように、各VPCのルーティングエントリーのソースアドレスはVPCのネットワークアドレスが自動で設定されるようです。(ルーティングエントリーのソースアドレスはVPCの管理画面には表示されず、また指定できません。)そのため、2つのVPCとのPeeringを持つ3つ又構成のVPCでは、それぞれのVPCとの通信はできる一方、VPCをまたぐような通信はルーティングエントリーがないためできません。以下のイメージだと、10.0.0.0/16⇔192.168.1.0/24間、172.31.0.0/16⇔192.168.1.0/24間は通信できるが、10.0.0.0/16⇔172.31.0.0/16間は通信できないということになります。
こちらの対処方法は割とわかりやすく、VPC間をメッシュ型でVPC Peeringを構成することで3つ以上のVPCで相互接続が可能です。
当然、ルーティングも総当たりで登録することになります。サブネットルーティングやホストルーティングなしの典型的なパターンであれば、Peeringの確立およびルーティングテーブルの構成はルーチン化できるので、つなげたいVPCを指定すると自動で構成をやってくれるツールなんてのがあるとみんなシアワセになれると思います。誰かぁ〜。
Peering経由でIGW/VGWは利用できない
先ほどの3VPCの例と同じ理屈で、Peering相手のVPCを経由してIGW(インターネットゲートウェイ)およびVGW(Direct Connect/VPNの仮想ゲートウェイ)と通信しようとしても、VPCのルーティングテーブルのソースネットワークにはそのVPCのアドレスしか設定されていないため、通信は不可能です。Peering相手のVPC経由でIGW/VGWと通信することはできないことになります。
「Direct Connect/VPN回線を複数のVPCで使い回したい」といったニーズも多いと思うので、この辺りは今後のアップデートに期待しましょう。
また、Zadara Virtual Private Storage ArrayやNetApp Private StorageといったDirect Connect接続でストレージサービスを提供する構成も、同様にPeering経由のアクセスはできないと思われます。
おまけ: 新たなビジネスチャンスも
異なるAWSアカウントのVPCとPeeringが組めますので、ソフトウェアベンダーが管理・運用するVPC/EC2をユーザーのVPCとPeeringしてユーザーのEC2にサービスを提供するという、新しいサービス提供形態もできるのでは、と妄想しています。インターネットを介さないのでセキュア&低遅延な通信ができますし、サービスを提供するのはベンダーのAWSアカウント配下ですので、ベンダーによる集中した管理・運用も可能だと思います。さしづめ、「EC2(VM) as a Service」というところでしょうかw
まとめ
というわけで、要点を今一度。
- ルーティングの設計はユーザーが行う。
- Peeringなので、2VPC間以外のルーティングを取り持つことはできない。
- Peering経由でIGW/VGWは利用できない。
制約が多いと見えるかもしれませんが、VPC Peeringで新たにできるようになったこと、また応用的なルーティングで工夫できる幅がかなりあることから、いろいろ活用できる噛めば噛むほど味が出る新機能なんて思っていただけると幸いです。
また、VPCのドキュメントにVPC Peeringの構成パターンがいろいろ載っているので、ネタとして目を通しておくをオススメします。
VPC PeeringをマスターしてAWSのネットワーク構築のバリエーションを増やしましょう!