すべてのプロダクト
Search
ドキュメントセンター

Cloud Enterprise Network:トランジットルーター経由での ECS からクロスリージョン OSS へのアクセス

最終更新日:Sep 04, 2026

このトピックでは、Enterprise Edition トランジットルーターを使用して、Virtual Private Cloud (VPC) 内の Elastic Compute Service (ECS) インスタンスが、クロスリージョンで Object Storage Service (OSS) にプライベートアクセスする方法について説明します。

説明

このチュートリアルのサンプルコードは、ワンクリックで実行できます。ワンクリック実行

使用例

image

このトピックでは、上図のシナリオを例として使用します。ある企業が China (Shanghai) リージョンに VPC1 という VPC を持っており、ECS インスタンス上にアプリケーションをデプロイしています。この企業は China (Hangzhou) リージョンに OSS をデプロイしており、VPC1 内の ECS インスタンスから China (Hangzhou) リージョンの OSS サービスへプライベートアクセスして、必要なリソースを取得したいと考えています。

OSS はリージョンレベルのクラウドサービスであり、どの VPC にも属していませんが、同じリージョン内の VPC は OSS 内部エンドポイント経由で OSS にアクセスできます。そのため、企業は OSS がデプロイされている China (Hangzhou) リージョンに VPC2 という VPC を作成し、VPC2 をトランジットネットワークとして使用する必要があります。次に、企業は VPC1 と VPC2 をそれぞれのリージョンの Enterprise Edition トランジットルーターに接続し、2 つのトランジットルーター間にリージョン間接続を作成します。同時に、VPC1 内、および China (Hangzhou) リージョンのトランジットルーター上に、OSS 内部 CIDR ブロックへのルートを手動で追加します。設定が完了すると、VPC1 内の ECS インスタンスから OSS へのトラフィックは次のように流れます:ECS インスタンス → China (Shanghai) のトランジットルーター → リージョン間接続 → China (Hangzhou) のトランジットルーター → VPC2 → OSS 内部エンドポイント。

説明

このソリューションでは、VPC2 はクロスリージョントラフィックが OSS 内部エンドポイントに到達するためのパスを提供するトランジットネットワークとしてのみ機能します。China (Hangzhou) リージョンにすでに VPC をお持ちの場合は、その VPC をトランジットネットワークとして Enterprise Edition トランジットルーターに直接接続できるため、VPC2 を作成する必要はありません。

ネットワーク計画

重要

CIDR ブロックを計画する際は、相互に通信する必要がある VPC の CIDR ブロックが重複しないようにしてください。

リソース

VPC リージョン

CIDR ブロックと IP アドレス

VPC1

China (Shanghai)

プライマリ CIDR ブロック:192.168.0.0/16

  • vSwitch 1 の CIDR ブロック:192.168.0.0/24。vSwitch 1 はゾーン M にあります。

  • vSwitch 2 の CIDR ブロック:192.168.1.0/24。vSwitch 2 はゾーン N にあります。

  • ECS の IP アドレス:192.168.0.1。ECS インスタンスは vSwitch 1 にデプロイされています。

VPC2

China (Hangzhou)

プライマリ CIDR ブロック:172.16.0.0/16

  • vSwitch 1 の CIDR ブロック:172.16.1.0/24。vSwitch 1 はゾーン J にあります。

  • vSwitch 2 の CIDR ブロック:172.16.2.0/24。vSwitch 2 はゾーン K にあります。

手順

このトピックでは、コンソールと Terraform の 2 つの設定方法を説明します。ニーズに合った方法を選択してください。

コンソール

事前準備

設定を開始する前に、次の準備が完了していることを確認してください。各リソースの CIDR ブロックについては、上記の「ネットワーク計画」セクションをご参照ください。

  • China (Shanghai) リージョン: VPC1 がプライマリ CIDR ブロック 192.168.0.0/16 で作成されています。VPC1 内では、2 つのアベイラビリティーゾーンに vSwitch が作成されており、各 vSwitch には少なくとも 1 つの利用可能な IP アドレスがあり、Elastic Compute Service (ECS) インスタンスがいずれかの vSwitch にデプロイされています。詳細については、「IPv4 CIDR ブロックを持つ VPC の作成」をご参照ください。

  • China (Hangzhou) リージョン: OSS がデプロイされています。つまり、OSS バケットが作成されています。バケットを作成していない場合は、「クイックスタート」をご参照ください。

  • VPC1 のセキュリティグループルールが必要なトラフィックを許可しています。詳細については、「セキュリティグループルールの表示」および「セキュリティグループルールの追加」をご参照ください。

