Cloud Enterprise Network (CEN) は、リージョン内での柔軟な接続、分離、およびトラフィックリダイレクションポリシーをサポートします。このチュートリアルでは、VPC 同士を分離したまま、共有サービス VPC にアクセスできるようにする方法について説明します。
背景情報
ある企業が、中国 (杭州) リージョンに 3 つの Virtual Private Cloud (VPC) をデプロイしています。VPC3 は共有サービスをホストしています。目標は、VPC1 と VPC2 を相互に分離したまま、VPC1 と VPC2 が VPC3 にアクセスできるようにすることです。
ネットワーク計画
CEN のカスタムルートテーブル、ルートテーブルの関連付け、およびルート学習を使用して、ネットワークセグメントとルーティングを次のように設定します。
この例では、3 つの VPC とトランジットルーターはすべて同じ Alibaba Cloud アカウントに属しています。クロスアカウント構成については、「クロスアカウント VPC ルート分離」セクションをご参照ください。
VPC3 をトランジットルーターに接続するときは、トランジットルーターのシステムルートテーブルに自動的に関連付ける と システムルートをトランジットルーターのシステムルートテーブルに自動伝播する の高度な設定を有効にします。
これにより、トランジットルーターのシステムルートテーブルは VPC3 のルートを自動的に学習し、VPC3 はこのシステムルートテーブルを介してトラフィックを転送します。
VPC1 と VPC2 をトランジットルーターに接続するときは、システムルートをトランジットルーターのシステムルートテーブルに自動伝播する の高度な設定のみを有効にします。次に、VPC1 と VPC2 をトランジットルーター上のカスタムルートテーブルに関連付け、VPC3 を指すカスタムルートエントリを追加します。
トランジットルーターのシステムルートテーブルは、VPC1 と VPC2 からルートを学習します。VPC1 と VPC2 はカスタムルートテーブルを介して VPC3 にトラフィックを転送するため、VPC1 と VPC2 は相互に通信できなくなります。
VPC1、VPC2、および VPC3 のルートテーブルに 0.0.0.0/0 へのルートを追加します。このルートのネクストホップをトランジットルーターに設定します。
次の表に、VPC のネットワーク計画の詳細を示します。
重要ネットワークを計画する際は、VPC の CIDR ブロックが重複しないようにしてください。
VPC
vSwitch
vSwitch ゾーン
CIDR ブロック
Elastic Compute Service (ECS) インスタンス
VPC1
プライマリ CIDR ブロック: 192.168.0.0/16
vSwitch1
ゾーン A
192.168.0.0/24
ECS1 インスタンスのアドレス:
192.168.0.124
vSwitch2
ゾーン B
192.168.1.0/24
VPC2
プライマリ CIDR ブロック: 172.16.0.0/16
vSwitch3
ゾーン A
172.16.0.0/24
ECS2 インスタンスのアドレス:
172.16.0.222
vSwitch4
ゾーン B
172.16.1.0/24
VPC3
プライマリ CIDR ブロック: 10.0.0.0/16
vSwitch5
ゾーン A
10.0.0.0/24
ECS3 インスタンスのアドレス:
10.0.0.112
vSwitch6
ゾーン B
10.0.1.0/24
操作手順
このチュートリアルは、Alibaba Cloud コンソールまたは Terraform を使用して完了できます。
コンソール
ステップ 1: CEN インスタンスの作成
ネットワークインスタンスを接続する前に CEN インスタンスを作成します。
- CEN コンソールにログインします。
インスタンス ページで、CEN インスタンスの作成 をクリックします。
CEN インスタンスの作成 ダイアログボックスで、次のパラメーターを設定し、OK をクリックします。
[名前]:CEN インスタンスの名前を入力します。
[説明]:CEN インスタンスの説明を入力します。
ステップ 2: VPC 接続の作成
インスタンス ページで、CEN インスタンスの ID をクリックします。
基本設定 タブの VPC セクションで、
アイコンをクリックします。ピアネットワークインスタンスとの接続 ページで、以下のパラメーターを設定し、OK をクリックします。
[ネットワークタイプ]:デフォルトで [仮想プライベートクラウド (VPC)] が選択されています。
[リージョン]:ネットワークインスタンスがデプロイされているリージョンを選択します。この例では、[中国 (杭州)] が選択されています。
[トランジットルーター]:システムは、選択されたリージョンにトランジットルーターを自動的に作成します。
[リソース所有者 ID]:ネットワークインスタンスを所有するアカウントのタイプを選択します。この例では、デフォルト値の 現在のアカウント が使用されます。
課金方法:デフォルトは従量課金です。
[接続名]:接続の名前を入力します。
[ネットワーク]:接続する VPC の ID を選択します。この例では、VPC3 が選択されています。
[vSwitch]:トランジットルーターでサポートされているゾーンの vSwitch インスタンスを選択します。
単一ゾーンリージョンの場合は、1 つの vSwitch を選択します。複数ゾーンリージョンの場合は、異なるゾーンにある少なくとも 2 つの vSwitch を選択します。レイテンシーを削減するには、ゾーンごとに 1 つの vSwitch を選択します。
[詳細設定]:この例では、VPC3 については トランジットルーターのシステムルートテーブルに自動的に関連付ける と システムルートをトランジットルーターのシステムルートテーブルに自動伝播する のみを有効にします。
デフォルトでは、[Associate with Default Route Table of Transit Router] (VPC 接続をトランジットルーターのデフォルトルートテーブルに関連付ける)、[Propagate System Routes to Transit Router Route Table] (VPC のシステムルートをトランジットルーターにアドバタイズし、他のアタッチされたネットワークインスタンスとの通信を可能にする)、および [Automatically create routes pointing to the Transit Router in all route tables of this VPC] (VPC のすべてのルートテーブルに 3 つのルート (10.0.0.0/8、172.16.0.0/12, 192.168.0.0/16) を追加し、ネクストホップはトランジットルーターを指す。デフォルトでは、トランジットルーターは VPC にルートをアドバタイズしません) の 3 つのオプションが有効になっています。ルーティングをカスタマイズするには、これらのチェックボックスをオフにし、ルートの関連付けと伝播を手動で設定します。詳細については、「ルートの管理」をご参照ください。
説明IPv6 トラフィックの場合、VPC 接続を作成した後、ルート同期を有効にするか、VPC 内に VPC 接続を指す IPv6 ルートエントリを手動で追加します。
VPC3 の接続が作成されたら、接続をさらに作成 をクリックします。
VPC 接続が作成されたら、リストに戻る をクリックするとインスタンス詳細ページに戻ります。
ステップ 3: VPC とカスタムルートテーブルの関連付け
インスタンスの詳細ページで、作成したトランジットルーターを見つけて、その ID をクリックします。
トランジットルーターの詳細ページで、ルートテーブル タブをクリックします。
タブの左側のペインで、ルートテーブルの作成 をクリックします。
ルートテーブルの作成 ダイアログボックスで、次のパラメーターを設定し、OK をクリックします。
[トランジットルーター]:システムは現在のリージョンのトランジットルーターを自動的に選択します。
[名前]:ルートテーブルの名前を入力します。
[説明]:ルートテーブルの説明を入力します。
[マルチリージョン等価ルート]:デフォルト値のままにします。
ルートテーブルの詳細を表示 をクリックし、ルートテーブル タブに戻ります。
ルートテーブル タブで、先ほど作成したカスタムルートテーブルを選択し、ルートテーブル関連付け タブをクリックして、関連付けの作成 をクリックします。
関連付けの追加 ダイアログボックスで、このカスタムルートテーブルに関連付けるネットワークインスタンス接続を選択し、OK をクリックします。
関連付け後、VPC1 と VPC2 はこのルートテーブルを参照してトラフィックを転送します。
カスタムルートテーブルの詳細ページで、ルートエントリ タブをクリックし、ルートエントリの追加 をクリックします。
ルートエントリの追加 ダイアログボックスで、次のパラメーターを設定し、OK をクリックします。
[ルートテーブル]:システムは現在のカスタムルートテーブルを自動的に選択します。
[トランジットルーター ID]:システムは現在のリージョンのトランジットルーターを自動的に選択します。
[名前]:ルートエントリの名前を入力します。
[宛先 CIDR]:ルートの宛先 CIDR ブロックを入力します。この例では、10.0.0.0/16 を入力します。
[ブラックホールルート]:このオプションを選択すると、このルート宛てのすべてのトラフィックが破棄されます。この例では、いいえ を選択します。
[ネクストホップ]:ルートのネクストホップを選択します。この例では、VPC3 接続を選択します。
[説明]:ルートエントリの説明を入力します。
ステップ 4: 各 VPC へのデフォルトルートの追加
VPC コンソールで、宛先が 0.0.0.0/0 のルートを VPC1、VPC2、および VPC3 のルートテーブルに追加します。ルートのネクストホップをトランジットルーターに設定します。
- VPC コンソールにログインします。
左側のナビゲーションペインで、ルートテーブル をクリックします。
上部メニューで、ルートテーブルが存在するリージョンを選択します。
ルートテーブル ページで、目的のルートテーブルを探し、その ID をクリックします。
この例では、VPC3 のルートテーブルを選択します。
ルートテーブル詳細ページのルートエントリ タブで、カスタムルート をクリックし、次に ルートエントリの追加 をクリックします。
ルートエントリの追加 パネルで、以下のパラメーターを設定し、OK をクリックします。
[名前]:ルートエントリの名前を入力します。
[宛先 CIDR ブロック]:宛先 CIDR ブロックを入力します。この例では、0.0.0.0/0 を入力します。
[ネクストホップタイプ]:ネクストホップのタイプを選択します。この例では、[トランジットルーター]を選択します。
[トランジットルーター]:ネットワークインスタンス接続を選択します。この例では、VPC3 接続を選択します。
パラメーターの詳細については、「カスタムルートテーブルを使用したネットワークトラフィックの管理」をご参照ください。
ステップ 4 から ステップ 6 を繰り返し、宛先が 0.0.0.0/0 で、ネクストホップが VPC1 および VPC2 のトランジットルーターを指すルートを追加します。
CEN コンソールのトランジットルーター詳細ページで、VPC1、VPC2、VPC3、およびトランジットルーターのルートテーブルのルーティング情報を表示できます。
トランジットルーターの詳細ページで、ルーティング情報 をクリックして、VPC1、VPC2、および VPC3 のルートを表示します。
トランジットルーターの詳細ページで、ルーティング情報 をクリックします。
ネットワーク ドロップダウンリストから、VPC1、VPC2、または VPC3 の ID を選択して、そのルートを表示します。
図 1. VPC1 のルート
VPC1 のルート情報:トランジットルーターインスタンスの [Route Information] タブで、対応する VPC ネットワークインスタンスを選択します。ルートエントリには以下が含まれます。
宛先 CIDR ブロック
0.0.0.0/0:カスタムルート、アドバタイズされません。ネクストホップはトランジットルーター接続です。宛先 CIDR ブロック
100.64.0.0/10:システムルート、アドバタイズされません。宛先 CIDR ブロック
192.168.0.0/24:システムルート、アドバタイズされます。宛先 CIDR ブロック
192.168.1.0/24:システムルート、アドバタイズされます。
図 2. VPC2 のルート
VPC2 のルート情報には、次の 4 つのルートエントリが含まれています。
宛先 CIDR ブロック
0.0.0.0/0:カスタムルート、アドバタイズされません。ネクストホップはトランジットルーター接続です。宛先 CIDR ブロック
100.64.0.0/10:システムルート、アドバタイズされません。宛先 CIDR ブロック
172.16.0.0/24:システムルート、アドバタイズされます。宛先 CIDR ブロック
172.16.1.0/24:システムルート、アドバタイズされます。
図 3. VPC3 のルート
トランジットルーターの詳細ページで、[Route Information] タブをクリックし、VPC ネットワークインスタンスと対応するルートテーブルを選択して、ルートエントリを表示します。
0.0.0.0/0:カスタムルート、アドバタイズされません。ネクストホップはトランジットルーター接続 (tr-attach) です。10.0.0.0/24:システムルート、アドバタイズされます。10.0.1.0/24:システムルート、アドバタイズされます。100.64.0.0/10:システムルート、アドバタイズされません。
ルートテーブル タブでは、トランジットルーターのシステムルートテーブルが VPC1、VPC2、および VPC3 から学習したルートを表示できます。
トランジットルーターの詳細ページで、ルートテーブル をクリックします。
ルートテーブル タブで、ルートテーブル内のルートエントリを表示します。
図 4. システムルートテーブル
システムルートテーブルのルートエントリ詳細 (タイプ:システム):すべてのルートエントリは自動学習タイプで、次の宛先 CIDR ブロックとネクストホップ接続インスタンスが含まれます。
10.0.0.0/24および10.0.1.0/24:ネクストホップは attach3 (VPC3 に対応) です。172.16.0.0/24および172.16.1.0/24:ネクストホップは attach2 (VPC2 に対応) です。192.168.0.0/24および192.168.1.0/24:ネクストホップは attach1 (VPC1 に対応) です。
図 5. カスタムルートテーブル
トランジットルーターのカスタムルートテーブルの詳細ページには、ルートテーブルのタイプが [Custom] で、ステータスが利用可能であることが表示されます。ルートエントリリストには 1 つのスタティックルートが含まれています。宛先 CIDR ブロックは
10.0.0.0/16で、ネクストホップは VPC3 のネットワークインスタンス接続を指します。
ステップ 5: ネットワーク接続性のテスト
VPC1、VPC2、および VPC3 間の接続性をテストします。
開始する前に、VPC1、VPC2、および VPC3 の ECS インスタンスのセキュリティグループルールで、インスタンス間の通信が許可されていることを確認してください。詳細については、「セキュリティグループルールの表示」をご参照ください。
VPC1 の ECS インスタンスにログインします。詳細については、「ECS インスタンスへの接続方法」をご参照ください。
ping コマンドを実行して、VPC3 内の ECS インスタンスの IP アドレスに ping を送信し、VPC1 と VPC3 間の接続性をテストします。
出力から、VPC1 と VPC3 が通信できることがわかります。
[root@iZrxxx3iiZ ~]# ping 10.0.0.112 PING 10.0.0.112 (10.0.0.112) 56(84) bytes of data. 64 bytes from 10.0.0.112: icmp_seq=1 ttl=64 time=0.835 ms 64 bytes from 10.0.0.112: icmp_seq=2 ttl=64 time=0.582 ms 64 bytes from 10.0.0.112: icmp_seq=3 ttl=64 time=0.587 ms 64 bytes from 10.0.0.112: icmp_seq=4 ttl=64 time=0.584 ms ^C --- 10.0.0.112 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3112ms rtt min/avg/max/mdev = 0.582/0.647/0.835/0.108 ms [root@iZrj9fxxxmr3iiZ ~]#VPC2 の ECS インスタンスにログインし、ping コマンドを使用して VPC3 の ECS インスタンスの IP アドレスに ping を実行し、VPC2 と VPC3 間の接続性をテストします。
出力から、VPC2 と VPC3 が通信できることがわかります。
[root@iZrxxx a81Z ~]# ping 10.0.0.112 PING 10.0.0.112 (10.0.0.112) 56(84) bytes of data. 64 bytes from 10.0.0.112: icmp_seq=1 ttl=64 time=1.17 ms 64 bytes from 10.0.0.112: icmp_seq=2 ttl=64 time=0.931 ms 64 bytes from 10.0.0.112: icmp_seq=3 ttl=64 time=0.923 ms 64 bytes from 10.0.0.112: icmp_seq=4 ttl=64 time=0.938 ms ^C --- 10.0.0.112 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3035ms rtt min/avg/max/mdev = 0.923/0.992/1.178/0.111 ms [root@iZrj906fxxx LZ ~]#VPC1 内の ECS インスタンスにログインし、ping コマンドを使用して VPC2 内の ECS インスタンスの IP アドレスに ping を実行し、VPC1 と VPC2 間の接続性をテストします。
出力から、VPC1 と VPC2 が通信できないことがわかります。
[root@iZrjxxx r3iiZ ~]# ping 172.16.0.222 PING 172.16.0.222 (172.16.0.222) 56(84) bytes of data. ^Z [5]+ Stopped ping 172.16.0.222 [root@iZrj9f7xxx3iiZ ~]#
クロスアカウント VPC ルート分離
このチュートリアルで説明されているルーティングと分離のメカニズムは、クロスアカウント構成にも同様に適用されます。分離は、VPC1 と VPC2 のルート学習 (システムルートをトランジットルーターのシステムルートテーブルに自動伝播する) のみを有効にし、それらをカスタムルートテーブルに関連付け、そのルートテーブルに VPC3 へのカスタムルートを追加することで実現します。このメカニズムは、VPC がどの Alibaba Cloud アカウントに属しているかには依存しません。
前提条件:クロスアカウントの VPC 接続を作成する前に、VPC を所有するアカウントは、トランジットルーターを所有するアカウントに権限を付与する必要があります。手順については、「ネットワークインスタンスのクロスアカウント権限付与」をご参照ください。
設定の違い:[ステップ 2: VPC 接続の作成] で、リソース所有者 ID フィールドで 現在のアカウント の代わりに [Another Account] を選択し、VPC を所有する Alibaba Cloud アカウントのプライマリアカウント ID を入力します。他のすべての設定項目は、同一アカウントのシナリオと同じです。パラメーターの詳細については、「VPC 接続の作成」をご参照ください。
操作の所有権:[ステップ 1] から [ステップ 3] (CEN インスタンス、トランジットルーター、VPC 接続、およびそのルートエントリを含むカスタムルートテーブルの作成) はすべて、トランジットルーターを所有するアカウントで実行します。[ステップ 4: 各 VPC へのデフォルトルートの追加] は、各 VPC の所有アカウントが、そのアカウント自身の VPC コンソールで実行する必要があります。
ルートマップを使用したクロスアカウント VPC 分離
クロスアカウント VPC が CEN に接続されると、デフォルトでトランジットルーター上の他のすべての VPC インスタンスに完全に接続されます。クロスアカウント VPC を特定の VPC インスタンスから選択的に分離するには、このトピックで前述したカスタムルートテーブルとルートテーブルの関連付けの方法を使用する代わりに、トランジットルーターのルートテーブルにルートマップを設定します。このメカニズムは、「クロスアカウント VPC ルート分離」で説明されているカスタムルートテーブルベースの分離とは独立しています。VPC アタッチメントが使用するルートテーブルを変更するのではなく、コントロールプレーンでルートアドバタイズをフィルタリングすることで分離を実現します。
仕組み:ルートマップは、トランジットルーターが特定の VPC アタッチメントにアドバタイズするルートを制御します。2 つの VPC アタッチメント間のトラフィックに一致する Deny ルートマップを作成すると、基盤となるルートテーブルが変更されていなくても、トランジットルーターは対応するルートのアドバタイズを停止するため、2 つの VPC インスタンスは相互に到達できなくなります。
開始する前に:ルートマップは、ルートマップが作成された後に発生するルートアドバタイズに対してのみ有効になります。2 つの VPC インスタンス間の通信を可能にするルートエントリがルートテーブルにすでに存在する場合は、まずそのルートエントリを削除します。そうしないと、既存のルートが引き続き機能し、分離は有効になりません。
Deny ルートマップを設定するには:
トランジットルーターのルートテーブルに、次の設定でルートマップを作成します。
アクション:Deny
優先度:20。値が小さいほど優先度が高くなります。
方向:[Export from Regional Gateway] (ルートマップは、リージョンからアドバタイズされるルートをフィルタリングします)。
ソースインスタンスID:クロスアカウント VPC アタッチメントの ID (例:
vpc-xxx)。宛先インスタンスID:ソース VPC から分離したい VPC アタッチメントの ID (例:
vpc-yyy)。
説明コンソールのルートマップ作成ページの [Source Instance IDs] ドロップダウンリストに、VPC 接続がルートテーブルの関連付けによってすでにルートテーブルに関連付けられている場合でも、選択可能なオプションが表示されないことがあります。この場合、代わりに CreateCenRouteMap API を呼び出し、
vpc-xxx形式で VPC インスタンス ID を渡してルートマップを作成します。ルートマップが有効になったら、送信元 VPC の ECS インスタンスにログインし、ping コマンドを実行して、隔離された VPC の ECS インスタンスへの接続性をテストします。ping コマンドは失敗 (100% のパケットロス) します。これは、ルートマップによる隔離が有効であることを示します。
Terraform
Terraform を使用して、このチュートリアルの環境を構築できます。Terraform のインストールと設定の手順については、Terraform のインストールをご参照ください。
次の手順では、Linux ホストで Terraform v1.9.8 を実行する方法について説明します。開始する前に、認証を設定していることを確認してください。
このチュートリアルのリソースの一部には料金が発生します。予期しない料金を避けるため、不要になったリソースは解放してください。
ステップ 1: リソースの作成
次のコードは、このシナリオのすべてのリソースを定義します。これを新しいディレクトリに .tf ファイルとして保存します。
variable "pname" {
description = "リソースのプレフィックス名"
type = string
default = "tf-CenSharedVpc"
}
variable "default_region" {
description = "デフォルトリージョン"
type = string
default = "cn-hangzhou"
}
variable "az_list" {
description = "使用するアベイラビリティゾーンのリスト"
type = list(string)
default = ["cn-hangzhou-j", "cn-hangzhou-k"]
}
variable "vpc_cidr_list" {
description = "VPC CIDR ブロックのリスト"
type = list(string)
default = ["192.168.0.0/16", "172.16.0.0/16", "10.0.0.0/16"]
}
variable "vsw_cidr_list" {
description = "VSW CIDR ブロックのリスト"
type = list(string)
default = [
"192.168.0.0/24", "192.168.1.0/24",
"172.16.0.0/24", "172.16.1.0/24",
"10.0.0.0/24", "10.0.1.0/24"
]
}
variable "ecs_ip_list" {
description = "ECS IP のリスト"
type = list(string)
default = ["192.168.0.124", "172.16.0.222", "10.0.0.112"]
}
provider "alicloud" {
region = var.default_region
}
# --- 3 つの VPC、6 つの vSwitch、3 つの ECS インスタンス
resource "alicloud_vpc" "vpc" {
count = length(var.vpc_cidr_list)
vpc_name = "${var.pname}-vpc${count.index + 1}"
cidr_block = var.vpc_cidr_list[count.index]
}
resource "alicloud_vswitch" "vsw" {
count = length(var.vsw_cidr_list)
vpc_id = alicloud_vpc.vpc[floor(count.index / length(var.az_list))].id
cidr_block = var.vsw_cidr_list[count.index]
zone_id = var.az_list[count.index % length(var.az_list)]
vswitch_name = "${var.pname}-vsw${count.index + 1}"
}
resource "alicloud_instance" "ecs" {
count = length(var.vpc_cidr_list)
instance_name = "${var.pname}-ecs${count.index + 1}"
instance_type = "ecs.e-c1m1.large"
security_groups = [alicloud_security_group.sg[count.index].id]
vswitch_id = alicloud_vswitch.vsw[count.index * length(var.az_list)].id
image_id = "aliyun_3_x64_20G_qboot_alibase_20230727.vhd"
system_disk_category = "cloud_essd"
private_ip = var.ecs_ip_list[count.index]
instance_charge_type = "PostPaid"
}
# --- 3 つの SG
resource "alicloud_security_group" "sg" {
count = length(var.vpc_cidr_list)
name = "${var.pname}-${count.index + 1}"
vpc_id = alicloud_vpc.vpc[count.index].id
}
resource "alicloud_security_group_rule" "allow_inbound_ssh" {
count = length(var.vpc_cidr_list)
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "22/22"
priority = 1
security_group_id = alicloud_security_group.sg[count.index].id
cidr_ip = "0.0.0.0/0"
}
resource "alicloud_security_group_rule" "allow_inbound_icmp" {
count = length(var.vpc_cidr_list)
type = "ingress"
ip_protocol = "icmp"
nic_type = "intranet"
policy = "accept"
port_range = "-1/-1"
priority = 1
security_group_id = alicloud_security_group.sg[count.index].id
cidr_ip = "0.0.0.0/0"
}
# --- CEN と TR
resource "alicloud_cen_instance" "cen" {
cen_instance_name = "${var.pname}-cen1"
}
resource "alicloud_cen_transit_router" "tr" {
transit_router_name = "${var.pname}-tr"
cen_id = alicloud_cen_instance.cen.id
}
data "alicloud_cen_transit_router_route_tables" "tr" { # TR システムテーブルを取得
transit_router_id = alicloud_cen_transit_router.tr.transit_router_id
transit_router_route_table_type = "System"
}
# 3 つのアタッチメント
resource "alicloud_cen_transit_router_vpc_attachment" "attach" {
count = length(var.vpc_cidr_list)
cen_id = alicloud_cen_instance.cen.id
transit_router_id = alicloud_cen_transit_router.tr.transit_router_id
vpc_id = alicloud_vpc.vpc[count.index].id
zone_mappings {
zone_id = var.az_list[0]
vswitch_id = alicloud_vswitch.vsw[count.index * length(var.az_list)].id
}
zone_mappings {
zone_id = var.az_list[1]
vswitch_id = alicloud_vswitch.vsw[count.index * length(var.az_list) + 1].id
}
transit_router_vpc_attachment_name = "attach${count.index + 1}"
}
# 3 つの伝播
resource "alicloud_cen_transit_router_route_table_propagation" "propa" {
count = length(var.vpc_cidr_list)
transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr.tables[0].id
transit_router_attachment_id = alicloud_cen_transit_router_vpc_attachment.attach[count.index].transit_router_attachment_id
}
# 1 つのカスタムテーブル
resource "alicloud_cen_transit_router_route_table" "custom_table" { # TR カスタムテーブルを作成
transit_router_id = alicloud_cen_transit_router.tr.transit_router_id
transit_router_route_table_name = "custom_table"
}
resource "alicloud_cen_transit_router_route_entry" "tr_entry" {
transit_router_route_table_id = alicloud_cen_transit_router_route_table.custom_table.transit_router_route_table_id
transit_router_route_entry_destination_cidr_block = "10.0.0.0/16"
transit_router_route_entry_next_hop_type = "Attachment"
transit_router_route_entry_name = "entry1_name"
transit_router_route_entry_description = "entry1_desc"
transit_router_route_entry_next_hop_id = alicloud_cen_transit_router_vpc_attachment.attach[2].transit_router_attachment_id
}
# attach1、2 とカスタムテーブルを関連付け
resource "alicloud_cen_transit_router_route_table_association" "ass1" {
transit_router_route_table_id = alicloud_cen_transit_router_route_table.custom_table.transit_router_route_table_id
transit_router_attachment_id = alicloud_cen_transit_router_vpc_attachment.attach[0].transit_router_attachment_id
}
resource "alicloud_cen_transit_router_route_table_association" "ass2" {
transit_router_route_table_id = alicloud_cen_transit_router_route_table.custom_table.transit_router_route_table_id
transit_router_attachment_id = alicloud_cen_transit_router_vpc_attachment.attach[1].transit_router_attachment_id
}
# attach3 とシステムテーブルを関連付け
resource "alicloud_cen_transit_router_route_table_association" "ass3" {
transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr.tables[0].id
transit_router_attachment_id = alicloud_cen_transit_router_vpc_attachment.attach[2].transit_router_attachment_id
}
# VPC エントリ
resource "alicloud_route_entry" "vpc_entry" {
count = length(var.vpc_cidr_list)
route_table_id = alicloud_vpc.vpc[count.index].route_table_id
destination_cidrblock = "0.0.0.0/0"
nexthop_type = "TransitRouter"
nexthop_id = alicloud_cen_transit_router.tr.transit_router_id
}
output "ecs1_login_address" {
value = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs®ionId=${var.default_region}&instanceId=${alicloud_instance.ecs[0].id}"
}
output "ecs2_login_address" {
value = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs®ionId=${var.default_region}&instanceId=${alicloud_instance.ecs[1].id}"
}
output "ecs3_login_address" {
value = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs®ionId=${var.default_region}&instanceId=${alicloud_instance.ecs[2].id}"
}ステップ 2: ネットワーク接続性のテスト
次の手順に従って、VPC1、VPC2、および VPC3 間の接続性をテストします。
VPC1 の ECS1 インスタンス (インスタンス名:
tf-CenSharedVpc-ecs1) にログインします。Terraform の出力で ECS1 のログイン URL を見つけます。ブラウザーで URL を開き、一時的な SSH キーベースの認証を使用します。
Outputs: ecs1_login_address = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs®ionId=cn-hangzhou&instanceId=i-bp1g4zxxx" ecs2_login_address = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs®ionId=cn-hangzhou&instanceId=i-bp1ct8xxx" ecs3_login_address = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs®ionId=cn-hangzhou&instanceId=i-bp1iiwxxx"ping コマンドを実行し、VPC3 内の ECS3 インスタンスの IP アドレスに ping して、VPC1 と VPC3 間の接続性をテストします。
ping 10.0.0.112出力から、VPC1 と VPC3 が通信できることがわかります。
[root@iZrxxx3iiZ ~]# ping 10.0.0.112 PING 10.0.0.112 (10.0.0.112) 56(84) bytes of data. 64 bytes from 10.0.0.112: icmp_seq=1 ttl=64 time=0.835 ms 64 bytes from 10.0.0.112: icmp_seq=2 ttl=64 time=0.582 ms 64 bytes from 10.0.0.112: icmp_seq=3 ttl=64 time=0.587 ms 64 bytes from 10.0.0.112: icmp_seq=4 ttl=64 time=0.584 ms ^C --- 10.0.0.112 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3112ms rtt min/avg/max/mdev = 0.582/0.647/0.835/0.108 ms [root@iZrj9fxxxmr3iiZ ~]#VPC2 の ECS2 インスタンス (
tf-CenSharedVpc-ecs2) にログオンし、ping コマンドで VPC3 の ECS3 インスタンスの IP アドレスに ping を実行して、VPC2 と VPC3 間の接続性をテストします。ping 10.0.0.112出力から、VPC2 と VPC3 が通信できることがわかります。
[root@iZrxxx a81Z ~]# ping 10.0.0.112 PING 10.0.0.112 (10.0.0.112) 56(84) bytes of data. 64 bytes from 10.0.0.112: icmp_seq=1 ttl=64 time=1.17 ms 64 bytes from 10.0.0.112: icmp_seq=2 ttl=64 time=0.931 ms 64 bytes from 10.0.0.112: icmp_seq=3 ttl=64 time=0.923 ms 64 bytes from 10.0.0.112: icmp_seq=4 ttl=64 time=0.938 ms ^C --- 10.0.0.112 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3035ms rtt min/avg/max/mdev = 0.923/0.992/1.178/0.111 ms [root@iZrj906fxxx LZ ~]#VPC1 の ECS1 インスタンス (
tf-CenSharedVpc-ecs1) にログインします。 ping コマンドを使用して、VPC2 の ECS2 インスタンスの IP アドレスに ping を実行し、VPC1 と VPC2 間の接続をテストします。ping 172.16.0.222出力から、VPC1 と VPC2 が通信できないことがわかります。
[root@iZrjxxx r3iiZ ~]# ping 172.16.0.222 PING 172.16.0.222 (172.16.0.222) 56(84) bytes of data. ^Z [5]+ Stopped ping 172.16.0.222 [root@iZrj9f7xxx3iiZ ~]#
ステップ 3: リソースのクリーンアップ
確認後、次のコマンドを実行してリソースを解放します。
terraform destroy --auto-approve