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

Cloud Enterprise Network:VPC 接続を介してリージョンをまたがって ECS インスタンスが OSS にアクセスできるようにする

最終更新日:Apr 08, 2025

このトピックでは、Enterprise Edition Transit Router を使用して、仮想プライベートクラウド(VPC)にデプロイされている Elastic Compute Service(ECS)インスタンスが、VPC 接続を介してリージョンをまたがって Object Storage Service(OSS)にアクセスできるようにする方法について説明します。

説明

この例のサンプルコードは、「ワンクリックで実行する」で実行できます。

シナリオ

上の図に示すように、ある企業が中国(上海)リージョンに VPC1 をデプロイし、ECS インスタンス上でサービスを実行しています。この企業は中国(杭州)リージョンで OSS をアクティブ化しており、VPC1 内の ECS インスタンスが中国(杭州)リージョンの OSS サービスにアクセスできるようにしたいと考えています。

この問題に対処するために、企業は OSS がデプロイされている中国(杭州)リージョンに VPC(VPC2)を作成し、VPC1 と VPC2 を中国(上海)と中国(杭州)リージョンの Enterprise Edition Transit Router に接続できます。 Enterprise Edition Transit Router を使用すると、VPC1 と VPC2 はリージョン間接続を介して相互に通信できます。このようにして、VPC1 内の ECS インスタンスは VPC2 内の OSS にアクセスできます。

説明

VPC 内の ECS インスタンスが Enterprise Edition Transit Router を使用して異なるリージョンの OSS にアクセスできるようにするには、少なくとも 1 つの VPC が OSS がアクティブ化されているリージョンにデプロイされている必要があります。この例では、中国(杭州)リージョンに VPC が存在する場合、企業は VPC2 を作成する必要はなく、既存の VPC を Enterprise Edition Transit Router に接続できます。中国(上海)リージョンの ECS インスタンスは、中国(杭州)リージョンの任意の VPC を介して OSS にアクセスできます。

ネットワーク計画

重要

CIDR ブロックを割り当てるときは、VPC の CIDR ブロックが重複していないことを確認してください。

リソース

VPC リージョン

CIDR ブロックと IP アドレス

VPC1

中国(上海)

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

  • vSwitch 1 の CIDR ブロック: 192.168.0.0/24。 vSwitch 1 はゾーン M にデプロイされています。

  • vSwitch 2 の CIDR ブロック: 192.168.20.0/24。 vSwitch 1 はゾーン N にデプロイされています。

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

VPC2

中国(杭州)

プライマリ 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 つの構成方法を紹介します。ニーズに合った方法を選択してください。

コンソール

準備

開始する前に、次の前提条件が満たされていることを確認してください。

  • OSS は中国(杭州)リージョンでアクティブ化されています。詳細については、「OSS を使い始める」をご参照ください。

  • VPC1 は中国(上海)リージョンに作成されており、サービスは ECS インスタンスにデプロイされています。詳細については、「IPv4 VPC を作成する」をご参照ください。

  • VPC2 は中国(杭州)リージョンに作成されています。詳細については、「VPC を作成および管理する」をご参照ください。

    Enterprise Edition Transit Router のゾーンの各 VPC に十分な vSwitch がデプロイされています。各 vSwitch には少なくとも 1 つのアイドル IP アドレスがあります。

    • Enterprise Edition Transit Router が、中国(南京 - ローカルリージョン)など、1 つのゾーンのみをサポートするリージョンにデプロイされている場合、VPC はそのゾーンに少なくとも 1 つの vSwitch を持つ必要があります。

    • Enterprise Edition Transit Router が、中国(上海)など、複数のゾーンをサポートするリージョンにデプロイされている場合、VPC はそのゾーンに少なくとも 2 つの vSwitch を持つ必要があります。 vSwitch は異なるゾーンにある必要があります。

    詳細については、「VPC 接続のしくみ」をご参照ください。

  • VPC1 と VPC2 のセキュリティグループルールについて理解しています。セキュリティグループルールにより、VPC1 内の ECS インスタンスは VPC2 を介して OSS にアクセスできます。詳細については、「セキュリティグループルールを照会する」および「セキュリティグループルールを追加する」をご参照ください。

  • Cloud Enterprise Network(CEN)インスタンスが作成されています。詳細については、「CEN インスタンスを作成する」をご参照ください。

  • Enterprise Edition Transit Router は、中国(上海)と中国(杭州)の両方のリージョンにデプロイされています。詳細については、「Transit Router インスタンスを作成する」をご参照ください。

    Enterprise Edition Transit Router を作成するときは、デフォルト設定を使用します。

