最近1つの現場が終わりまして、次の現場の面談を多く受けていました。その中で多かったのがオンプレからクラウド移行の案件、もしくは他の環境を移行する案件がありました。
ここしばらくオンプレからクラウド移行の案件、もしくはハイブリッドな環境を構築する案件にまた当たった時に色々問われるだろうと思い、クラウド移行について調べていました。
ちょっと調べてみるとすぐに出てくるのがDirectConnectとTransit Gatewayです。
DirectConnectについては業者が作業をしてくれるらしいのですが、SEがコンソール画面から作業する必要があるのはTransit Gateway。
オンプレとクラウドのネットワークをつなぐ際にどのような役割、メリットがあるのか、そしてメインの機能である複数のVPCを接続ができるか実際に試してみました。
Transit Gatewayとは
VPCとオンプレのネットワークを中央ハブで接続して数千のVPC、VPN、ダイレクトコネクトを接続可能にし複雑なルーティングを簡素化してくれる。
これまでは複数のVPCをつなぐときはピアリングを使って迂回しないといけないネットワークだったのが
Transit Gatewayが中央ハブの役割をするルーターの役割をしてくれるのでごちゃごちゃとしたピアリング接続をしなくてもよくなる。
VPCを複数接続させること以外にもマルチアカウントで使えるリージョン間のピアリング接続、ネットワーク変更、ルート変更、接続ステータス更新の通知受けるメトリクス機能などがある。
サクっとおさらいをしたところで、、
VPCを作成
[VPC]-[VPCを作成]
VPCを3つ作成しました。[プロジェクト-VPC]は今回の記事では使用しないので無視します。
Transit Gatewayを作成
[VPC]-[Transitgateway]
[Transitgatewayを設定]のデフォルトテーブルの関連付け、デフォルトテーブルの関連付けにチェックを入れておきます。
チェックを入れておくことで作成した後、アタッチメントをした時に自動でルートテーブルの関連付けとデフォルトルートテーブルの伝播まで行ってくれます。
補足:Transit Gatewayルートテーブルは通常のルートテーブルとは違います。Transit Gatewayが他のVPCと接続をするためのルートテーブルです。そのため操作はTransit Gatewayルートテーブルで行います。
それぞれの設定項目について記載します。
●Amazon 側の自律システム番号 (ASN)
BGPセッションのAWS側の自立システム番号(ASN)のことを指します。
・ASNとは
インターネットは1つのネットワークではなく複数のネットワークでできています。それぞれの小さなネットワークがASといい、それらに世界で被らない識別番号がASNといいます。
●DNS番号
Transit Gateway にアタッチされた VPC DNS解決を有効にします。パブリック IPv4 DNS ホスト名(EC2)をプライベート IPv4 アドレスに解決するために VPCが必要な場合は、[有効] を選択します。EC2の名前解決版と行ったところでしょうか。
●VPN ECMP サポート
接続が同じ CIDR をアドバタイズ(告知)する場合、トラフィックは複数の接続間で均等に分散されるルーティングプロトコルのことを指します。
●デフォルトルートテーブルの関連付け
VPCを指定したTransit Gatewayにアタッチさせるとルートテーブルを自動的に紐付けます。
●デフォルトルートテーブルの伝播
上記と同じでアタッチさせると自動的に伝播してくれます。
●マルチキャストサポート
マルチキャストトラフィックのルーターとして使用したい場合に選択します。(トラフィックを複数のグループにフラッディングさせます)
●クロスアカウント共有オプションの設定
他のアカウントのアタッチメントを自動的に承諾します。
それぞれ設定し、Transit Gatewayの作成を完了させると状態がAvailableになっていれば良いです。
続けて作成したVPCをTransit Gatewayにアタッチさせます。
VPCをアタッチメントさせる
[VPC]-[Transit Gateway]-[Transit Gateway アタッチメント]
作成したTransit Gateway IDを選択します。
アタッチするVPC IDを選択して対象のサブネットIDを選択します。こちらのアタッチメントを行うと・・・
状態がAvailableになれば、関連付けルートテーブルIDに自動的にルートテーブルが紐付きます。この要領で残り2つのVPCのアタッチメントを作成しルートテーブルに紐付けていきます。
2つのVPCをアタッチさせた後、どのようにルートテーブルに紐づいているか見てみましょう。
[VPC]-[Transit Gateway]-[Transit Gateway ルートテーブル]
先ほどのVPCが関連づけられているのかがわかります。
伝播が済んでいるのがわかります。
ルートテーブルにもルートが記載されていることがわかります。
話が横道に逸れますがTransit gatewayのVPC接続の仕組みを簡単に説明します。(参照記事にも記載あり)
VPC接続の仕組み
アタッチメント
VPCとTransit Gatewayはそれぞれ独立したサービスなのでアタッチ(接続)させる必要があります。こちらの作業は[Transit gateway アタッチメント]から行います。
アソシエーション
先ほどTransit Gatewayに接続したVPCをTransit Gatewayルートテーブルに紐付ける作業です。
プロパゲーション
VPCからルートテーブルに経路を伝播します。
伝播というのは少々難しいのですが、普及、つながらせる、伝わらせる。といった意味です。クラスメソッドさんの記事の画像だとルートテーブルのルート情報が使えるようになるとイメージでしょうか。気になる方はぜひ読んでみてください。
整理すると、、、
①アタッチメントで独立しているVPCとTransit gatewayを接続
②アソシエーションで指定のルートテーブルと紐付ける
③プロパゲーションでルートテーブルに記載されているルート情報を使用することができる
というような流れです。
ちなみにアソシエーションとプロパゲーションはTransit Gatewayを作成した時にデフォルトテーブルの関連付け、デフォルトテーブルの関連付けにチェックを入れとくとアタッチメントを行った時に自動で行われます。
サブネットにルートテーブルを紐付ける
先ほどのTransit GatewayルートテーブルはTransit Gatewayから各VPCへルートを作成しました。
今度はあるVPC-AがVPC-Bにトラフィックを送る際にTransit Gatewayへ向かうためのルートを作成します。
[VPC]-[サブネット]-[任意のサブネット]-[ルートテーブル]
任意のルートテーブルIDをコピーし
[VPC]-[ルートテーブル]に移動してルートテーブルを検索します。[ルートを編集]をクリックして送信先をそれぞれのVPCのCIDRをいれていきます。
ターゲットはそのVPCに送った時にTransit Gatewayを経由するように設定します。そのためVPC-Aの場合(10.0.0.0/16の場合)このように設定します。
続いてVPC-B(10.1.0.0/24の場合)の場合、このように設定します。
最後にVPC-C(10.2.0.0/24の場合)の場合、このように設定します。
これでそれぞれのVPCからトラフィックを送ってもTransit Gatewayに向かうように設定ができました。
続いてEC2を立ててpingを送ります。そのためセキュリティグループを作成します。(EC2を立てる工程は省きます。)
セキュリティグループを作成
VPC-A(10.0.0.0/16の場合)に立てているEC2のセキュリティグループ
10.1.0.0/16と10.2.0.0/16のインバウンドルールが設定されていればOKです。
VPC-A(10.1.0.0/16の場合)に立てているEC2のセキュリティグループ
10.0.0.0/16と10.2.0.0/16のインバウンドルールが設定されていればOKです。
VPC-A(10.2.0.0/16の場合)に立てているEC2のセキュリティグループ
10.0.0.0/16と10.1.0.0/16のインバウンドルールが設定されていればOKです。
これでpingを飛ばして疎通する体制が整いました。それではターミナルから打ってみましょう。(EC2を立てる工程は省きます。)
ターミナルからpingを飛ばす
まずはキーペアを使ってEC2に入るための準備を行います。EC2を作成した時にキーペアをデスクトップに置いておきます。
cd Desktop
まずはキーペアを置いているデスクトップに移動します。
chmod 600 Sample01.pem
キーペアを使用するパーミッション(権限)を変更します。600なので読み込みと書き込みが可能にします。
ssh -i Sample01.pem ec2-user@13.112.157.166
SSHコマンドを入力してSSH接続を行います。@は接続先になるのでEC2のパブリックIPをいれます。
そうするとAmazon Linux 2 AMIの表示がされれば成功です。SSH接続はパブリックIPで行いましたがプライベートIPで表示されます(赤枠で囲まれている)
それではpingを行います。
10.0.0.0に設置しているEC2から10.1.0.0と10.2.0.0に設置しているEC2に向けてpingを飛ばします。
これで疎通していることが確認できました。一応これでVPCをまたいで通信ができることが確認できます。
しかし本当にやりたかったことはEC2からまた別のVPCのEC2に移動しpingを飛ばしたかったのですがあいにく時間の都合とAWSのコスト面で終わりたいと思います。
他にもこんな記事書いています!
参考にした記事
Transit Gateway
AS番号
Transit Gatewayを利用してVPC間で通信してみた
AWS EC2インスタンスへSSH接続する方法 ( Mac )