ステップ 1:トランジット VPC の作成

China (Hangzhou) リージョンで、プライマリ CIDR ブロック 172.16.0.0/16 を持つ VPC2 を作成し、次に 2 つのアベイラビリティーゾーンに vSwitch を作成します。各 vSwitch には少なくとも 1 つの利用可能な IP アドレスがあることを確認してください。このソリューションでは、VPC2 は OSS サービスにアクセスするためのトランジットネットワークとして機能します。すでに China (Hangzhou) リージョンに VPC がある場合は、この手順をスキップして、ステップ 2 でその VPC を選択できます。詳細については、「VPC の作成と管理」をご参照ください。

VPC2 の作成後、VPC1 からのクロスリージョンアクセスのトラフィックがブロックされないように、そのセキュリティグループルールで必要なトラフィックが許可されていることを確認してください。詳細については、「セキュリティグループルールの表示」および「セキュリティグループルールの追加」をご参照ください。

ステップ 2:シナリオベースのネットワークを使用したネットワーク接続の作成

Cloud Enterprise Network (CEN) のシナリオベースのネットワークツールを使用して、CEN インスタンス、Enterprise Edition トランジットルーター、VPC アタッチメント、およびリージョン間接続を一括で作成し、それらのルートを自動的に設定します。

  1. CEN コンソールにログインします。インスタンス ページで、CEN インスタンスの作成 をクリックします。

  2. CEN インスタンスの作成 ダイアログボックスで、シナリオ別に作成 (推奨) を選択し、シナリオとして クラウドでのマルチ VPC ピアリング を選択してから、[シナリオベースの作成を開始] をクリックします。

  3. 最初のリージョンタブで、ネットワーク設定を追加します:

    • [リージョン]: [China (Hangzhou)] を選択します。

    • [ゾーン]: ゾーン J とゾーン K を選択します。

    • [VPC]: VPC2 と VPC2 の 2 つの vSwitch を選択します。

  4. タブの右側にある [+] をクリックしてリージョンタブを作成し、ネットワーク設定を追加します:

    • [リージョン]: [China (Shanghai)] を選択します。

    • [ゾーン]: ゾーン M とゾーン N を選択します。

    • [VPC]: VPC1 と VPC1 の 2 つの vSwitch を選択します。

  5. 次へ をクリックします。システムが設定の概要を生成するには数分かかります。ネットワーク設定と料金の確認 ページで、自動的に作成されるリソースと料金詳細を確認します。情報が正しいことを確認したら、[デプロイを開始] をクリックします。

  6. デプロイには約 10 分かかります。デプロイが完了するまで待ちます。その後、システムは次のリソースを自動的に作成します:

    • CEN インスタンス。

    • China (Hangzhou) リージョンに 1 つ、China (Shanghai) リージョンに 1 つの Enterprise Edition トランジットルーター。

    • VPC1 と VPC2 からそれぞれのリージョンのトランジットルーターへの VPC アタッチメント。

    • 2 つのトランジットルーター間のリージョン間接続。

説明

シナリオベースのネットワークが完了した後、VPC1 と VPC2 の間でプライベートネットワークピアリングはすでに確立されていますが、VPC1 の ECS インスタンスはまだ OSS サービスにアクセスできません。OSS の内部 CIDR ブロックのルートを手動で追加するため、次の手順を続行する必要があります。

ステップ 3:VPC での OSS サービスへのルートの設定

