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

Cloud Enterprise Network:Transit Router を経由した ECS からのクロスリージョン OSS へのアクセス

最終更新日:Jun 22, 2026

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

説明

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

シナリオ

image

このシナリオでは、ある企業が中国 (上海) リージョンの VPC1 内の ECS インスタンスにアプリケーションをデプロイしています。この企業は、中国 (杭州) リージョンの OSS サービスも使用しています。目標は、これらの ECS インスタンスが OSS サービスにプライベートアクセスし、リソースを取得できるようにすることです。

OSS はリージョンサービスであり、どの VPC にも属していません。ただし、同じリージョン内の VPC は、内部エンドポイントを通じて OSS サービスにアクセスできます。したがって、OSS サービスが利用可能な中国 (杭州) リージョンに VPC2 という VPC を作成し、トランジットネットワークとして機能させる必要があります。次に、VPC1 と VPC2 をそれぞれのリージョンの Enterprise Edition トランジットルーターに接続し、2 つのトランジットルーター間にリージョン間接続を作成します。また、VPC1 と中国 (杭州) リージョンのトランジットルーターに、OSS の内部 CIDR ブロックへのルートを手動で追加する必要があります。設定完了後、VPC1 内の ECS インスタンスから OSS へのデータフローは次のようになります:ECS インスタンス → 中国 (上海) のトランジットルーター → リージョン間接続 → 中国 (杭州) のトランジットルーター → VPC2 → OSS 内部エンドポイント。

説明

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

ネットワーク計画

重要

相互接続されている VPC の CIDR ブロックが重複しないようにしてください。

リソース

VPC リージョン

CIDR と IP

VPC1

中国 (上海)

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

  • VSwitch 1 の CIDR ブロック: 192.168.1.0/24 (アベイラビリティーゾーン M)

  • VSwitch 2 の CIDR ブロック: 192.168.20.0/24 (アベイラビリティーゾーン N)

  • ECS の IP アドレス: 192.168.1.1 (VSwitch 1 内のインスタンス用)

VPC2

中国 (杭州)

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

  • VSwitch 1 の CIDR ブロック: 172.16.1.0/24 (アベイラビリティーゾーン J)

  • VSwitch 2 の CIDR ブロック: 172.16.2.0/24 (アベイラビリティーゾーン K)

手順

このトピックでは、2 つの設定方法 (コンソールと Terraform) を説明します。

コンソール

事前準備

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

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

  • 中国 (杭州) リージョンでは、OSS バケットを作成して Object Storage Service (OSS) をデプロイします。 手順については、「クイックスタート」をご参照ください。

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

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

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

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

ステップ 2:シナリオベースのネットワークツールの使用

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

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

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

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

    • [リージョン]: [中国 (杭州)] を選択します。

    • [ゾーン]: アベイラビリティーゾーン J とアベイラビリティーゾーン K を選択します。

    • [VPC]: VPC2 とそれに対応する 2 つの vSwitch を選択します。

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

    • [リージョン]: [中国 (上海)] を選択します。

    • [ゾーン]: アベイラビリティーゾーン M とアベイラビリティーゾーン N を選択します。

    • [VPC]: VPC1 とそれに対応する 2 つの vSwitch を選択します。

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

  6. デプロイには約 10 分かかります。 デプロイが完了すると、次のリソースが自動的に作成されます。

    • CEN インスタンス。

    • 中国 (杭州) リージョンに 1 つ、中国 (上海) リージョンに 1 つのエンタープライズ版トランジットルーター。

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

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

説明

シナリオベースのネットワークが完了した後、VPC1 と VPC2 はプライベート接続を介して通信できますが、VPC1 内の ECS インスタンスはまだ OSS にアクセスできません。

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

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

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

    この例では、[中国 (上海)] が選択されています。

  3. 左側メニューで、ルートテーブル をクリックします。

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

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

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

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

    中国 (杭州) リージョンの OSS のすべての CIDR ブロックへのルートを VPC1 のルートテーブルに追加します。

    中国 (杭州) リージョンの 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 へのトランジットルータールートの設定

また、中国 (杭州) リージョンのエンタープライズ版トランジットルーターのルートテーブルに OSS へのルートを追加する必要があります。 これらのルートは、VPC1 の ECS インスタンスからのトラフィックを VPC2 に転送し、OSS へのプライベートアクセスを可能にします。

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

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

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

    デフォルトでは、VPC1 および VPC2 接続の高度な設定により、それらはトランジットルーターのデフォルトルートテーブルに関連付けられます。 したがって、この例ではトランジットルーターのデフォルトルートテーブル (システムルートテーブル) が選択されます。

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

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

    中国 (杭州) リージョンの 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 から VPC1 の ECS インスタンスにイメージをダウンロードして接続性をテストします。

  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 アクセスドメイン名の詳細については、「エンドポイントとバケットドメイン名を使用したOSSへのアクセス」をご参照ください。

    次のような応答が返された場合、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のインストール をご参照ください。

次の手順では、Linux ホストで Terraform v1.9.8 を実行する方法について説明します。 始める前に、認証 を設定していることを確認してください。

説明

このチュートリアルの一部のリソースにはコストが発生する場合があります。 追加料金が発生しないように、不要になったリソースは解放してください。

ステップ 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"]
    }
    variable "cidr_list" {
      description = "VPC CIDRブロックのリスト"
      type        = list(string)
      default     = ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
    }
    # --- プロバイダー ---
    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
      count                 = 3
      route_table_id        = alicloud_vpc.vpc1.route_table_id
      destination_cidrblock = var.cidr_list[count.index]
      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
      count                 = 3
      route_table_id        = alicloud_vpc.vpc2.route_table_id
      destination_cidrblock = var.cidr_list[count.index]
      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 ルートエントリ
    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 ルートエントリ 
    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
      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 "ecs_login_address" {
      value = "https://ecs-workbench.aliyun.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 インスタンスにログインします。

    Terraform の Outputs で、ECS インスタンスのログインアドレスを見つけます。 このアドレスをブラウザで開きます。 ログイン時に、認証方法として 一時的な SSH キー認証 を選択します。

    Outputs:
    ecs_login_address = "https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs&regionId=cn-shanghai&instanceId=i-uf6xxx"
    test_command = "curl xxx"
  2. Outputs で、curl で始まるコマンドをコピーします。

    Outputs:
    ecs_login_address = "https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs&regionId=cn-shanghai"
    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 のすべてのルートテーブルに追加する]

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

リージョン間接続

デフォルトのルーティング設定 (すべての詳細設定が有効) を使用してリージョン間接続を作成すると、システムは次のルーティング設定を自動的に適用します。

  • [トランジットルーターのデフォルトルートテーブルに関連付ける]

    この機能を有効にすると、リージョン間接続は 2 つのリージョンのトランジットルーターのデフォルトルートテーブルに関連付けられます。これらのトランジットルーターは、デフォルトルートテーブルを検索してリージョン間トラフィックを転送します。

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

    この機能を有効にすると、リージョン間接続と両方のリージョンのトランジットルーターのデフォルトルートテーブルとの間にルート学習関係が確立されます。

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

    この機能は、ローカルのトランジットルーターのルートテーブル (リージョン間接続に関連付けられたルートテーブル) からのルートを、ピアのトランジットルーターのルートテーブル (リージョン間接続からルートを学習するルートテーブル) へ自動的にアドバタイズします。これにより、ネットワークインスタンスのリージョン間通信が可能になります。

ルートエントリの表示

Alibaba Cloud 管理コンソールで各インスタンスのルートエントリを表示できます。