ステップ 1: VPC 接続を作成する

VPC1 を中国(上海)リージョンの Enterprise Edition Transit Router に接続し、VPC2 を中国(杭州)リージョンの Enterprise Edition Transit Router に接続します。

  1. CEN コンソール にログインします。

  2. [インスタンス] ページに移動し、ターゲット CEN インスタンスを見つけて、その ID をクリックします。

    この例では、[準備] セクションで説明した CEN インスタンスを使用します。

  3. [基本情報] > [Transit Router] タブで、Transit Router インスタンスを見つけて、[接続の作成] 列の [アクション] をクリックします。

  4. [ピアネットワークインスタンスと接続] ページで、次のパラメータを設定し、[OK] をクリックします。

    次の表を参照して、VPC1 を中国(上海)リージョンの Enterprise Edition Transit Router に、VPC2 を中国(杭州)リージョンの Enterprise Edition Transit Router に接続するようにパラメータを構成します。

    パラメータ

    説明

    VPC1

    VPC2

    ネットワークタイプ

    接続するネットワークインスタンスのタイプを選択します。

    仮想プライベートクラウド(VPC)

    仮想プライベートクラウド(VPC)

    リージョン

    ネットワークインスタンスがデプロイされているリージョンを選択します。

    中国(上海)

    中国(杭州)

    Transit Router

    選択したリージョンにある Transit Router の ID が自動的に表示されます。

    リソースオーナー ID

    インスタンスが属する Alibaba Cloud アカウントを選択します。

    現在のアカウント

    現在のアカウント

    課金方法

    デフォルト値は 従量課金制 です。

    添付ファイル名

    ネットワーク接続の名前を入力します。

    VPC1 接続

    VPC2 接続

    ネットワークインスタンス

    ネットワークインスタンスの ID を選択します。

    VPC1 を選択

    VPC2 を選択

    VSwitch

    Transit Router のゾーンにある vSwitch を選択します。

    Transit Router の各ゾーンに vSwitch がある場合は、複数のゾーンを選択し、各ゾーンで vSwitch を選択して、ゾーンディザスタリカバリを有効にできます。

    • 上海ゾーン F: vSwitch 1 を選択

    • 上海ゾーン G: vSwitch 2 を選択

    • 杭州ゾーン H: vSwitch 1 を選択

    • 杭州ゾーン I: vSwitch 2 を選択

    詳細設定

    VPC1 と VPC2 にはデフォルト設定を使用します。すべての詳細機能が VPC で有効になっています。

ステップ 2: リージョン間接続を作成する

VPC1 と VPC2 の Enterprise Edition Transit Router は異なるリージョンにあるため、デフォルトでは VPC1 と VPC2 は通信できません。中国(杭州)と中国(上海)リージョン間にリージョン間接続を作成して、VPC1 と VPC2 間のリージョン間通信を有効にします。

  1. CEN コンソール にログインします。

  2. インスタンス ページで、管理する CEN インスタンスの ID をクリックします。

  3. [基本情報] > [Transit Router] タブに移動し、Transit Router インスタンスを選択して、接続の作成 列の [アクション] をクリックします。

  4. ピアネットワークインスタンスとの接続 ページで、次のパラメータを構成し、OK をクリックします。

    以下の表は、この例に密接に関連するパラメータを示しています。その他のパラメータはデフォルト値のままです。詳細については、「Enterprise Edition Transit Router を使用してリージョン間接続を作成する」をご参照ください。

    パラメータ

    説明

    インスタンスタイプ

    リージョン間接続 を選択します。

    リージョン

    接続するリージョンのいずれかを選択します。

    この例では、中国(上海) を選択します。

    ピアリージョン

    接続するピアリージョンを選択します。

    この例では、中国(杭州) を選択します。

    帯域幅割り当てモード

    リージョン間接続に帯域幅を割り当てるために使用する方法を選択します。

    この例では、データ転送ごとの支払い を選択します。システムは、リージョン間接続の実際のトラフィックに基づいて課金します。

    帯域幅

    リージョン間接続の帯域幅値を指定します。単位: Mbps。

    データ転送ごとの支払い 帯域幅割り当てモードでは、このパラメータはリージョン間接続の最大帯域幅値を指定します。

    デフォルトの回線タイプ

    リージョン間接続の回線タイプを選択します。

    この例では、デフォルト値を使用します。詳細については、「回線タイプ」をご参照ください。

    詳細設定

    この例では、3 つすべての詳細機能が有効になっているデフォルト設定が保持されます。

