全部產品
Search
文件中心

Cloud Enterprise Network:通過企業版轉寄路由器實現ECS私網訪問跨地區的OSS服務

更新時間:Apr 09, 2025

本文介紹如何通過企業版轉寄路由器實現Virtual Private Cloud(Virtual Private Cloud)中的Elastic Compute Service(Elastic Compute Service)私網訪問跨地區的Object Storage Service(Object Storage Service)服務。

說明

本教程所含範例程式碼支援一鍵運行,您可以直接運行代碼。一鍵運行

情境樣本

本文以上圖情境為例。某企業在華東2(上海)地區下擁有一個VPC1,VPC1中使用ECS部署了一些應用服務。企業在華東1(杭州)地區部署了OSS服務,企業希望VPC1下的ECS執行個體可以私網訪問華東1(杭州)地區下的OSS服務以擷取相關資源。

企業可以在OSS服務所屬的地區(即華東1(杭州)地區)建立一個VPC2,然後將要訪問OSS服務的VPC1和VPC2都串連至雲企業網下的企業版轉寄路由器中,VPC1和VPC2可以通過企業版轉寄路由器實現跨地區私網互連,VPC1下的ECS執行個體可以通過企業版轉寄路由器和VPC2實現私網訪問跨地區的OSS服務。

說明

VPC下的ECS執行個體通過企業版轉寄路由器訪問跨地區的OSS服務時,OSS服務所屬的地區下需至少擁有一個VPC執行個體,ECS執行個體將通過企業版轉寄路由器和該VPC執行個體訪問OSS服務。在本文中如果您在華東1(杭州)地區已有VPC執行個體,則您可以將此VPC執行個體串連至企業版轉寄路由器,無需建立VPC2。華東2(上海)地區的ECS執行個體可通過華東1(杭州)地區下的任意一個VPC執行個體訪問OSS服務。

網段規劃

重要

在您規劃網段時,請確保VPC之間要互連的網段沒有重疊。

資源

VPC所屬地區

網段及IP地址

VPC1

華東2(上海)

主網段:192.168.0.0/16

  • 交換器1網段:192.168.0.0/24,交換器1位於可用性區域M。

  • 交換器2網段:192.168.20.0/24,交換器1位於可用性區域N。

  • ECS IP地址:192.168.0.1,ECS執行個體位於交換器1下。

VPC2

華東1(杭州)

主網段:172.16.0.0/16

  • 交換器1網段:172.16.1.0/24,交換器1位於可用性區域J。

  • 交換器2網段:172.16.2.0/24,交換器2位於可用性區域K。

操作步驟

本文提供控制台和Terraform兩種配置方式,請按需選擇。

控制台

準備工作

在開始配置前,請確保您已完成以下操作:

  • 您已經在華東1(杭州)地區部署了OSS服務。具體操作,請參見開始使用OSS

  • 您已經在華東2(上海)地區建立了VPC1,VPC1中使用ECS部署了相關應用服務。具體操作,請參見搭建IPv4專用網路

  • 您已經在華東1(杭州)地區建立了VPC2。具體操作,請參見建立和管理專用網路

    請確保每個VPC在企業版轉寄路由器支援的可用性區域中擁有足夠的交換器執行個體,且每個交換器執行個體擁有至少一個閒置IP地址。

    • 對於企業版轉寄路由器僅支援一個可用性區域的地區(例如華東5(南京-本地地區)地區),VPC執行個體需在當前可用性區域下擁有至少一個交換器執行個體。

    • 對於企業版轉寄路由器支援多個可用性區域的地區(例如華東2(上海)地區),VPC執行個體需在這些可用性區域中擁有至少2個交換器執行個體,2個交換器執行個體需位於不同的可用性區域。

    更多資訊,請參見VPC串連原理

  • 您已經瞭解VPC1和VPC2所應用的安全性群組規則,並確保安全性群組規則允許VPC1中的ECS執行個體可以通過VPC2訪問OSS服務。具體操作,請參見查詢安全性群組規則添加安全性群組規則

  • 您已經建立了一個雲企業網執行個體。具體操作,請參見建立雲企業網執行個體

  • 您已經在雲企業網執行個體下的華東2(上海)和華東1(杭州)地區分別建立了企業版轉寄路由器。具體操作,請參見建立轉寄路由器執行個體

    建立企業版轉寄路由器執行個體時均使用預設配置即可。

步驟一:建立VPC串連

