マルチVPC環境を簡単接続：AWSでVPC Peeringを活用する方法と通信テストのベストプラクティス

## はじめに
AWS環境でのセキュリティやスケーラビリティを考えるとき、複数のVPC（Virtual Private Cloud）を接続する「VPC Peering」は非常に便利な機能です。

:::note 
**この記事では、VPC Peeringの概要とメリット、設定手順、そしてテスト結果を詳しく解説します。**
:::

VPC Peeringを利用すれば、個別に分けたVPC間でのセキュアな通信を可能にし、サービス間の連携もよりスムーズに行うことができます。

## VPC Peeringとは
VPC Peeringは、AWS内の異なるVPC間でリソースをプライベートネットワークを通じて接続できる機能です。

![スクリーンショット 2024-11-15 19.57.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/22967044-795d-3190-939e-d2ea511ddb97.png)
引用画像：https://docs.aws.amazon.com/ja_jp/vpc/latest/peering/what-is-vpc-peering.html

この設定により、外部ネットワークを経由することなく、異なるVPCのインスタンス同士がIPアドレスを使用して直接通信できるようになります。

:::note warn
**例えば、複数のAWSアカウント間や、開発環境と本番環境を分離して運用する場合に特に役立ちます。**
:::

## メリットや活用場面

VPC Peeringには以下のようなメリットがあります。

![スクリーンショット 2024-11-15 21.16.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/d5c82343-b0c5-9685-3ab1-5b2c00d06f92.png)
引用画像：https://repost.aws/ja/questions/QUaiXS5LldTo60fjPq1c_sIA/vpc-peering-connection-across-different-region-ping-not-responding

:::note
- **セキュアな接続：**
AWSのプライベートネットワーク内で通信するため、安全な通信が確保されます。

- **低コスト：**
VPC Peeringは低コストでデータ転送が可能で、専用のVPNやDirect Connectよりも費用を抑えられます。

- **低レイテンシー：**
AWSの内部ネットワークで接続されるため、極めて低いレイテンシーでの通信が可能です。

- **柔軟なネットワーク設計：**
用途別にVPCを分け、接続の可否を柔軟にコントロールできます。
:::

以下は、VPC Peeringの典型的な活用事例です。

:::note 
- **マルチアカウント環境の管理：**
複数のAWSアカウント間でVPCを相互接続し、サービス間でリソースを共有するケース。

- **環境の分離：**
開発やテスト、本番環境を分離して構築し、VPC Peeringで必要なリソースのみ連携する。

- **セキュリティ強化：**
VPCごとに異なるCIDRブロックを設定し、通信範囲を制限した上でセキュアなネットワーク接続を行う。
:::

## 実際にやってみた
ここでは、AWSマネジメントコンソールを使用したVPC Peeringの設定手順を紹介します。

### 1. VPCの準備
まず、VPC Peeringを行うために2つのVPCを作成します。今回はVPC AとVPC Bを使用し、それぞれ異なるCIDRブロック（例：``10.0.0.0/16`` と ``10.1.0.0/16``）を割り当てます。

![スクリーンショット 2024-11-15 20.25.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/78d9fcab-f81a-e148-a04e-ab6d273049b1.png)

詳細なVPC作成手順については、過去の記事を参考にしてください。

https://qiita.com/free-honda/items/9513ef83f189b29f4796

ここまでで、以下のように2つのVPCが作成されていることを確認してください。

![スクリーンショット 2024-11-15 20.30.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/1ebadd55-fab2-f09d-d2c6-736909ad243a.png)

### 2. VPC Peering Connectionの作成
AWSマネジメントコンソールの「VPC」サービスにアクセスし、「VPCピアリング接続」を選択します。

![スクリーンショット 2024-11-15 20.32.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/a81fe403-2431-5819-cbb0-4b25205a92aa.png)

「VPCピア接続の作成」をクリックし、VPC AからVPC Bへの接続を設定します。

![スクリーンショット 2024-11-15 20.34.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/9716df75-a09b-852e-bb48-142fca26dbe1.png)

リクエストが送信されると、VPC Bのオーナーがリクエストを承認できる状態になります。

![スクリーンショット 2024-11-15 20.34.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/130c34fd-d626-8544-6592-e821fc36725a.png)

### 3. ピア接続の承認
VPC PeeringのリクエストがVPC Bのオーナーに届いたら、承認手続きを行います。

![スクリーンショット 2024-11-15 20.35.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/63223834-7b34-84dc-fb72-0c930f673c7d.png)

承認後、VPC Peeringが有効化されます。

### 4. ルートテーブルの更新
それぞれのVPCのルートテーブルを編集します。具体的には、VPC AのルートテーブルにVPC BのCIDRブロックを追加し、ターゲットとしてピア接続を指定します。

![スクリーンショット 2024-11-15 20.37.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/75b935fb-391a-b042-0af6-1a5fe3055e43.png)

同様に、VPC BのルートテーブルにもVPC AのCIDRブロックを追加し、ターゲットを設定します。

![スクリーンショット 2024-11-15 20.39.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/d4b1c559-bfdb-2603-e813-70723289209a.png)

すべての編集が完了した後、ルートテーブルが正しく更新されていることを確認してください。

### 5. セキュリティグループの設定

:::note
**ここでは、テスト用のEC2インスタンスがそれぞれのVPC内に存在していることを前提とします。**
:::

![スクリーンショット 2024-11-15 20.46.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/0e287f88-23c9-a307-8679-64db701fa043.png)

必要な通信が通るように、セキュリティグループを設定します。**たとえば、VPC AからVPC BへのSSH通信を許可する場合、VPC B側のインスタンスにSSHポート（22番）を開放します。**

![スクリーンショット 2024-11-15 20.47.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/c0b6e82b-757e-341a-9009-25705d941321.png)

## テスト検証の結果
設定が完了したら、VPC Peeringが正常に動作しているかテストを行います。

### Ping疎通
VPC AのEC2インスタンスからVPC Bのインスタンスに対してPingを実行します。

![スクリーンショット 2024-11-15 20.55.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/003a54fd-e2a5-2e9b-1d8f-abdb2daba898.png)

Pingが正常に応答する場合、VPC Peering接続が正常に機能していることが確認できます。

:::note alert
**VPC BのインスタンスのセキュリティグループにICMP（Ping用）のインバウンドルールを設定する必要があります。**
:::

### SSH通信
必要に応じて、VPC AのインスタンスからVPC BのインスタンスにSSH接続を試みます。接続が成功すれば、通信が正常に行われていることを確認できます。

![スクリーンショット 2024-11-15 21.10.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/a98c3247-6998-4047-310f-2e536db73670.png)

:::note alert
**事前にキーペア（pemファイル）の配置やアクセス権限の設定が必要です。**
:::

## まとめ
VPC PeeringによるマルチVPC接続は、AWS上でセキュアかつ柔軟にネットワークを拡張できる方法です。

:::note warn
**コストを抑えつつ、安全で低レイテンシーな通信が実現可能で、マルチアカウント環境や分離された環境を持つシステムに適しています。**
:::

各設定手順とテストを通じて、簡単かつ効果的なVPC Peeringの接続方法を理解できたと思います。

## 参考記事

https://dev.classmethod.jp/articles/try-vpc-peering/

https://dev.classmethod.jp/articles/handson-vpc-peering/