AWSを利用していると、異なるVPCの間でインターネットを通らずに通信したい需要が出てきます。インターネット を利用しないメリットとしては
- AWS内の通信だけにすることにより、通信の遅延ない
- 外部に通信が出ていかないため、セキュリティ上安全
などのメリットがあります。インターナルでVPC間の通信ができるようになる方法として
- VPCピアリンク
- PrivateLink(インターフェイス型)
- PrivateLink(ゲートウェイ型)
の3つのパターンがあります。(図1)今回の記事ではこの3つのパターンの違いについて記載します。

1.VPCピアリング
1.1.概要
VPCピアリングは、VPCとVPCを直接つなげてしまう方法です。VPCごと接続可能にするため、ピアリングしたVPC内のすべてのリソース同士がアクセス可能になります。
VPC単位で接続後、ルーティング/NACL(ネットワークACL)/セキュリティグループなどによる設定で 接続可能な範囲を限定することができます。ネットワーク的につなげるため、CIDRが重複するVPC間のピアリングの実施はできません。
- 接続可能な範囲
- 異なるVPCの接続
- 異なるアカウント/リージョンのVPCを接続
- 複数のVPCとピアリング
- 制約事項
- ピアリング先のインターネットGWやNATを経由した外部への通信
- ピアリング先のVPCピア接続を経由した通信
- ピアリング先のVPCエンドポイントを経由した通信
- ピアリング先のVPNやDirectConnectなどを経由した外部への通信
- リージョン間IPv6 経由の通信

1.2.作成方法
1.2.1.ピアリングの作成
まずは、VPC同士をピアリングする設定を行います。VPCメニューから「ピアリング接続」→「ピアリング接続の作成」を選択します。(図1.1)

接続元と接続先のVPCを選択します。(図1.2)この時、CIDRの範囲がかぶっている場合ピアリングが作成できないために注意が必要です。

下図の通り作成が成功すればOKです。(図1.3)

作成に成功しましたが、実際に通信ができるようになるには接続先のVPCの管理者のリクエストの承認が必要になります。(図1.4)
今回は接続元接続先のVPC共に僕のアカウントで行っているので、自分でリクエストを承認します。

1.2.2.ルーティングの作成
ピアリングを作成した後はそれぞれのVPCのルーティングにお互いのCIDRを記載する必要があります。
- 接続元VPCのルート:接続先のCIDR(今回の場合は13.0.0.0/16)をVPCリンク向けに追加
- 接続先VPCのルート:接続元のCIDR(今回の場合は172.31.0.0/16)をVPCリンク向けに追加

1.3.通信確認
お互いに通信ができるか確認します。
1.3.1.接続元→接続先の通信確認
#接続元サーバ情報の確認(IPアドレス 172.31.18.52)
[ec2-user@ip-172-31-18-52 ~]$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
inet 172.31.18.52 netmask 255.255.240.0 broadcast 172.31.31.255
inet6 fe80::416:4bff:fef0:bd42 prefixlen 64 scopeid 0x20<link>
---以下略---
#接続先に通信確認
[ec2-user@ip-172-31-18-52 ~]$ ping 13.0.1.161
PING 13.0.1.161 (13.0.1.161) 56(84) bytes of data.
64 bytes from 13.0.1.161: icmp_seq=1 ttl=255 time=0.418 ms
---以下略---
1.3.2.接続先→接続元の通信確認
#接続先サーバ情報の確認(IPアドレス 13.0.1.161)
[ec2-user@ip-13-0-1-161 ~]$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
inet 13.0.1.161 netmask 255.255.255.0 broadcast 13.0.1.255
inet6 fe80::49c:4fff:feb1:3f84 prefixlen 64 scopeid 0x20<link>
---以下略---
#接続元に通信
[ec2-user@ip-13-0-1-161 ~]$ ping 172.31.18.52
PING 172.31.18.52 (172.31.18.52) 56(84) bytes of data.
64 bytes from 172.31.18.52: icmp_seq=1 ttl=255 time=0.528 ms
---以下略---
2.PrivateLink(IFエンドポイント)
PrivateLinkはVPCエンドポイント を作成してVPCの外にある様々なサービスと接続できるようになる方法です。
AWSのサービス、もしくはNLBを利用したオリジナルのサービスと接続することができます。2.1.でAWSサービスとの接続について、2.2.でオリジナルのサービスとの接続について記載します。
2.1.AWSサービスとの接続方法
2.1.1.エンドポイントの作成
VPCのメニューから、エンドポイントの作成を選択します。(図2.1)