リージョン間接続が作成されると、VPC1 と VPC2 は Enterprise Edition トランジットルーターを介してプライベートネットワークで相互に通信できます。ただし、VPC1 の ECS インスタンスは、Enterprise Edition トランジットルーターと VPC2 を介して OSS サービスにプライベートアクセスすることはまだできません。OSS サービス宛てのトラフィックを Enterprise Edition トランジットルーターに転送するには、VPC1 のルートテーブルに OSS サービスへのルートを追加する必要があります。

  1. VPC コンソールにログインします。
  2. 上部メニューで、VPC1 インスタンスがデプロイされているリージョンを選択します。

    このトピックでは、[China (Shanghai)] リージョンが選択されています。

  3. 左側のナビゲーションペインで、ルートテーブル をクリックします。

  4. ルートテーブル ページで、VPC1 インスタンスのルートテーブルを見つけ、ルートテーブルインスタンス ID をクリックします。

    このトピックでは、VPC1 にはシステムルートテーブルが 1 つしかありません。VPC に複数のルートテーブルがある場合は、ECS インスタンスがデプロイされている vSwitch に関連付けられているルートテーブルを選択します。

  5. ルートエントリ タブで カスタムルート タブをクリックし、次に ルートエントリの追加 をクリックします。

  6. ルートエントリの追加 パネルで、次のパラメーターを設定し、OK をクリックします。

    次の情報に基づいて、China (Hangzhou) リージョンの OSS サービスのすべての CIDR ブロックのルートを VPC1 のルートテーブルに追加します。

    China (Hangzhou) リージョンの OSS サービスのすべての CIDR ブロックについては、「エンドポイントとバケットドメイン経由での OSS へのアクセス」をご参照ください。

    パラメーター

    説明

    ルートエントリ 1

    ルートエントリ 2

    ルートエントリ 3

    ルートエントリ 4

    [名前]

    カスタムルートエントリの名前を入力します。

    OSS CIDR ブロック 1

    OSS CIDR ブロック 2

    OSS CIDR ブロック 3

    OSS CIDR ブロック 4

    [CIDR]

    送信先 CIDR ブロックを入力します。

    100.118.28.0/24

    100.114.102.0/24

    100.98.170.0/24

    100.118.31.0/24

    [ネクストホップの種類]

    カスタムルートエントリのネクストホップタイプを選択し、次にネクストホップを選択します。

    [転送ルーター] を選択し、次に VPC1 アタッチメントを選択します。

    [転送ルーター] を選択し、次に VPC1 アタッチメントを選択します。

    [転送ルーター] を選択し、次に VPC1 アタッチメントを選択します。

    [転送ルーター] を選択し、次に VPC1 アタッチメントを選択します。

ステップ 4:トランジットルーターでの OSS サービスへのルートの設定

また、China (Hangzhou) リージョンの Enterprise Edition トランジットルーターのルートテーブルに OSS サービスへのルートを追加する必要があります。OSS サービス宛てのトラフィックが VPC1 の ECS インスタンスから Enterprise Edition トランジットルーターに入ると、トランジットルーターは OSS サービスへのルートに基づいてトラフィックを VPC2 に転送します。これにより、ECS インスタンスは VPC2 を介して OSS サービスにプライベートアクセスできるようになります。

  1. CEN コンソールにログインします。
  2. Cloud Enterprise Network ページで、対象の CEN インスタンスを見つけ、CEN インスタンス ID をクリックします。

  3. 基本設定 > トランジットルーター タブで、中国 (杭州) リージョンのトランジットルーターインスタンスを探し、インスタンス ID をクリックします。

  4. トランジットルーターインスタンスの詳細ページで、ルートテーブル タブをクリックします。タブの左側で、ターゲットトランジットルータールートテーブルを選択します。

    VPC1 アタッチメントと VPC2 アタッチメントは両方ともデフォルトの高度な設定を使用しており、どちらもトランジットルーターのデフォルトルートテーブルに関連付けられています。したがって、このトピックでは、トランジットルーターのデフォルトルートテーブルであるシステムルートテーブルを選択します。

  5. ルートエントリ タブで、ルートエントリの追加 をクリックします。

  6. ルートエントリの追加 ダイアログボックスで、次のパラメーターを設定し、OK をクリックします。

    次の情報に基づいて、China (Hangzhou) リージョンの OSS サービスのすべての CIDR ブロックのルートをトランジットルーターのルートテーブルに追加します。

    パラメーター

    説明

    ルートエントリ 1

    ルートエントリ 2

    ルートエントリ 3

    ルートエントリ 4

    [名前]

    ルートエントリの名前を入力します。

    OSS CIDR ブロック 1

    OSS CIDR ブロック 2

    OSS CIDR ブロック 3

    OSS CIDR ブロック 4

    [宛先 CIDR]

    ルートエントリの送信先 CIDR ブロックを入力します。

    100.118.28.0/24

    100.114.102.0/24

    100.98.170.0/24

    100.118.31.0/24

    [ブラックホールルート]

    現在のルートエントリがブラックホールルートであるかどうかを指定します。

    • [はい]:ルートはブラックホールルートです。このルート宛てのすべてのトラフィックは破棄されます。

    • [いいえ]:ルートはブラックホールルートではありません。ルートのネクストホップアタッチメントを指定する必要があります。

    [いいえ] を選択します。

    [いいえ] を選択します。

    [いいえ] を選択します。

    [いいえ] を選択します。

    [ネクストホップ]

    ルートエントリのネクストホップアタッチメントを選択します。

    VPC2 アタッチメントを選択します。

    VPC2 アタッチメントを選択します。

    VPC2 アタッチメントを選択します。

    VPC2 アタッチメントを選択します。