ステップ 3: VPC で OSS を指すルートを追加する

リージョン間接続が確立されると、VPC1 と VPC2 は Enterprise Edition Transit Router を使用して通信できるようになります。ただし、VPC1 内の ECS インスタンスはまだ VPC2 内の OSS にアクセスできません。VPC1 から Transit Router へのトラフィックを転送するために、VPC1 のルートテーブルに OSS を指すルートを追加する必要があります。

  1. VPC コンソール にログインします。

  2. 上部のナビゲーションバーで、VPC1 がデプロイされているリージョンを選択します。

    この例では、中国(上海) を選択します。

  3. 左側のナビゲーションウィンドウで [ルートテーブル] をクリックします。

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

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

  5. [ルートエントリリスト] タブに移動し、[カスタムルート] タブを選択して、[ルートエントリの追加] をクリックします。

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

    中国(杭州)リージョンにある OSS のすべての CIDR ブロックを指すルートを VPC1 のルートテーブルに追加します。次の表でパラメータについて説明します。

    中国(杭州)リージョンにある OSS サービスの CIDR ブロックの詳細については、「内部 OSS エンドポイントと VIP 範囲」をご参照ください。

    パラメータ

    説明

    ルート 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

    ネクストホップタイプ

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

    Transit Router を選択し、VPC1 接続を選択します。

    Transit Router を選択し、VPC1 接続を選択します。

    Transit Router を選択し、VPC1 接続を選択します。

    Transit Router を選択し、VPC1 接続を選択します。

ステップ 4: Transit Router に OSS を指すルートを追加する

中国(杭州)リージョンの Enterprise Edition Transit Router のルートテーブルに OSS を指すルートを追加する必要があります。 VPC1 内の ECS インスタンスからのリクエストが Enterprise Edition Transit Router に到達すると、Enterprise Edition Transit Router は OSS のルーティングポリシーに基づいてリクエストを VPC2 に転送します。これにより、ECS インスタンスは VPC2 を介して OSS にアクセスできます。

  1. CEN コンソール にログインします。

  2. [CEN インスタンス] ページに移動し、ターゲット CEN インスタンスを見つけて、その ID をクリックします。

  3. [基本情報] > [Transit Router] タブで、中国(杭州)リージョンにある Transit Router インスタンスを見つけて、その ID をクリックします。

  4. Transit Router インスタンスの詳細ページで、[ルートテーブル] タブをクリックします。左側のナビゲーションウィンドウで、ターゲットルートテーブルを選択します。

    デフォルトでは、VPC1 と VPC2 は詳細設定が有効になっているため、Enterprise Edition Transit Router のデフォルトテーブルに関連付けられています。したがって、この例では Transit Router のデフォルトルートテーブル(システムルートテーブル)が選択されています。

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

  6. [ルートエントリの追加] ダイアログボックスで、次のパラメータを入力し、[確認] をクリックします。

    中国(杭州)リージョンにある OSS の CIDR ブロックを指すルートを Transit Router のルートテーブルに追加します。

    パラメータ

    説明

    ルート 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 インスタンスは VPC 接続を介してリージョンをまたがって OSS にアクセスできます。この例では、ECS1 を使用して OSS からイメージをダウンロードし、VPC1 内の ECS インスタンスが OSS にアクセスできるかどうかを確認します。

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

  2. ECS1 を使用して、OSStest.jpg という名前のイメージを OSS からダウンロードします。

    説明

    テスト前に、ECS インスタンスにイメージファイルの読み取り/書き込み権限があることを確認してください。詳細については、「アクセス制御」をご参照ください。

    wget https://zxtXXXXX.oss-cn-hangzhou-internal.aliyuncs.com/OSStest.jpg
    
    # 「zxtXXXXX.oss-cn-hangzhou-internal.aliyuncs.com」は OSS のドメイン名です。
    # 「OSStest.jpg」はイメージファイルの名前です。

    OSS ドメイン名の詳細については、「OSS ドメイン名の使用規則」をご参照ください。

    次の応答は、ECS1 が VPC 接続を介して OSS にアクセスできることを示しています。ECS访问跨地域OSS-测试连通性

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 = "The prefix name for resources" // リソースのプレフィックス名
      type        = string
      default     = "tf-cen-oss"
    }
    
    variable "region_id_hangzhou" {
      description = "The region id of hangzhou" // 杭州のリージョン ID
      type        = string
      default     = "cn-hangzhou"
    }
    
    variable "region_id_shanghai" { #
      description = "The region id of shanghai" // 上海のリージョン ID
      type        = string
      default     = "cn-shanghai"
    }
    
    variable "az_hangzhou" {
      description = "List of availability zones to use" // 使用するアベイラビリティーゾーンのリスト
      type        = list(string)
      default     = ["cn-hangzhou-j", "cn-hangzhou-k"]
    }
    
    variable "az_shanghai" {
      description = "List of availability zones to use" // 使用するアベイラビリティーゾーンのリスト
      type        = list(string)
      default     = ["cn-shanghai-m", "cn-shanghai-n"]
    }
    
    variable "cidr_list" {
      description = "List of VPC CIDR block" // VPC CIDR ブロックのリスト
      type        = list(string)
      default     = ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
    }
    
    # --- provider ---
    provider "alicloud" { # default region hangzhou // デフォルトリージョン杭州
      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" { # get tr sys table // 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 = "The OSS CIDR block" // 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
      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.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 インスタンスにログインします。

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

    image

  2. [出力] セクションで、curl コマンドをコピーします。

    image

  3. ECS インスタンスで curl コマンドを実行します。

    curl tf-cen-oss-xxxxxx.oss-cn-hangzhou-internal.aliyuncs.com/example.txt

    image

    図のようにテキストコンテンツを取得できた場合は、アクセスが成功したことを示します。

ステップ 3: リソースをリリースする

検証が完了し、リソースが不要になったら、以下のコマンドを実行してリソースをリリースし、課金を停止します。

terraform destroy --auto-approve

ルート

このトピックでは、デフォルトのルーティング構成を使用して VPC とリージョン間接続を作成します。デフォルトのルーティング構成を使用すると、CEN は VPC1 と VPC2 が相互に通信するためのルートを自動的に学習してアドバタイズします。以下のセクションでは、デフォルトのルーティング構成について説明します。

VPC インスタンス

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

  • Transit Router のデフォルトルートテーブルに関連付ける

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

  • システムルートを Transit Router のデフォルトルートテーブルに伝達する

    この機能を有効にすると、VPC のシステムルートが Transit Router のデフォルトルートテーブルにアドバタイズされます。これにより、VPC は Transit Router に接続されている他のネットワークインスタンスと通信できます。

  • Transit Router を指すルートを自動的に作成し、現在の VPC のすべてのルートテーブルに追加する

    この機能を有効にすると、システムは次のルートを VPC のすべてのルートテーブルに自動的に追加します: 10.0.0.0/8、172.16.0.0/12、および 192.168.0.0/16。ルートは VPC 接続を指します。

リージョン間接続

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

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

    この機能を有効にすると、リージョン間接続は Transit Router のデフォルトルートテーブルに自動的に関連付けられます。 Transit Router は、デフォルトルートテーブルを使用してネットワークトラフィックをリージョン間で転送します。

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

    この機能を有効にすると、リージョン間接続は接続されたリージョンにある Transit Router のデフォルトルートテーブルに関連付けられます。

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

    この機能を有効にすると、現在のリージョンにある Transit Router のルートテーブル内のルートが、リージョン間通信のためにピア Transit Router のルートテーブルに自動的にアドバタイズされます。 Transit Router のルートテーブルとは、リージョン間接続に関連付けられているルートテーブルを指します。

ルートを表示する

Alibaba Cloud 管理コンソール内でルートを確認できます。