2.1.2.AWSサービスの選択
作成した後は、エンドポイントを利用して、接続するサービスを選択します。(図2.2)(※接続のタイプはInterfaceになっているものです。)2020年11月現在では、70以上のサービスを選択できます。

2.1.3.サブネットの選択
接続元のサブネットを選択します。(図2.3)

2.1.4.セキュリティグループ、ポリシーの選択
接続元→接続先の通信は、セキュリティグループやポリシーをカスタマイズすることで、制御できます。ポリシーはサービスによっては作成することができないようです。
選択が終わったら作成ボタンを押すと作成できます。
2.2.PrivateLink(IFエンドポイントエンドポイントサービス)
先ほどの2.1.ではAWSサービスを接続先に指定しましたが、AWSサービスではなくオリジナルで作成したサービスなどを指定することもできます。
ただし、その場合は接続先にNLBが必要になり、NLBをPrivateLinkで接続先に指定します。
2.2.1.エンドポイントサービスの作成
既存のNLBを指定してエンドポイントサービスを作成します。(図2.4)

エンドポイントサービスにしたいNLBを選択します。(図2.5)

正常に作成できればOKです。(図2.6)

2.2.2.エンドポイントサービスの接続
エンドポイントサービスを作成した後、PrivateLinkを作成する手順は2.1.とほとんど同じです。
PrivateLinkを作成する際に、サービス名を指定する必要があるため、エンドポイントサービスのダッシュボードで作成したサービス名をコピペしておきます。(図2.7)

エンドポイントの作成画面で、サービスカテゴリを「サービスを名前で検索」に選択し、コピペしたサービス名を入力します。(図2.8)

後は、2.1.の手順と同様です。
3.PrivateLink(GWエンドポイント)
3.1.概要
PrivateLinkのゲートウェイ(GW)型はVPCエンドポイントのGatewayタイプを利用する方法です。2020年11月現在、接続先のサービスとしてS3とDynamoDBのみが対応しています。
また、サブネットではなくVPCのルートテーブルを利用して接続するため、VPC内のすべてのリソースが接続先にアクセス可能となります。
3.2.作成方法
作成方法は、2.1.のインターフェイスエンドポイントの場合とほぼ同じです。
3.1.1.GWエンドポイントの選択
エンドポイントの作成画面で、サービスカテゴリで「AWSサービス」を選択し、「gateway」と検索すると探しやすいです(図3.1)。S3もしくは、DynamoDBを選択できます。

3.1.2.ルートテーブルの選択
GWタイプでは、サブネットではなくてVPCごとに接続となります。そのため、該当のVPCとルートテーブルを選択します(図3.2)。

4.接続方法の比較まとめ
ここまで紹介した、VPC間で通信をする方法に関して、下記で比較をまとめておきます。
VPCピア接続 | PrivateLink (インターフェイス) |
PrivateLink (ゲートウェイ) |
|
利用 シーン |
・異なるVPCの間の複数のリソース同士でやりとりをしたい場合 | ・特定のAWSサービスに接続したい場合 ・NLBを利用したコンテンツを他のVPCから利用する場合 |
・VPC内の複数のリソースでS3もしくはDynamoDBを利用する場合 |
接続元 | VPC内のコンテンツ | VPC内の特定のSubnet | VPC内のコンテンツ |
接続先 | VPC内のコンテンツ | AWSプリンシパルサービス エンドポイントサービス |
S3もしくは DynamoDB |
通信制御方法 | ルートテーブル ネットワークACL セキュリティグループ |
セキュリティグループ ポリシー |
ルートテーブル ネットワークACL セキュリティグループ ポリシー |
トラフィック | IPv4/IPv6 (IPv6は同一リージョンでのみ可) |
IPv4 | IPv4 |
制限 | CIDRが重複する VPC 間でピアリング不可 | CIDRが重複していても接続可能 | なし |
他アカウント | 可 | 可 | 可 |
他リージョン | 可 | 不可 | 不可 |