ステップ 5:接続性のテスト

上記の設定が完了すると、VPC1 の ECS インスタンスはクロスリージョンの OSS サービスにプライベートアクセスできます。このトピックでは、OSS サービスからイメージをダウンロードする ECS インスタンスを例として、VPC1 の ECS インスタンスと OSS サービス間の接続性をテストします。

  1. VPC1 の ECS インスタンスにログインします。詳細については、「ECS インスタンスへのリモート接続方法」をご参照ください。

  2. ECS インスタンスで、OSS サービスから OSStest.jpg という名前のイメージをダウンロードしてみます。

    説明

    テストを実行する前に、ターゲットファイルの読み取り/書き込み権限で、ECS インスタンスからのアクセスが許可されていることを確認してください。詳細については、「権限とアクセス制御の概要」をご参照ください。

    wget https://zxtXXXXX.oss-cn-hangzhou-internal.aliyuncs.com/OSStest.jpg
    # zxtXXXXX.oss-cn-hangzhou-internal.aliyuncs.com は OSS サービスのアクセスドメイン名です。
    # OSStest.jpg はターゲットファイルの名前です。

    OSS のアクセスドメイン名の詳細については、「IPv6 をサポートするエンドポイントを使用して OSS にアクセスする」をご参照ください。

    ECS インスタンスが次のような応答を受信した場合、ECS インスタンスはクロスリージョンの OSS サービスにプライベートアクセスできています。

    [root@iZuf6bxxx hblZ ~]# wget https://zxxx2.oss-cn-hangzhou-internal.aliyuncs.com/OSStest.jpg
    --2023-01-29 16:54:46--  https://zxtxxx2.oss-cn-hangzhou-internal.aliyuncs.com/OSStest.jpg
    Resolving zxtxxx2.oss-cn-hangzhou-internal.aliyuncs.com (zxtxxx2.oss-cn-hangzhou-internal.aliyuncs.com)... 100.xxx.50, 100.xxx.49, 100.
    45, ...
    Connecting to zxtxxx2.oss-cn-hangzhou-internal.aliyuncs.com (zxxxx s2.oss-cn-hangzhou-internal.aliyuncs.com)|100.xxx.50|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 611894 (598K) [image/jpeg]
    Saving to: 'OSStest.jpg.5'
    OSStest.jpg.5                 100%[=================================================>] 597.55K     132KB/s    in 4.5s
    2023-01-29 16:54:51 (132 KB/s) - 'OSStest.jpg.5' saved [611894/611894]

Terraform

このトピックのサンプル環境は、Terraform を使用して構築できます。Terraform のインストールと設定については、Terraform のインストールをご参照ください。

次の手順では、Terraform v1.9.8 を実行する Linux ホストを例として使用します。開始する前に、認証を完了していることを確認してください。

説明

このチュートリアルの一部のリソースには料金が発生します。不要になったリソースは解放してください。

