Direct Connect Gatewayでリージョン間VPCのプライベート接続が可能になりました!

Amazon VPC
AWS利用料業界最安値に挑戦します!

ウィスキー、シガー、パイプをこよなく愛する大栗です。

本日リージョン間のVPCでアクセスが可能になるDirect Connect Gatewayという機能がリリースされました。本来Direct Connectをリージョン間で共有する機能なのですが、リージョン間のVPCのプライベート接続もできるようになりましたので検証してみました。

Direct Connect Gateway

Direct Connect Gatewayとはリージョン間でDirect Connectを共有する機能となります。Direct Connect GatewayはDirect ConnectとVPCの間に配置されて専用線接続を各VPCへ配分します。今まではDirect Connectの専用接続であれば同一リージョンの複数VPCへ接続できましたが、これがリージョン間でも接続できるイメージです。

今までは以下のような構成でした。


引用:https://aws.amazon.com/jp/blogs/aws/new-aws-direct-connect-gateway-inter-region-vpc-access/

Direct Connect Gatewayを使うと各リージョンの接続を集約できます。


引用:https://aws.amazon.com/jp/blogs/aws/new-aws-direct-connect-gateway-inter-region-vpc-access/

注意事項

  • Direct Connect Gatewayを使用して、中国(北京)リージョンのVPCへ接続できません。
  • Direct Connect Gatewayの作成および使用には制限があります。(2017年11月2日現在)
    • アカウントごとのダイレクトコネクトゲートウェイの数:200(この制限は、リクエストで増やすことができます)
    • ダイレクトコネクトゲートウェイごとの仮想プライベートゲートウェイ:30(この制限は、リクエストで増やすことができます)
    • Direct Connect Gatewayごとの仮想インターフェイス:30(この制限は、リクエストで増やすことができます)
  • Direct Connect Gateway経由で接続するVPCは、重複するCIDRブロックを持つことはできません。
  • Direct Connect Gatewayへのパブリック仮想インターフェイスを作成することはできません。
  • Direct Connect Gatewayは、接続されたプライベート仮想インターフェイスと関連する仮想プライベートゲートウェイ間の通信だけをサポートします。次のトラフィックフローはサポートされていません。
    • Direct Connect Gatewayに関連付けられているVPC間の直接通信。
    • Direct Connect Gatewayに接続されている仮想インターフェイス間の直接通信。
    • Direct Connect Gatewayに接続された仮想インターフェイスと、同じDirect Connect Gatewayに関連付けられている仮想プライベートゲートウェイ上のVPN接続との間の直接通信。
  • 仮想プライベートゲートウェイを複数のDirect Connect Gatewayに関連付けることはできず、プライベート仮想インターフェイスを複数のDirect Connect Gatewayに接続することはできません。
  • Direct Connect Gatewayに関連付ける仮想プライベートゲートウェイは、VPCに接続する必要があります。
  • Direct Connect Gatewayにタグは付けられません。

試してみる

Direct Connectの検証環境がないため、リージョン間VPCの接続について検証します。

やりたい事

以下のように東京リージョンとソウルリージョンをDirect Connect Gatewayで接続してEC2間の通信を行います。

dx-gateway

前提

以下のVPCを各々のリージョンに作成済みとします。

東京リージョン

  • VPC(tokyo-vpc-1):10.1.0.0/16
    • サブネット(tokyo-vpc-1a):10.1.0.0/24
    • サブネット(tokyo-vpc-1c):10.1.1.0/24

ソウルリージョン

  • VPC(seoul-vpc-1):10.101.0.0/16
    • サブネット(seoul-vpc-1a):10.101.0.0/24
    • サブネット(seoul-vpc-1c):10.101.1.0/24

リージョン間接続を設定する

まず東京リージョンで仮想プライベートゲートウェイを作成します。

東京リージョンのVPCコンソールで仮想プライベートゲートウェイメニューから仮想プライベートゲートウェイの作成をクリックします。

Cursor_と_VpnGateways___VPC_Management_Console_と_Authy

名前はvgw-tokyo-1として、ASNはカスタムで4200000100を設定しました。以後出てくるASNは重複しないように設定していきます。

仮想プライベートゲートウェイの作成___VPC_Management_Console

作成した仮想プライベートゲートウェイを選択してVPC にアタッチをクリックします。

Cursor_と_VpnGateways___VPC_Management_Console_と_投稿の編集_‹_Developers_IO_—_WordPress

tokyo-vpc-1のVPCを選択してアタッチします。

Cursor_と_VPC_にアタッチ___VPC_Management_Console

次は同様にソウルリージョンで仮想プライベートゲートウェイを作成してアタッチします。

仮想プライベートゲートウェイの設定内容は名前はvgw-seoul-1として、ASNはカスタムで4200000200を設定しました。

仮想プライベートゲートウェイの作成___VPC_Management_Console

この仮想プライベートゲートウェイをseoul-vpc-1にアタッチします。

東京リージョンのDirect ConnectコンソールでDirect Connect Gatewayメニュー増えています。このメニューでDirect Connect Gateway の作成をクリックします。

DirectConnect_Console

Direct Connect Gatewayの設定内容は名前はtokyo-seoul-1として、Amazon 側の ASNは4200000000を設定しました。

Cursor_と_DirectConnect_Console

作成したDirect Connect Gatewayを選択してアクションメニューから仮想プライベートゲートウェイの関連付けをクリックします。

DirectConnect_Console

仮想プライベートゲートウェイの一覧からtokyo-vpc-1にアタッチしているものを選択します。

Cursor_と_Banners_and_Alerts_と_DirectConnect_Console

次にソウルリージョンのDirect Connectコンソールに移動します。東京で作成したDirect Connect Gatewayがソウルリージョンでも見えています。これを選択してアクションメニューから仮想プライベートゲートウェイの関連付けをクリックします。

DirectConnect_Console

仮想プライベートゲートウェイの一覧からseoul-vpc-1にアタッチしているものを選択します。

DirectConnect_Console

Direct Connect Gatewayの仮想ゲートウェイの関連付けタブを見ると東京リージョン(ap-northeast-1)とソウルリージョン(ap-northeast-2)の仮想プライベートゲートウェイが関連付けられていることが分かります。

Cursor_と_DirectConnect_Console_と_投稿の編集_‹_Developers_IO_—_WordPress

次に書くVPCのルートテーブルを設定します。

東京リージョンのVPCコンソールでルートテーブルメニューからtokyo-vpc-1のルートテーブルを選択して、ルート編集をクリックします。

Route_Tables___VPC_Management_Console

ソウル側のVPC(seoul-vpc-1)のCIDRである10.101.0.0/16をアタッチしている仮想プライベートゲートウェイに向けて保存します。

Route_Tables___VPC_Management_Console_と_投稿の編集_‹_Developers_IO_—_WordPress

ソウルリージョンでも同様にseoul-vpc-1のルートテーブルを編集します。東京側のVPC(tokyo-vpc-1)のCIDRである10.1.0.0/16をアタッチしている仮想プライベートゲートウェイに向けて保存します。

Route_Tables___VPC_Management_Console

後は各VPCでEC2を起動して、セキュリティグループ相手のVPCのCIDRのアクセスを許可します。

リージョン間でプライベート接続してみる

東京リージョンのEC2にログインしている状態とします。

1
2
[ec2-user@ip-10-1-0-61 ~]$ curl http://169.254.169.254/latest/meta-data/placement/availability-zone
ap-northeast-1a

ソウルリージョンのEC2のプライベートIPでSSHしてみると普通にログインできます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ ssh 10.101.0.189
The authenticity of host '10.101.0.189 (10.101.0.189)' can't be established.
ECDSA key fingerprint is SHA256:ABCDEFGH12345678IJKLMNOP12345678QRSTUV12345.
ECDSA key fingerprint is MD5:1a:2b:3c:4d:5e:6f:7g:8h:9i:0j:1k:2l:3m:4n:5o:6p.
Are you sure you want to continue connecting (yes/no)? yesy
Warning: Permanently added '10.101.0.189' (ECDSA) to the list of known hosts.
Last login: Thu Nov  2 01:44:40 2017 from 203.0.113.70
 
       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|
 
https://aws.amazon.com/amazon-linux-ami/2017.09-release-notes/
1 package(s) needed for security, out of 6 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-101-0-189 ~]$

AZを確認するとap-northeast-2aとなっており、ソウルリージョンであることが確認できます。

1
2
[ec2-user@ip-10-101-0-189 ~]$ curl http://169.254.169.254/latest/meta-data/placement/availability-zone
ap-northeast-2a

これでリージョン間のVPCでプライベート接続ができました!

補足

気になったので同一リージョンのVPC間でDirect Connect Gatewayを使ってプライベート通信ができるか確認してみました。しかし、以下のようになって通信が行えませんでした。同一リージョン間のVPC通信は普通にVPC Peeringで接続しましょう

1
2
[ec2-user@ip-192-0-2-1 ~]$ ssh 198.51.100.1
ssh: connect to host 198.51.100.1 port 22: Network is unreachable

さいごに

リージョン間で同一のネットワークが必要になるケースは多くないかもしれません。しかし高い可用性を求めるためにリージョン間フェイルオーバーなどを円滑に行うためには必須の機能です。re:Invent 2017でJames Hamilton氏がリージョン間は100Gbpsの専用光ファイバーで相互接続していると話していましたが、その専用光ファイバー網でリージョン間のVPCを接続しているのでしょう。

今まで以上に柔軟にアーキテクチャ構成を組めるのではないでしょうか?

1107 EC・モバイル・アナリティクス最前線〜国内外最新事例から学ぶこれからのマーケティング戦略〜

AWS利用料業界最安値に挑戦します!