將VPC1串連至華東2(上海)地區的企業版轉寄路由器,將VPC2串連至華東1(杭州)地區的企業版轉寄路由器。

  1. 登入雲企業網管理主控台

  2. 雲企業網執行個體頁面,找到目標雲企業網執行個體,單擊雲企業網執行個體ID。

    本文中的目標雲企業網執行個體指在準備工作中建立的雲企業網執行個體。

  3. 基本資料 > 轉寄路由器頁簽,找到任意一個轉寄路由器執行個體,在操作列單擊建立網路執行個體串連

  4. 串連網路執行個體頁面,根據以下資訊進行配置,然後單擊確定建立

    請根據下表中的資訊,將VPC1串連至華東2(上海)地區的企業版轉寄路由器,將VPC2串連至華東1(杭州)地區的企業版轉寄路由器。

    配置項

    配置項說明

    VPC1

    VPC2

    執行個體類型

    選擇待串連的網路執行個體類型。

    Virtual Private Cloud

    Virtual Private Cloud

    地區

    選擇待串連的網路執行個體所在的地區。

    華東2(上海)

    華東1(杭州)

    轉寄路由器

    系統自動顯示該地區下已建立的轉寄路由器執行個體ID。

    資源歸屬UID

    選擇待串連的網路執行個體所屬的帳號類型。

    同帳號

    同帳號

    付費方式

    預設值隨用隨付

    串連名稱

    輸入網路執行個體串連的名稱。

    VPC1串連

    VPC2串連

    網路執行個體

    選擇待串連的網路執行個體。

    選擇VPC1

    選擇VPC2

    交換器

    在轉寄路由器支援的可用性區域選擇一個交換器執行個體。

    如果您在轉寄路由器支援的多個可用性區域均擁有交換器執行個體,您可以同時選擇多個可用性區域並在每個可用性區域下選擇一個交換器執行個體以實現可用性區域層級的容災。

    • 上海 可用性區域F:選擇交換器1

    • 上海 可用性區域G:選擇交換器2

    • 杭州 可用性區域H:選擇交換器1

    • 杭州 可用性區域I:選擇交換器2

    進階配置

    VPC1和VPC2均保持預設配置,即選中所有進階配置選項。

步驟二:建立跨地區串連

由於VPC1串連的企業版轉寄路由器和VPC2串連的企業版轉寄路由器位於不同的地區,跨地區的VPC執行個體預設無法互連。您需要在華東1(杭州)和華東2(上海)地區的企業版轉寄路由器執行個體之間建立跨地區串連,實現VPC1和VPC2之間的跨地區互連。

  1. 登入雲企業網管理主控台

  2. 云企业网实例頁面,找到目標雲企業網執行個體,單擊目標執行個體ID。

  3. 基本信息 > 转发路由器頁簽下,找到任意一個轉寄路由器執行個體,在轉寄路由器執行個體的操作列單擊创建网络实例连接

  4. 连接网络实例頁面,配置跨地區串連資訊,然後單擊确定创建

    以下僅列舉本文強相關的配置項,其餘配置項保持預設狀態。更多資訊,請參見使用企業版轉寄路由器建立跨地區串連

    配置項

    說明

    实例类型

    選擇跨地域连接

    地域

    選擇要互連的地區。

    本文選擇華東2(上海)

    對端地區

    選擇要互連的對端地區。

    本文選擇華東1(杭州)

    頻寬分配方式

    選擇跨地區串連的頻寬分配方式。

    本文選擇按流量付費,系統將按照跨地區串連實際使用的流量計費。

    頻寬

    輸入跨地區串連的頻寬值。單位:Mbps。

    按流量付費的頻寬分配方式下,該配置項表示跨地區串連的限速頻寬值。

    預設鏈路類型

    選擇跨地區串連的鏈路類型。

    本文保持預設值。鏈路類型說明,請參見鏈路類型

    高级配置

    本文保持預設配置,即選擇開啟三種進階功能。

步驟三:在VPC中配置OSS服務的路由

建立跨地區串連後,VPC1和VPC2可以通過企業版轉寄路由器實現私網互連,但是VPC1中的ECS執行個體依舊無法通過企業版轉寄路由器和VPC2私網訪問OSS服務,您需要在VPC1的路由表中添加OSS服務的路由,引導VPC1訪問OSS服務的流量進入企業版轉寄路由器。

  1. 登入專用網路管理主控台
  2. 在頂部功能表列,選擇VPC1執行個體所屬的地區。

    本文選擇華東2(上海)地區。

  3. 在左側導覽列,單擊路由表

  4. 路由表頁面,找到VPC1執行個體的路由表,單擊路由表執行個體ID。

    本文中VPC1僅擁有一張系統路由表,如果您的VPC中擁有多張路由表,請選擇ECS執行個體所在交換器關聯的路由表。

  5. 路由條目列表頁簽下單擊自訂路由條目頁簽,然後單擊添加路由條目

  6. 添加路由條目面板,配置以下資訊,然後單擊確定

    請根據以下資訊將華東1(杭州)地區下OSS服務所有網段的路由均添加至VPC1的路由表中。

    華東1(杭州)地區下OSS服務所有網段的資訊,請參見OSS內網網域名稱與VIP網段對照表

    配置項

    配置項說明

    路由條目1

    路由條目2

    路由條目3

    路由條目4

    名稱

    輸入自訂路由條目的名稱。

    OSS網段1

    OSS網段2

    OSS網段3

    OSS網段4

    目標網段

    輸入目標網段。

    100.118.28.0/24

    100.114.102.0/24

    100.98.170.0/24

    100.118.31.0/24

    下一跳類型

    選擇自訂路由條目的下一跳類型,並選擇下一跳。

    選擇轉寄路由器,然後選擇VPC1串連。

    選擇轉寄路由器,然後選擇VPC1串連。

    選擇轉寄路由器,然後選擇VPC1串連。

    選擇轉寄路由器,然後選擇VPC1串連。