ステップ 1:リソースの作成

  1. このトピックのシナリオ用のディレクトリを作成し、そのディレクトリに移動します。

    mkdir tf-cen-oss && cd tf-cen-oss
  2. main.tf ファイルを作成して、リソース情報を定義します。

    touch main.tf
  3. main.tf ファイルを開き、次のコードをコピーしてファイルに貼り付け、ファイルを保存します。このファイルには、このトピックのシナリオに必要なリソースと設定が含まれています。

    variable "pname" {
      description = "リソースのプレフィックス名"
      type        = string
      default     = "tf-cen-oss"
    }
    variable "region_id_hangzhou" {
      description = "杭州のリージョン ID"
      type        = string
      default     = "cn-hangzhou"
    }
    variable "region_id_shanghai" {
      description = "上海のリージョン ID"
      type        = string
      default     = "cn-shanghai"
    }
    variable "az_hangzhou" {
      description = "使用するアベイラビリティーゾーンのリスト"
      type        = list(string)
      default     = ["cn-hangzhou-j", "cn-hangzhou-k"]
    }
    variable "az_shanghai" {
      description = "使用するアベイラビリティーゾーンのリスト"
      type        = list(string)
      default     = ["cn-shanghai-m", "cn-shanghai-n"]
    }
    # --- プロバイダー ---
    provider "alicloud" { # デフォルトリージョン:杭州
      region = var.region_id_hangzhou
    }
    provider "alicloud" {
      alias  = "hangzhou"
      region = var.region_id_hangzhou
    }
    provider "alicloud" {
      alias  = "shanghai"
      region = var.region_id_shanghai
    }
    # ---  oss ---
    resource "random_uuid" "default" {
    }
    resource "alicloud_oss_bucket" "bucket1" {
      provider = alicloud.hangzhou
      bucket   = substr("${var.pname}-${replace(random_uuid.default.result, "-", "")}", 0, 32)
    }
    resource "alicloud_oss_bucket_policy" "default" {
      provider = alicloud.hangzhou
      policy   = jsonencode({ "Version" : "1", "Statement" : [{ "Action" : ["oss:GetObject"], "Effect" : "Allow", "Resource" : ["acs:oss:*:*:${alicloud_oss_bucket.bucket1.bucket}"] }] })
      bucket   = alicloud_oss_bucket.bucket1.bucket
    }
    resource "alicloud_oss_bucket_object" "obj1" {
      provider = alicloud.hangzhou
      bucket   = alicloud_oss_bucket.bucket1.bucket
      key      = "example.txt"                     # バケット内のファイル名
      content  = "this is example text content \n" # ファイルの内容
      acl      = "public-read"
    }
    # --- vpc ---
    resource "alicloud_vpc" "vpc1" {
      provider   = alicloud.shanghai
      vpc_name   = "${var.pname}-1"
      cidr_block = "192.168.0.0/16"
    }
    resource "alicloud_vpc" "vpc2" {
      provider   = alicloud.hangzhou
      vpc_name   = "${var.pname}-2"
      cidr_block = "172.16.0.0/16"
    }
    resource "alicloud_vswitch" "vsw1-1" {
      provider     = alicloud.shanghai
      vpc_id       = alicloud_vpc.vpc1.id
      cidr_block   = "192.168.0.0/24"
      zone_id      = var.az_shanghai[0]
      vswitch_name = "${var.pname}-vsw1-1"
    }
    resource "alicloud_vswitch" "vsw1-2" {
      provider     = alicloud.shanghai
      vpc_id       = alicloud_vpc.vpc1.id
      cidr_block   = "192.168.1.0/24"
      zone_id      = var.az_shanghai[1]
      vswitch_name = "${var.pname}-vsw1-2"
    }
    resource "alicloud_vswitch" "vsw2-1" {
      provider     = alicloud.hangzhou
      vpc_id       = alicloud_vpc.vpc2.id
      cidr_block   = "172.16.0.0/24"
      zone_id      = var.az_hangzhou[0]
      vswitch_name = "${var.pname}-vsw2-1"
    }
    resource "alicloud_vswitch" "vsw2-2" {
      provider     = alicloud.hangzhou
      vpc_id       = alicloud_vpc.vpc2.id
      cidr_block   = "172.16.1.0/24"
      zone_id      = var.az_hangzhou[1]
      vswitch_name = "${var.pname}-vsw2-2"
    }
    # --- cen ---
    # cen
    resource "alicloud_cen_instance" "cen1" {
      cen_instance_name = "${var.pname}-cen1"
    }
    # tr
    resource "alicloud_cen_transit_router" "tr1" {
      provider            = alicloud.shanghai
      transit_router_name = "${var.pname}-tr1"
      cen_id              = alicloud_cen_instance.cen1.id
    }
    resource "alicloud_cen_transit_router" "tr2" {
      provider            = alicloud.hangzhou
      transit_router_name = "${var.pname}-tr2"
      cen_id              = alicloud_cen_instance.cen1.id
    }
    data "alicloud_cen_transit_router_route_tables" "tr1" { # tr システムルートテーブルを取得
      transit_router_id               = alicloud_cen_transit_router.tr1.transit_router_id
      transit_router_route_table_type = "System"
    }
    data "alicloud_cen_transit_router_route_tables" "tr2" {
      transit_router_id               = alicloud_cen_transit_router.tr2.transit_router_id
      transit_router_route_table_type = "System"
    }
    # tr-peer
    resource "alicloud_cen_transit_router_peer_attachment" "peer" {
      provider                      = alicloud.shanghai
      cen_id                        = alicloud_cen_instance.cen1.id
      transit_router_id             = alicloud_cen_transit_router.tr1.transit_router_id
      peer_transit_router_region_id = var.region_id_hangzhou
      peer_transit_router_id        = alicloud_cen_transit_router.tr2.transit_router_id
      bandwidth_type                = "DataTransfer"
      bandwidth                     = 1
      auto_publish_route_enabled    = true # デフォルトは false
    }
    resource "alicloud_cen_transit_router_route_table_association" "ass_peer1" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr1.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_peer_attachment.peer.transit_router_attachment_id
    }
    resource "alicloud_cen_transit_router_route_table_propagation" "propa_peer1" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr1.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_peer_attachment.peer.transit_router_attachment_id
    }
    resource "alicloud_cen_transit_router_route_table_association" "ass_peer2" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr2.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_peer_attachment.peer.transit_router_attachment_id
    }
    resource "alicloud_cen_transit_router_route_table_propagation" "propa_peer2" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr2.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_peer_attachment.peer.transit_router_attachment_id
    }
    # attach1  
    resource "alicloud_cen_transit_router_vpc_attachment" "attach1" {
      provider          = alicloud.shanghai
      cen_id            = alicloud_cen_instance.cen1.id
      transit_router_id = alicloud_cen_transit_router.tr1.transit_router_id
      vpc_id            = alicloud_vpc.vpc1.id
      zone_mappings {
        zone_id    = var.az_shanghai[0]
        vswitch_id = alicloud_vswitch.vsw1-1.id
      }
      zone_mappings {
        zone_id    = var.az_shanghai[1]
        vswitch_id = alicloud_vswitch.vsw1-2.id
      }
      transit_router_vpc_attachment_name = "attach1"
    }
    resource "alicloud_cen_transit_router_route_table_association" "ass1" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr1.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach1.transit_router_attachment_id
    }
    resource "alicloud_cen_transit_router_route_table_propagation" "propa1" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr1.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach1.transit_router_attachment_id
    }
    resource "alicloud_route_entry" "vpc1_to_tr1" {
      provider              = alicloud.shanghai
      route_table_id        = alicloud_vpc.vpc1.route_table_id
      destination_cidrblock = alicloud_vpc.vpc2.cidr_block
      nexthop_type          = "Attachment"
      nexthop_id            = alicloud_cen_transit_router_vpc_attachment.attach1.transit_router_attachment_id
    }
    # attach2
    resource "alicloud_cen_transit_router_vpc_attachment" "attach2" {
      provider          = alicloud.hangzhou
      cen_id            = alicloud_cen_instance.cen1.id
      transit_router_id = alicloud_cen_transit_router.tr2.transit_router_id
      vpc_id            = alicloud_vpc.vpc2.id
      zone_mappings {
        zone_id    = var.az_hangzhou[0]
        vswitch_id = alicloud_vswitch.vsw2-1.id
      }
      zone_mappings {
        zone_id    = var.az_hangzhou[1]
        vswitch_id = alicloud_vswitch.vsw2-2.id
      }
      transit_router_vpc_attachment_name = "attach2"
    }
    resource "alicloud_cen_transit_router_route_table_association" "ass2" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr2.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach2.transit_router_attachment_id
    }
    resource "alicloud_cen_transit_router_route_table_propagation" "propa2" {
      transit_router_route_table_id = data.alicloud_cen_transit_router_route_tables.tr2.tables[0].id
      transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach2.transit_router_attachment_id
    }
    resource "alicloud_route_entry" "vpc2_to_tr2" {
      provider              = alicloud.hangzhou
      route_table_id        = alicloud_vpc.vpc2.route_table_id
      destination_cidrblock = alicloud_vpc.vpc1.cidr_block
      nexthop_type          = "Attachment"
      nexthop_id            = alicloud_cen_transit_router_vpc_attachment.attach2.transit_router_attachment_id
    }
    # oss_cidr
    variable "oss_cidr" {
      description = "OSS CIDR ブロック"
      type        = list(string)
      default     = ["100.118.28.0/24", "100.114.102.0/24", "100.98.170.0/24", "100.118.31.0/24"]
    }
    # vpc entry
    resource "alicloud_route_entry" "entry" {
      provider              = alicloud.shanghai
      count                 = 4
      route_table_id        = alicloud_vpc.vpc1.route_table_id
      destination_cidrblock = var.oss_cidr[count.index]
      nexthop_type          = "Attachment"
      nexthop_id            = alicloud_cen_transit_router_vpc_attachment.attach1.transit_router_attachment_id
    }
    # tr entry 
    resource "alicloud_cen_transit_router_route_entry" "tr2_rt1_entry1" {
      count                                             = 4
      transit_router_route_table_id                     = data.alicloud_cen_transit_router_route_tables.tr2.tables[0].id
      transit_router_route_entry_destination_cidr_block = var.oss_cidr[count.index]
      transit_router_route_entry_next_hop_type          = "Attachment"
      transit_router_route_entry_next_hop_id            = alicloud_cen_transit_router_vpc_attachment.attach2.transit_router_attachment_id
    }
    # --- ecs ---
    resource "alicloud_instance" "main" {
      provider             = alicloud.shanghai
      depends_on           = [alicloud_cen_transit_router_route_entry.tr2_rt1_entry1]
      instance_name        = "${var.pname}-ecs"
      instance_type        = "ecs.e-c1m1.large"
      security_groups      = [alicloud_security_group.default.id]
      vswitch_id           = alicloud_vswitch.vsw1-1.id
      image_id             = "aliyun_3_x64_20G_qboot_alibase_20230727.vhd"
      system_disk_category = "cloud_essd"
      private_ip           = "192.168.0.1"
      instance_charge_type = "PostPaid"
      user_data = base64encode(<<-EOT
        #!/bin/bash
        curl  https://${alicloud_oss_bucket.bucket1.bucket}.${alicloud_oss_bucket.bucket1.intranet_endpoint}/${alicloud_oss_bucket_object.obj1.key}  > /root/curl.txt
      EOT
      )
    }
    # sg
    resource "alicloud_security_group" "default" {
      provider            = alicloud.shanghai
      security_group_name = var.pname
      vpc_id              = alicloud_vpc.vpc1.id
    }
    resource "alicloud_security_group_rule" "allow_inbound_ssh" {
      provider          = alicloud.shanghai
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "22/22"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
    resource "alicloud_security_group_rule" "allow_inbound_icmp" {
      provider          = alicloud.shanghai
      type              = "ingress"
      ip_protocol       = "icmp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "-1/-1"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
    # --- output ---
    output "ecs_login_address" {
      value = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=${var.region_id_shanghai}&instanceId=${alicloud_instance.main.id}"
    }
    output "test_command" {
      value = "curl ${alicloud_oss_bucket.bucket1.bucket}.${alicloud_oss_bucket.bucket1.intranet_endpoint}/${alicloud_oss_bucket_object.obj1.key}"
    }
  4. Terraform を初期化します。

    terraform init
  5. リソースを作成します。 コマンドを実行すると、Terraform は作成されるリソースをプレビューします。 情報が正しいことを確認したら、yes と入力して正式に作成を開始します。

    terraform apply

ステップ 2:結果の検証

  1. tf-cen-oss-ecs という名前の ECS インスタンスにログインします。

    ECS インスタンスのログインアドレスは Terraform の出力にあります。アドレスをコピーしてブラウザで開きます。ログイン時には、認証方法として 一時的な SSH キー認証 を選択します。

    Outputs:
    ecs_login_address = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=cn-shanghai&instanceId=i-uf6xxx"
    test_command = "curl tf-cen-oss-xxx.oss-cn-hangzhou-internal.aliyuncs.com/example.txt"
  2. 「出力」で、curl で始まるコマンドをコピーします:

    Outputs:
    ecs_login_address = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=cn-shanghai&instanceId=i-uf6xxx"
    test_command = "curl tf-cen-oss-xxx.oss-cn-hangzhou-internal.aliyuncs.com/example.txt"
  3. ECS インスタンスで、curl コマンドを実行します:

    curl tf-cen-oss-xxxxxx.oss-cn-hangzhou-internal.aliyuncs.com/example.txt
    [root@iZuf6xxx          ~]# curl tf-cen-oss-2821xxx xxx.oss-cn-hangzhou-internal.aliyuncs.com/example.txt
    this is example text content
    [root@iZuf6xxx          ~]#

    上記のように、テキストコンテンツが返されれば、アクセスは成功です。

ステップ 3:リソースの解放

検証が完了した後、リソースをこれ以上使用しない場合は、次のコマンドを実行してリソースを解放し、さらなる課金を防ぎます。

terraform destroy --auto-approve

ルーティング

このトピックでは、シナリオベースのネットワークツールが VPC 接続とリージョン間接続を自動的に作成する際に、デフォルトのルーティング設定を使用します。デフォルトのルーティング設定では、Cloud Enterprise Network (CEN) がルートを自動的にアドバタイズし、学習することで、VPC1 と VPC2 間の通信が可能になります。デフォルトのルーティング設定は次のとおりです:

VPC

VPC 接続を作成する際にデフォルトのルーティング設定を使用する (つまり、すべての高度な設定を有効にする) 場合、システムは次のルーティング設定を VPC に自動的に適用します:

  • [トランジットルーターのシステムルートテーブルに自動的に関連付ける]

    この機能を有効にすると、VPC 接続はトランジットルーターのデフォルトルートテーブルに自動的に関連付けられます。トランジットルーターは、デフォルトルートテーブルを参照して VPC トラフィックを転送します。

  • [システムルートをトランジットルーターのシステムルートテーブルに自動伝播する]

    この機能を有効にすると、VPC はシステムルートをトランジットルーターのデフォルトルートテーブルに伝播します。これにより、ネットワークインスタンス間の通信が可能になります。

  • [トランジットルーターへのルートを自動的に作成し、現在の VPC のすべてのルートテーブルに追加する]

    この機能を有効にすると、システムは 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 の 3 つのルートエントリを VPC インスタンスのすべてのルートテーブルに自動的に追加します。これら 3 つのルートエントリのネクストホップは、いずれも VPC 接続です。

リージョン間接続

リージョン間接続を作成する際にデフォルトのルーティング設定を使用する (つまり、すべての高度な設定を有効にする) 場合、システムは次のルーティング設定をリージョン間接続に自動的に適用します:

  • [トランジットルーターのシステムルートテーブルに自動的に関連付ける]

    リージョン間接続を、両方のリージョンにあるトランジットルーターのシステムルートテーブルに関連付けます。 リージョン間トラフィックは、これらのシステムルートテーブルに基づいて転送されます。

  • [システムルートをトランジットルーターのシステムルートテーブルに自動伝播する]

    リージョン間接続と、両方のリージョンのトランジットルーターのシステムルートテーブルとの間でルート学習関係を確立します。

  • [ピアリージョンへルートを自動的にアドバタイズする]

    ローカルトランジットルーターのルートテーブルからピアトランジットルーターのルートテーブルにルートをアドバタイズし、ネットワークインスタンスのリージョン間接続を可能にします。

ルートエントリの表示

Alibaba Cloud コンソールで、対応するインスタンスのルートエントリ情報を確認できます:

  • トランジットルーター インスタンスのルートエントリを表示するには、「Custom route entries」をご参照ください。

  • VPC インスタンスのルートエントリを表示するには、「Create and manage a route table」をご参照ください。