步驟四:在轉寄路由器中配置OSS服務的路由

您還需要在華東1(杭州)地區的企業版轉寄路由器路由表下添加OSS服務的路由,在VPC1下ECS執行個體訪問OSS服務的流量進入企業版轉寄路由器後,企業版轉寄路由器可以根據OSS服務的路由將流量引導至VPC2,然後ECS執行個體可通過VPC2私網訪問OSS服務。

  1. 登入雲企業網管理主控台

  2. 雲企業網執行個體頁面,找到目標雲企業網執行個體,單擊雲企業網執行個體ID。

  3. 基本資料 > 轉寄路由器頁簽,找到華東1(杭州)地區下的轉寄路由器執行個體,單擊執行個體ID。

  4. 在轉寄路由器執行個體詳情頁面,單擊轉寄路由器路由表頁簽,在頁簽左側選擇目標轉寄路由器路由表。

    由於VPC1串連和VPC2串連均採用了預設進階配置,均與轉寄路由器的預設路由表建立了關聯轉寄關係,因此本文選擇轉寄路由器的預設路由表(即系統路由表)。

  5. 路由條目頁簽下,單擊建立路由條目

  6. 添加路由條目對話方塊,根據以下資訊進行配置,然後單擊確定

    請根據以下資訊將華東1(杭州)地區下OSS服務所有網段的路由均添加至轉寄路由器的路由表中。

    配置項

    配置項說明

    路由條目1

    路由條目2

    路由條目3

    路由條目4

    路由條目名稱

    輸入路由條目的名稱。

    OSS網段1

    OSS網段2

    OSS網段3

    OSS網段4

    目的地址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串連

步驟五:測試連通性

完成上述配置後,VPC1中的ECS執行個體可以私網訪問跨地區的OSS服務了。本文以ECS下載OSS服務中的一張圖片為例測試VPC1下ECS執行個體和OSS服務之間的連通性。

  1. 登入VPC1執行個體下的ECS執行個體。具體操作,請參見ECS遠端連線操作指南

  2. 在ECS執行個體中嘗試下載OSS服務下一張名為OSStest.jgp的圖片。

    說明

    在您測試前請確保目標檔案擁有的讀寫權限允許其被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服務了。ECS訪問跨地區OSS-測試連通性

Terraform

您可以使用Terraform搭建本文樣本環境,關於Terraform的安裝和配置,請參考Install Terraform

下面步驟以Linux主機運行Terraform v1.9.8為例進行介紹,操作前請確保您已經完成Authentication

說明

本教程樣本包含的部分資源會產生一定費用,請在不需要時及時進行釋放或退訂。

第一步:建立資源

  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"
      type        = string
      default     = "cn-hangzhou"
    }
    
    variable "region_id_shanghai" { #
      description = "The region id of shanghai"
      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"
      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"                     # Name of the file in the bucket
      content  = "this is example text content \n" # Content of the file
      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
      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 # default is 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"
      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

第二步:驗證測試

  1. 登入ECS執行個體(名稱為tf-cen-oss-ecs)。

    您可以在Terraform的Outputs輸出中,找到對應ECS的登入地址並複製到瀏覽器開啟,登入時注意認證方式選擇臨時SSH密鑰認證

    image

  2. 在Outputs輸出中,複製curl開頭的命令:

    image

  3. 在ECS執行個體中執行curl命令:

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

    image

    如上圖,如果能擷取到常值內容,則說明訪問成功。

第三步:釋放資源

驗證完畢後,如果您不再使用資源,請執行以下命令釋放資源,防止繼續計費。

terraform destroy --auto-approve

路由說明

在本文中,建立VPC串連、建立跨地區串連時均採用預設路由配置,預設路由配置下雲企業網會自動完成路由的分發和學習以實現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三條路由條目,其下一跳均指向VPC串連。

跨地區串連

建立跨地區串連時如果採用預設路由配置(即開啟所有進階配置),則系統會自動對跨地區串連進行以下路由配置:

  • 自动关联至转发路由器的默认路由表

    開啟本功能後,跨地區串連將與兩個地區的轉寄路由器的預設路由表建立關聯轉寄關係,兩個地區的轉寄路由器將會通過查詢預設路由錶轉發跨地區間的流量。

  • 自动传播系统路由至转发路由器的默认路由表

    開啟本功能後,跨地區串連將與兩個地區的轉寄路由器的預設路由表建立路由學習關係。

  • 自动发布路由到对端地域

    開啟本功能後,即允許跨地區串連將本端轉寄路由器路由表(指與跨地區串連建立關聯轉寄關係的路由表)下的路由自動傳播至對端轉寄路由器的路由表(指與跨地區串連建立路由學習關係的路由表)中,用於網路執行個體跨地區互連。

查看路由條目

您可以在阿里雲管理主控台查看對應執行個體的路由條目資訊: