全部產品
Search
文件中心

Resource Orchestration Service:建立ECS執行個體組並掛載到CLB執行個體

更新時間:Aug 19, 2026

本文以建立ECS執行個體組並掛載到傳統型負載平衡(CLB)執行個體為例,由簡入難的向您介紹如何編輯ROS模板。

方案概述

本方案使用阿里雲Resource Orchestration Service服務(ROS)通過 YAML 模板,一次性建立 VPC 網路、ECS 執行個體組並部署 Nginx 服務,然後建立傳統型負載平衡(CLB)執行個體並將 ECS 執行個體組掛載為後端伺服器,最後綁定彈性公網 IP(EIP)對外提供 HTTP 服務。適用於需要快速搭建高可用 Web 服務叢集的情境。

業務情境

在阿里雲Virtual Private Cloud中大量建立 ECS 執行個體,通過 ECS 雲助手自動安裝並啟動 Nginx 服務,等待服務初始化完成後將 ECS 執行個體掛載到 CLB 負載平衡器實現流量分發,並通過 EIP 對外暴露 HTTP 訪問地址。

建立的資源清單

序號

資源名稱

ROS 資源類型

用途說明

1

Virtual Private Cloud

ALIYUN::ECS::VPC

提供隔離的網路環境

2

交換器 VSwitch

ALIYUN::ECS::VSwitch

在 VPC 中劃分子網網段,指定可用性區域

3

安全性群組 SecurityGroup

ALIYUN::ECS::SecurityGroup

開放 HTTP 80 連接埠入站,允許所有出站

4

ECS 執行個體組 InstanceGroup

ALIYUN::ECS::InstanceGroup

大量建立多台 ECS,通過 CommandContent 自動部署 Nginx

5

負載平衡 CLB

ALIYUN::SLB::LoadBalancer

傳統型Server Load Balancer執行個體,分發流量到後端 ECS

6

負載平衡監聽 Listener

ALIYUN::SLB::Listener

配置 CLB 的 TCP/HTTP 監聽連接埠和健全狀態檢查

7

後端伺服器掛載

ALIYUN::SLB::BackendServerAttachment

將 ECS 執行個體組掛載到 CLB 作為後端伺服器

8

彈性公網 IP EIP

ALIYUN::VPC::EIP

提供公網訪問入口

9

EIP 綁定

ALIYUN::VPC::EIPAssociation

將 EIP 綁定到 CLB 執行個體

部署完成後獲得的結果

模板成功執行後,您將獲得:

  • 一個完整的 VPC 網路環境(包含 VPC、交換器、安全性群組,已開放 80 連接埠)。

  • 一組 ECS 執行個體(預設 2 台),已自動完成資料盤掛載和 Nginx 服務部署。

  • 一個 CLB Server Load Balancer執行個體,已配置 TCP 80 連接埠監聽和健全狀態檢查。

  • 所有 ECS 執行個體已掛載到 CLB 後端伺服器組,支援按權重分發流量。

  • 一個彈性公網 IP(EIP),已綁定到 CLB,可通過 http://<EIP地址> 訪問 Nginx 服務。

架構圖

image

前提條件

在使用本模板前,請確認以下條件:

  1. 帳號許可權:您的阿里雲帳號需要具有以下產品的建立許可權:ECS、CLB、VPC、EIP。

  2. 基礎知識:瞭解 ROS 模板的基本文法和結構,詳情請參見模板快速入門。

模板編寫教程

本教程分兩個階段示範模板編寫過程:

  • 階段一(基礎版):使用固定參數值,專註於理解資源定義和 CLB 掛載關係。

  • 階段二(進階版):參數化所有可變更配置置,添加動態參數篩選、付費類型條件顯示和參數分組。

階段一:基礎模板——定義資源及其依賴關係

Step 1:定義基礎網路資源(VPC + VSwitch + 安全性群組)

網路資源是所有其他資源的基礎,需要最先建立。安全性群組需開放 HTTP 80 連接埠入站以允許外部存取 Nginx。

Resources:
  # ============================================================
  # 基礎網路層:VPC → VSwitch → SecurityGroup
  # ============================================================

  Vpc:
    Type: ALIYUN::ECS::VPC  # 建立專用網路
    Properties:
      CidrBlock: 192.168.0.0/16
      VpcName:
        Ref: ALIYUN::StackName  # 偽參數:使用資源棧名稱作為VPC名稱

  VSwitch:
    Type: ALIYUN::ECS::VSwitch  # 在VPC中建立交換器(子網)
    Properties:
      VSwitchName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc  # 隱式依賴:ROS會先建立Vpc
      ZoneId: cn-beijing-h # 此情境以北京H可用性區域為樣本
      CidrBlock: 192.168.0.0/24

  EcsSecurityGroup:
    Type: ALIYUN::ECS::SecurityGroup  # 建立安全性群組
    Properties:
      SecurityGroupName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      SecurityGroupIngress:  # 入站規則:開放HTTP 80連接埠(Nginx服務對外)
        - PortRange: 80/80
          Priority: 1
          SourceCidrIp: 0.0.0.0/0
          IpProtocol: tcp
          NicType: internet

關鍵知識點與思考:

  • 類似 VpcName、VSwitchName、SecurityGroupName 這類自訂配置可以使用偽參數進行配置,這樣可以讓我們在部署資源後快速找到屬於該資源棧部署相關的資源。

  • SecurityGroup 的訪問規則可以根據業務需求自訂配置,例如:

    • 需要在外部存取 Web 服務,可配置開啟安全性群組入方向的 HTTP 80 或 8080 連接埠訪問。

    • 需要 SSH 登入伺服器,可配置開啟安全性群組入方向的 22 連接埠訪問。

  • 生產環境建議限制 SourceCidrIp 為已知 IP 段,不建議使用 0.0.0.0/0。

Step 2:定義CLB 負載平衡和彈性公網 IP資源

CLB Server Load Balancer執行個體負責將外部流量分發到多台後端 ECS。EIP 提供公網入口地址。

Resources:
  # ============================================================
  # 負載平衡層:CLB + Listener + EIP
  # ============================================================

  Slb:
    Type: ALIYUN::SLB::LoadBalancer  # 建立傳統型Server Load Balancer執行個體
    Properties:
      VpcId:
        Ref: Vpc
      VSwitchId:
        Ref: VSwitch
      LoadBalancerName:
        Fn::Sub: slb-${ALIYUN::StackName}  # Fn::Sub拼接字串
      AddressType: intranet  # 內網類型CLB(通過EIP提供公網訪問)
      LoadBalancerSpec: slb.s1.small
      AutoPay: true

  SlbListener:
    Type: ALIYUN::SLB::Listener  # 配置CLB監聽
    DependsOn:
      - Slb  # 顯式依賴:CLB建立後才能添加監聽
    Properties:
      LoadBalancerId:
        Ref: Slb
      ListenerPort: 80  # 前端監聽連接埠
      BackendServerPort: 80  # 後端伺服器連接埠(Nginx預設80)
      Protocol: tcp  # 四層TCP協議轉寄
      Bandwidth: -1  # -1表示不限頻寬,具體取值請根據CLB執行個體規格調整
      Persistence:  # 會話保持配置
        StickySession: 'on'
        StickySessionType: insert  # 植入Cookie方式
        CookieTimeout: 60
        PersistenceTimeout: 180
      HealthCheck:  # 健全狀態檢查配置
        HealthCheckType: tcp  # TCP連接埠探測
        Port: 80
        Interval: 2  # 檢查間隔2秒
        HealthyThreshold: 3  # 3次成功判定為健康
        UnhealthyThreshold: 3  # 3次失敗判定為異常
        Timeout: 5  # 探測逾時5秒

  EipSlbAddress:
    Type: ALIYUN::VPC::EIP  # 建立Elastic IP Address
    Properties:
      Name:
        Ref: ALIYUN::StackName
      InternetChargeType: PayByTraffic  # 按流量計費
      Bandwidth: 10  # 頻寬上限10Mbps

  EipSlbAddressAssociation:
    Type: ALIYUN::VPC::EIPAssociation  # 將EIP綁定到CLB
    Properties:
      InstanceId:
        Ref: Slb  # 繫結目標:CLB執行個體
      AllocationId:
        Ref: EipSlbAddress  # EIP資源ID

關鍵知識點與思考:

  • DependsOn 的隱式關聯 vs 顯式依賴關聯:

    • 當使用 Ref 或 Fn::GetAtt 引用了某個資源,ROS 會自動判斷依賴(隱式)。只有當兩個資源之間沒有直接參考關聯性,但業務上要求先後順序時,才需要 DependsOn(顯式)。

  • CLB 使用 AddressType: intranet(內網類型),再通過 ALIYUN::VPC::EIPAssociation 綁定 EIP 實現公網訪問,這是推薦的架構模式。

Step 3:定義ECS 執行個體組和雲助手安裝Nginx 指令碼

ECS 執行個體通過雲助手執行初始化指令碼(資料盤掛載 + Nginx 安裝)。

Resources:
  EcsInstanceGroup:
    Type: ALIYUN::ECS::InstanceGroup
    Properties:
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch
      ZoneId: cn-beijing-h
      ImageId: centos_7
      InstanceType: ecs.c5.large
      MaxAmount: 2 # 建立2台ECS執行個體
      AllocatePublicIP: false # 不分配公網IP(通過CLB+EIP對外)
      IoOptimized: optimized
      SystemDiskCategory: cloud_essd
      SystemDiskSize: 40
      DiskMappings: # 資料盤配置
        - Category: cloud_essd
          Size: 100
      Password: <YourPassword>  # 部署時請替換為實際密碼(需含大小寫字母+數字+特殊字元)

  RunSetup:
    Type: ALIYUN::ECS::RunCommand
    DependsOn: EcsInstanceGroup
    Properties:
      InstanceIds:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      Type: RunShellScript
      Sync: true
      Timeout: 300
      ContentEncoding: PlainText
      CommandContent: |
        #!/bin/bash
        # === 資料盤初始化:分區、格式化、掛載到/disk1 ===
        cat >> /root/InitDataDisk.sh << 'EOF'
        #!/bin/bash
        echo "p
        n
        p
        w
        " |  fdisk -u /dev/vdb
        EOF
        /bin/bash /root/InitDataDisk.sh
        rm -f /root/InitDataDisk.sh
        mkfs -t ext4 /dev/vdb1
        cp /etc/fstab /etc/fstab.bak
        mkdir /disk1
        echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /disk1 ext4 defaults 0 0 >> /etc/fstab
        mount -a

        # === 安裝並啟動Nginx ===
        yum install -y nginx
        systemctl start nginx.service

關鍵知識點與思考:

  • Ref 和 Fn::GetAtt 的區別:

    • Ref返回資源的主標識符(如 VPC 的 VpcId)。

    • Fn::GetAtt返回資源的相關屬性(如 EcsInstanceGroup 的 InstanceIds)。

Step 4:定義 CLB 後端伺服器掛載——將 ECS 串連到 CLB

通過 ALIYUN::SLB::BackendServerAttachment 將 ECS 執行個體組掛載到 CLB 後端。

Resources:
  # ============================================================
  # 綁定層:將ECS執行個體組掛載到CLB後端伺服器
  # ============================================================

  SlbBackendServerAttachment:
    Type: ALIYUN::SLB::BackendServerAttachment
    DependsOn:
      - EcsInstanceGroup  # 顯式依賴:等待ECS建立完成
    Properties:
      LoadBalancerId:
        Ref: Slb
      BackendServerList:
        # 擷取ECS執行個體組的所有執行個體ID列表
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      BackendServerWeightList:  # 後端伺服器權重列表
        - 100  # 第1台ECS權重100
        - 100  # 第2台ECS權重100

關鍵知識點:BackendServerWeightList 權重規則

  • 權重值範圍 0~100,權重越高分配的流量越多。

  • 如果 BackendServerWeightList 長度小於 BackendServerList,剩餘 ECS 執行個體使用列表中最後一個權重值。

基礎版完整模板

以下是將上述步驟合并後的完整可用模板:

ROSTemplateFormatVersion: '2015-09-01'
Description:
  zh-cn: 建立VPC網路,部署ECS執行個體組並安裝Nginx,掛載到CLB負載平衡器,通過EIP對外提供HTTP服務
  en: Create VPC, deploy ECS group with Nginx, attach to CLB, expose via EIP

Resources:
  # === 基礎網路層 ===
  Vpc:
    Type: ALIYUN::ECS::VPC
    Properties:
      CidrBlock: 192.168.0.0/16
      VpcName:
        Ref: ALIYUN::StackName
  VSwitch:
    Type: ALIYUN::ECS::VSwitch
    Properties:
      VSwitchName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      ZoneId: cn-beijing-h
      CidrBlock: 192.168.0.0/24
  EcsSecurityGroup:
    Type: ALIYUN::ECS::SecurityGroup
    Properties:
      SecurityGroupName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      SecurityGroupIngress:
        - PortRange: 80/80
          Priority: 1
          SourceCidrIp: 0.0.0.0/0
          IpProtocol: tcp
          NicType: internet
      SecurityGroupEgress:
        - PortRange: '-1/-1'
          Priority: 1
          IpProtocol: all
          DestCidrIp: 0.0.0.0/0
          NicType: internet
        - PortRange: '-1/-1'
          Priority: 1
          IpProtocol: all
          DestCidrIp: 0.0.0.0/0
          NicType: intranet

  # === 計算層 ===
  EcsInstanceGroup:
    Type: ALIYUN::ECS::InstanceGroup
    Properties:
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch
      ImageId: centos_7
      InstanceType: ecs.c5.large
      MaxAmount: 2
      AllocatePublicIP: false
      IoOptimized: optimized
      SystemDiskCategory: cloud_essd
      SystemDiskSize: 40
      DiskMappings:
        - Category: cloud_essd
          Size: 100
      Password: <YourPassword>  # 部署時請替換為實際密碼
  RunSetup:
    Type: ALIYUN::ECS::RunCommand
    DependsOn: EcsInstanceGroup
    Properties:
      InstanceIds:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      Type: RunShellScript
      Sync: true
      Timeout: 300
      ContentEncoding: PlainText
      CommandContent: |
        #!/bin/bash
        # === 資料盤初始化:分區、格式化、掛載到/disk1 ===
        cat >> /root/InitDataDisk.sh << 'EOF'
        #!/bin/bash
        echo "p
        n
        p
        w
        " |  fdisk -u /dev/vdb
        EOF
        /bin/bash /root/InitDataDisk.sh
        rm -f /root/InitDataDisk.sh
        mkfs -t ext4 /dev/vdb1
        cp /etc/fstab /etc/fstab.bak
        mkdir /disk1
        echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /disk1 ext4 defaults 0 0 >> /etc/fstab
        mount -a

        # === 安裝並啟動Nginx ===
        yum install -y nginx
        systemctl start nginx.service

  # === 負載平衡層 ===
  Slb:
    Type: ALIYUN::SLB::LoadBalancer
    Properties:
      VpcId:
        Ref: Vpc
      VSwitchId:
        Ref: VSwitch
      LoadBalancerName:
        Fn::Sub: slb-${ALIYUN::StackName}
      AddressType: intranet
      LoadBalancerSpec: slb.s1.small
      AutoPay: true
  SlbListener:
    DependsOn:
      - Slb
    Type: ALIYUN::SLB::Listener
    Properties:
      LoadBalancerId:
        Ref: Slb
      ListenerPort: 80
      BackendServerPort: 80
      Protocol: tcp
      Bandwidth: -1
      Persistence:
        StickySession: 'on'
        StickySessionType: insert
        CookieTimeout: 60
        PersistenceTimeout: 180
      HealthCheck:
        HealthCheckType: tcp
        Port: 80
        Interval: 2
        HealthyThreshold: 3
        UnhealthyThreshold: 3
        Timeout: 5
  EipSlbAddress:
    Type: ALIYUN::VPC::EIP
    Properties:
      Name:
        Ref: ALIYUN::StackName
      InternetChargeType: PayByTraffic
      Bandwidth: 10
  EipSlbAddressAssociation:
    Type: ALIYUN::VPC::EIPAssociation
    Properties:
      InstanceId:
        Ref: Slb
      AllocationId:
        Ref: EipSlbAddress

  # === 綁定層 ===
  SlbBackendServerAttachment:
    DependsOn:
      - EcsInstanceGroup
    Type: ALIYUN::SLB::BackendServerAttachment
    Properties:
      BackendServerList:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      LoadBalancerId:
        Ref: Slb
      BackendServerWeightList:
        - 100
        - 100

Outputs:
  Endpoint:
    Description:
      zh-cn: 對外暴露的公網訪問地址
      en: Public HTTP endpoint
    Value:
      Fn::Sub:
        - http://${ServerAddress}
        - ServerAddress:
            Fn::GetAtt:
              - EipSlbAddress
              - EipAddress

關鍵知識點與思考:模板建立完資源後,可以通過模板的 Outputs 資訊直接查詢對應資源內部屬性資訊,例如 CLB 執行個體綁定的公網 IP 等資訊。

階段二:進階模板——參數化與動態配置

基礎版模板中 ECS 的 InstanceType、SystemDiskCategory 以及 CLB 的 LoadBalancerSpec 等屬性使用了固定值。通過參數化可以大幅提高模板的靈活性。

本模板的進階特性:

  1. 參數化(Parameters):將可變更配置置抽取為參數。

  2. 動態參數篩選(AssociationProperty):ROS 控制台根據已選參數自動過濾可用選項。

  3. 參數分組(Metadata):按邏輯分組展示參數。

參數依賴關係圖

以下以 ECS 執行個體規格、系統硬碟類型和 CLB 執行個體規格為例,展示參數之間的依賴鏈路:

ZoneId(可用性區域,核心過濾參數)
  ├── EcsInstanceType(執行個體規格,按可用性區域+付費類型過濾)
  │     ├── SystemDiskCategory(系統硬碟類型,按可用性區域+執行個體規格過濾)
  │     └── DataDiskCategory(資料盤類型,按可用性區域+執行個體規格過濾)
  └── LoadBalancerSpec(CLB規格,按可用性區域過濾)

PayType(付費類型)
  ├── PayPeriodUnit(周期單位,僅PrePaid時顯示)
  ├── PayPeriod(購買時間長度,僅PrePaid時顯示)
  └── EcsInstanceType(執行個體規格,按可用性區域+付費類型過濾)

核心思路:先選可用性區域和 ECS 付費類型,再據此篩選 ECS 規格和 CLB 規格(當選擇預付費類型時需要選擇付費周期和購買時間長度),最後根據可用性區域 + ECS 規格篩選磁碟類型。每一步都只展示當前條件下可用的選項,避免無效組合。

參數 AssociationProperty 原理詳解

1. ZoneId — 可用性區域(基礎參數)

定義 AssociationProperty 為 ALIYUN::ECS::ZoneId 列出當前地區下所有可用性區域。樣本:

ZoneId:
    Type: String
    Label:
      zh-cn: 交換器可用性區域
      en: VSwitch Availability Zone
    Description:
      zh-cn: 選擇交換器所在的可用性區域,ECS和CLB將部署在此可用性區域
      en: Select the availability zone for VSwitch, ECS and CLB will be deployed here
    AssociationProperty: ALIYUN::ECS::ZoneId

此參數是後續所有參數的篩選基礎,使用者選擇後,其他參數的選項列表會隨之更新。

2. PayType — ECS 付費類型

定義 PayType 參數,使用 AssociationPropertyMetadata.Visible.Condition 實現參數的條件動態切換——當使用者選擇訂用帳戶(PrePaid)時才顯示購買時間長度相關參數。樣本:

Parameters:
  PayType:
    Type: String
    Label:
      zh-cn: 付費類型
      en: Charge Type
    Default: PostPaid
    AllowedValues:
      - PostPaid
      - PrePaid
    AssociationProperty: ChargeType
    AssociationPropertyMetadata:
      LocaleKey: InstanceChargeType
  PayPeriodUnit:
    Type: String
    Default: Month
    AssociationProperty: PayPeriodUnit
    AssociationPropertyMetadata:
      Visible:  # 條件顯示:僅當PayType不是PostPaid時才顯示此參數
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${PayType}
              - PostPaid
  PayPeriod:
    Type: Number
    Label:
      zh-cn: 購買資源時間長度
      en: Period
    Default: 1
    AllowedValues:
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      - 9
    AssociationProperty: PayPeriod
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${PayType}
              - PostPaid

當在 ROS 控制台選擇隨用隨付(PostPaid)時,購買時間長度相關參數自動隱藏;選擇訂用帳戶(PrePaid)時才顯示這些參數。

3. EcsInstanceType — ECS 執行個體規格

定義 AssociationProperty 為 ALIYUN::ECS::Instance::InstanceType 列出可用的 ECS 執行個體規格,並通過關聯 ${ZoneId} 和 ${PayType} 篩選對應可用性區域下對應付費類型支援的可用執行個體規格。樣本:

EcsInstanceType:
    Type: String
    Label:
      zh-cn: ECS執行個體規格
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceChargeType: ${PayType}

不同可用性區域的執行個體規格庫存不同。如果不過濾,可能選到該可用性區域無貨的規格,導致建立失敗。

4. SystemDiskCategory — 系統硬碟類型

定義 AssociationProperty 為 ALIYUN::ECS::Disk::SystemDiskCategory 列出可選的系統硬碟類型,並通過關聯 ${ZoneId} 和 ${EcsInstanceType} 篩選對應可用性區域與 ECS 執行個體規格支援使用的 ECS 系統硬碟類型。樣本:

SystemDiskCategory:
    Type: String
    Label:
      zh-cn: 系統硬碟類型
      en: System Disk Category
    Description:
      zh-cn: 選擇系統硬碟類型。可選值:cloud_essd(ESSD雲端硬碟)、cloud_ssd(SSD雲端硬碟)、cloud_efficiency(高效雲端硬碟)
      en: "System disk type. Options: cloud_essd, cloud_ssd, cloud_efficiency"
    AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceType: ${EcsInstanceType}

系統硬碟類型的可用性同時取決於可用性區域(某些可用性區域不支援 ESSD)和執行個體規格(某些規格僅支援特定磁碟類型)。

5. LoadBalancerSpec — CLB 執行個體規格

定義 AssociationProperty 為 ALIYUN::SLB::Instance::InstanceType 列出可用的 CLB 執行個體規格,並通過關聯 ${ZoneId} 篩選對應可用性區域支援的 CLB 執行個體規格。樣本:

LoadBalancerSpec:
    Type: String
    Label:
      zh-cn: CLB執行個體規格
      en: CLB Instance Spec
    Description:
      zh-cn: 選擇CLB執行個體規格,根據可用性區域自動過濾
      en: Select CLB instance specification
    AssociationProperty: ALIYUN::SLB::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}

動態參數篩選模板樣本

Parameters:
  ZoneId:
    Type: String
    Label:
      zh-cn: 交換器可用性區域
      en: VSwitch Availability Zone
    Description:
      zh-cn: 選擇交換器所在的可用性區域,ECS和CLB將部署在此可用性區域
      en: Select the availability zone for deployment
    AssociationProperty: ALIYUN::ECS::ZoneId
  PayType:
    Type: String
    Label:
      zh-cn: 付費類型
      en: Charge Type
    Default: PostPaid
    AllowedValues:
      - PostPaid
      - PrePaid
    AssociationProperty: ChargeType
    AssociationPropertyMetadata:
      LocaleKey: InstanceChargeType
  PayPeriodUnit:
    Type: String
    Default: Month
    AssociationProperty: PayPeriodUnit
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${PayType}
              - PostPaid
  PayPeriod:
    Type: Number
    Label:
      zh-cn: 購買資源時間長度
      en: Period
    Default: 1
    AllowedValues:
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      - 9
    AssociationProperty: PayPeriod
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${PayType}
              - PostPaid
  EcsInstanceType:
    Type: String
    Label:
      zh-cn: ECS執行個體規格
      en: ECS Instance Type
    Description:
      zh-cn: 選擇ECS執行個體規格。列表已根據可用性區域和付費類型自動過濾。
      en: Select ECS instance type, filtered by zone and charge type.
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceChargeType: ${PayType}
  SystemDiskCategory:
    Type: String
    Label:
      zh-cn: 系統硬碟類型
      en: System Disk Category
    Description:
      zh-cn: 選擇系統硬碟類型。可選值:cloud_essd(ESSD雲端硬碟)、cloud_ssd(SSD雲端硬碟)、cloud_efficiency(高效雲端硬碟)
      en: System disk type
    AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceType: ${EcsInstanceType}
  DataDiskCategory:
    Type: String
    Label:
      zh-cn: 資料盤類型
      en: Data Disk Category
    Description:
      zh-cn: 選擇資料盤類型。可選值:cloud_essd、cloud_ssd、cloud_efficiency
      en: Data disk type
    AssociationProperty: ALIYUN::ECS::Disk::DataDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceType: ${EcsInstanceType}
  LoadBalancerSpec:
    Type: String
    Label:
      zh-cn: CLB執行個體規格
      en: CLB Instance Spec
    Description:
      zh-cn: 選擇CLB執行個體規格,根據可用性區域自動過濾
      en: Select CLB instance specification
    AssociationProperty: ALIYUN::SLB::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}

參數 AssociationProperty 工作原理總結

使用者在 ROS 控制台建立資源棧時,參數的選擇過程是級聯觸發的:

  1. 選擇可用性區域(ZoneId)。

  2. 選擇 ECS 付費類型(PayType)。

  3. ECS 執行個體規格下拉框自動重新整理,僅顯示該可用性區域下所支援對應付費類型且具備庫存的規格。

  4. CLB 執行個體規格下拉框自動重新整理,僅顯示該可用性區域支援的規格。

  5. 選擇 ECS 執行個體規格後,系統硬碟類型和資料盤類型下拉框自動重新整理,僅顯示該可用性區域 + 該規格共同支援的磁碟類型。

這樣,每一步選擇都只展示當前條件下可用的選項,從源頭避免因參數組合無效導致的部署失敗。

Metadata 參數分組

通過 Metadata 中的 ALIYUN::ROS::Interface 配置,可以將參數按邏輯分成多個組,每組帶一個標題,控制台上會分組展示,填寫體驗大幅提升。

Metadata 文法結構

Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:           # 參數分組列表(必填)
      - Parameters:            # 該組包含的參數名列表(必填)
          - 參數名1
          - 參數名2
        Label:                 # 分組標題(必填)
          default:
            zh-cn: 中文標題
            en: English Title

Metadata 文法規則:

  • ParameterGroups、Parameters、Label 都是必填項。

  • Metadata.ALIYUN::ROS::Interface.ParameterGroups.Parameters 中列出的參數名必須與模板 Parameters 段中定義的參數名完全一致。

  • 未出現在任何分組中的參數,會在控制台顯示在未分組地區。

本情境的分組設計

本模板將 14 個參數按資源類型分成 4 個組:

┌─────────────────────────────────────────────┐
│  基礎網路設定                                │
│  ├── 交換器可用性區域 (ZoneId)                   │
│  ├── VPC網段 (VpcCidrBlock)                 │
│  └── 交換器網段 (VSwitchCidrBlock)           │
├─────────────────────────────────────────────┤
│  付費模式配置                                │
│  ├── ECS執行個體付費類型 (PayType)               │
│  ├── ECS預付費購買資源周期 (PayPeriodUnit)    │
│  └── ECS預付費購買資源時間長度 (PayPeriod)        │
├─────────────────────────────────────────────┤
│  ECS執行個體配置                                 │
│  ├── ECS執行個體規格 (EcsInstanceType)           │
│  ├── 系統硬碟類型 (SystemDiskCategory)         │
│  ├── 系統硬碟大小 (SystemDiskSize)             │
│  ├── 資料盤類型 (DataDiskCategory)           │
│  ├── 資料盤大小 (DataDiskSize)               │
│  └── ECS執行個體密碼 (InstancePassword)          │
├─────────────────────────────────────────────┤
│  CLB負載平衡配置                              │
│  ├── CLB執行個體規格 (LoadBalancerSpec)          │
│  └── CLB綁定的EIP頻寬 (Bandwidth)            │
└─────────────────────────────────────────────┘

Metadata 分組模板樣本

Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:
      - Parameters:
          - ZoneId
          - VpcCidrBlock
          - VSwitchCidrBlock
        Label:
          default:
            zh-cn: 基礎網路設定
            en: Network Configuration
      - Parameters:
          - PayType
          - PayPeriodUnit
          - PayPeriod
        Label:
          default:
            zh-cn: 付費類型
            en: Billing Configuration
      - Parameters:
          - EcsInstanceType
          - SystemDiskCategory
          - SystemDiskSize
          - DataDiskCategory
          - DataDiskSize
          - InstancePassword
        Label:
          default:
            zh-cn: ECS執行個體配置
            en: ECS Instance Configuration
      - Parameters:
          - LoadBalancerSpec
          - Bandwidth
        Label:
          default:
            zh-cn: 負載平衡配置
            en: CLB Configuration

進階版完整模板

ROSTemplateFormatVersion: '2015-09-01'
Description:
  zh-cn: >-
    參數化模板:建立ECS執行個體組部署Nginx服務,掛載到CLB負載平衡器,通過EIP對外提供HTTP服務。
    支援動態選擇可用性區域、執行個體規格、磁碟類型和CLB規格,支援按量/訂用帳戶付費模式切換。
  en: >-
    Parameterized template: Create ECS group with Nginx, attach to CLB, expose via EIP.
    Supports dynamic selection and PayAsYouGo/Subscription billing switch.

Parameters:
  # ─── 基礎網路參數 ───
  ZoneId:
    Type: String
    Label:
      zh-cn: 交換器可用性區域
      en: VSwitch Availability Zone
    Description:
      zh-cn: 選擇交換器所在的可用性區域,ECS和CLB將部署在此可用性區域
      en: Select the availability zone for deployment
    AssociationProperty: ALIYUN::ECS::ZoneId

  VpcCidrBlock:
    Type: String
    Label:
      zh-cn: VPC網段
      en: VPC CIDR Block
    Description:
      zh-cn: VPC的IP位址區段範圍。推薦使用 10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16
      en: VPC IP address range
    Default: 192.168.0.0/16

  VSwitchCidrBlock:
    Type: String
    Label:
      zh-cn: 交換器網段
      en: VSwitch CIDR Block
    Description:
      zh-cn: 必須是VPC網段的子網段,且不能與同VPC下其他交換器網段重疊
      en: Must be a subnet of VPC CIDR
    Default: 192.168.0.0/24

  # ─── 付費型別參數 ───
  PayType:
    Type: String
    Label:
      zh-cn: 付費類型
      en: Charge Type
    Default: PostPaid
    AllowedValues:
      - PostPaid
      - PrePaid
    AssociationProperty: ChargeType
    AssociationPropertyMetadata:
      LocaleKey: InstanceChargeType

  PayPeriodUnit:
    Type: String
    Label:
      zh-cn: 購買資源時間長度周期
      en: Pay Period Unit
    Description:
      zh-cn: 訂用帳戶的周期單位。Month為月,Year為年。僅訂用帳戶時有效。
      en: Subscription period unit. Only valid for PrePaid.
    Default: Month
    AllowedValues:
      - Month
      - Year
    AssociationProperty: PayPeriodUnit
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${PayType}
              - PostPaid

  PayPeriod:
    Type: Number
    Label:
      zh-cn: 購買資源時間長度
      en: Period
    Default: 1
    AllowedValues:
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      - 9
    AssociationProperty: PayPeriod
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${PayType}
              - PostPaid

  # ─── ECS執行個體參數 ───
  EcsInstanceType:
    Type: String
    Label:
      zh-cn: ECS執行個體規格
      en: ECS Instance Type
    Description:
      zh-cn: 選擇ECS執行個體規格。列表已根據可用性區域和付費類型自動過濾。
      en: Select ECS instance type, filtered by zone and charge type.
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceChargeType: ${PayType}

  SystemDiskCategory:
    Type: String
    Label:
      zh-cn: 系統硬碟類型
      en: System Disk Category
    Description:
      zh-cn: 選擇系統硬碟類型。可選值:cloud_essd(ESSD雲端硬碟)、cloud_ssd(SSD雲端硬碟)、cloud_efficiency(高效雲端硬碟)
      en: System disk type
    AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceType: ${EcsInstanceType}

  SystemDiskSize:
    Type: Number
    Label:
      zh-cn: 系統硬碟大小(GB)
      en: System Disk Size (GB)
    Description:
      zh-cn: 系統硬碟大小,取值範圍40~500 GB
      en: System disk size, range 40-500 GB
    Default: 40
    MinValue: 40
    MaxValue: 500

  DataDiskCategory:
    Type: String
    Label:
      zh-cn: 資料盤類型
      en: Data Disk Category
    Description:
      zh-cn: 選擇資料盤類型。可選值:cloud_essd、cloud_ssd、cloud_efficiency
      en: Data disk type
    AssociationProperty: ALIYUN::ECS::Disk::DataDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceType: ${EcsInstanceType}

  DataDiskSize:
    Type: Number
    Label:
      zh-cn: 資料盤大小(GB)
      en: Data Disk Size (GB)
    Description:
      zh-cn: ECS資料盤大小,取值範圍20~32768 GB
      en: Data disk size, range 20-32768 GB
    Default: 100
    MinValue: 20
    MaxValue: 32768

  InstancePassword:
    Type: String
    NoEcho: true
    Label:
      zh-cn: ECS執行個體密碼
      en: ECS Instance Password
    Description:
      zh-cn: 長度8-30位,需包含大寫字母、小寫字母、數字、特殊字元中的至少三種
      en: Length 8-30, must contain at least three character types
    MinLength: 8
    MaxLength: 30
    AssociationProperty: ALIYUN::ECS::Instance::Password

  # ─── 負載平衡參數 ───
  LoadBalancerSpec:
    Type: String
    Label:
      zh-cn: CLB執行個體規格
      en: CLB Instance Spec
    Description:
      zh-cn: 選擇CLB執行個體規格,根據可用性區域自動過濾
      en: Select CLB instance specification
    AssociationProperty: ALIYUN::SLB::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}

  Bandwidth:
    Type: Number
    Label:
      zh-cn: EIP頻寬(Mbps)
      en: EIP Bandwidth (Mbps)
    Description:
      zh-cn: Elastic IP Address的頻寬上限,取值範圍1~1000 Mbps
      en: EIP bandwidth cap, range 1-1000 Mbps
    Default: 10
    MinValue: 1
    MaxValue: 1000

Resources:
  # === 基礎網路層 ===
  Vpc:
    Type: ALIYUN::ECS::VPC
    Properties:
      CidrBlock:
        Ref: VpcCidrBlock
      VpcName:
        Ref: ALIYUN::StackName
  VSwitch:
    Type: ALIYUN::ECS::VSwitch
    Properties:
      VSwitchName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      ZoneId:
        Ref: ZoneId
      CidrBlock:
        Ref: VSwitchCidrBlock
  EcsSecurityGroup:
    Type: ALIYUN::ECS::SecurityGroup
    Properties:
      SecurityGroupName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      SecurityGroupIngress:
        - PortRange: 80/80
          Priority: 1
          SourceCidrIp: 0.0.0.0/0
          IpProtocol: tcp
          NicType: internet
      SecurityGroupEgress:
        - PortRange: '-1/-1'
          Priority: 1
          IpProtocol: all
          DestCidrIp: 0.0.0.0/0
          NicType: internet
        - PortRange: '-1/-1'
          Priority: 1
          IpProtocol: all
          DestCidrIp: 0.0.0.0/0
          NicType: intranet

  # === 計算層 ===
  EcsInstanceGroup:
    Type: ALIYUN::ECS::InstanceGroup
    Properties:
      InstanceChargeType:
        Ref: PayType
      PeriodUnit:
        Ref: PayPeriodUnit
      Period:
        Ref: PayPeriod
      IoOptimized: optimized
      SystemDiskCategory:
        Ref: SystemDiskCategory
      SystemDiskSize:
        Ref: SystemDiskSize
      DiskMappings:
        - Category:
            Ref: DataDiskCategory
          Size:
            Ref: DataDiskSize
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch
      MaxAmount: 2
      ImageId: centos_7
      InstanceType:
        Ref: EcsInstanceType
      Password:
        Ref: InstancePassword
      AllocatePublicIP: false
  RunSetup:
    Type: ALIYUN::ECS::RunCommand
    DependsOn: EcsInstanceGroup
    Properties:
      InstanceIds:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      Type: RunShellScript
      Sync: true
      Timeout: 300
      ContentEncoding: PlainText
      CommandContent: |
        #!/bin/bash
        # === 資料盤初始化:分區、格式化、掛載到/disk1 ===
        cat >> /root/InitDataDisk.sh << 'EOF'
        #!/bin/bash
        echo "p
        n
        p
        w
        " |  fdisk -u /dev/vdb
        EOF
        /bin/bash /root/InitDataDisk.sh
        rm -f /root/InitDataDisk.sh
        mkfs -t ext4 /dev/vdb1
        cp /etc/fstab /etc/fstab.bak
        mkdir /disk1
        echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /disk1 ext4 defaults 0 0 >> /etc/fstab
        mount -a

        # === 安裝並啟動Nginx ===
        yum install -y nginx
        systemctl start nginx.service

  # === 負載平衡層 ===
  Slb:
    Type: ALIYUN::SLB::LoadBalancer
    Properties:
      VpcId:
        Ref: Vpc
      VSwitchId:
        Ref: VSwitch
      LoadBalancerName:
        Fn::Sub: slb-${ALIYUN::StackName}
      PayType:
        Ref: PayType
      PricingCycle:
        Ref: PayPeriodUnit
      Duration:
        Ref: PayPeriod
      AddressType: intranet
      LoadBalancerSpec:
        Ref: LoadBalancerSpec
      AutoPay: true
  EipSlbAddress:
    Type: ALIYUN::VPC::EIP
    Properties:
      Name:
        Ref: ALIYUN::StackName
      InternetChargeType: PayByTraffic
      Bandwidth:
        Ref: Bandwidth
  EipSlbAddressAssociation:
    Type: ALIYUN::VPC::EIPAssociation
    Properties:
      InstanceId:
        Ref: Slb
      AllocationId:
        Ref: EipSlbAddress
  SlbBackendServerAttachment:
    DependsOn:
      - EcsInstanceGroup
    Type: ALIYUN::SLB::BackendServerAttachment
    Properties:
      BackendServerList:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      LoadBalancerId:
        Ref: Slb
      BackendServerWeightList:
        - 100
        - 100
  SlbListener:
    DependsOn:
      - Slb
    Type: ALIYUN::SLB::Listener
    Properties:
      LoadBalancerId:
        Ref: Slb
      ListenerPort: 80
      BackendServerPort: 80
      Protocol: tcp
      Bandwidth: -1
      Persistence:
        StickySession: 'on'
        StickySessionType: insert
        CookieTimeout: 60
        PersistenceTimeout: 180
      HealthCheck:
        HealthCheckType: tcp
        Port: 80
        Interval: 2
        HealthyThreshold: 3
        UnhealthyThreshold: 3
        Timeout: 5

Outputs:
  Endpoint:
    Description:
      zh-cn: 對外暴露的公網訪問地址
      en: Public HTTP endpoint
    Value:
      Fn::Sub:
        - http://${ServerAddress}
        - ServerAddress:
            Fn::GetAtt:
              - EipSlbAddress
              - EipAddress

# === 中繼資料:控制台參數分組配置 ===
Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:
      - Parameters:
          - ZoneId
          - VpcCidrBlock
          - VSwitchCidrBlock
        Label:
          default:
            zh-cn: 基礎網路設定
            en: Network Configuration
      - Parameters:
          - PayType
          - PayPeriodUnit
          - PayPeriod
        Label:
          default:
            zh-cn: 付費類型
            en: Billing Configuration
      - Parameters:
          - EcsInstanceType
          - SystemDiskCategory
          - SystemDiskSize
          - DataDiskCategory
          - DataDiskSize
          - InstancePassword
        Label:
          default:
            zh-cn: ECS執行個體配置
            en: ECS Instance Configuration
      - Parameters:
          - LoadBalancerSpec
          - Bandwidth
        Label:
          default:
            zh-cn: 負載平衡配置
            en: CLB Configuration

本模板使用的 ROS 內建函數速查

函數

文法樣本

本模板中的用途

詳細說明

Ref

Ref: MyVpc

引用參數值或資源主標識符

引用 Parameter 返回參數值;引用 Resource 返回其主標識符

Fn::GetAtt

Fn::GetAtt: [EcsInstanceGroup, InstanceIds]

擷取 ECS 執行個體組的執行個體 ID 列表

擷取資源建立後的輸出屬性(非主標識符)

Fn::Sub

Fn::Sub: slb-${ALIYUN::StackName}

拼接 CLB 名稱

模板字串中用 ${Var} 引用變數

Fn::Not + Fn::Equals

Fn::Not: Fn::Equals: [${PayType}, PostPaid]

條件判斷:付費參數的條件顯示

邏輯取反 + 相等比較,用於 Visible 條件

部署環節

部署參數

必需輸入參數(部署時需填寫)

參數名

類型

說明

約束

ZoneId

String

可用性區域 ID

控制台動態選擇

EcsInstanceType

String

ECS 執行個體規格

根據可用性區域+付費類型自動過濾

SystemDiskCategory

String

系統硬碟類型

根據可用性區域+規格自動過濾

DataDiskCategory

String

資料盤類型

根據可用性區域+規格自動過濾

LoadBalancerSpec

String

CLB 執行個體規格

根據可用性區域自動過濾

可選配置參數(有預設值,可不填)

參數名

預設值

說明

VpcCidrBlock

192.168.0.0/16

VPC 網段位址範圍

VSwitchCidrBlock

192.168.0.0/24

交換器子網網段

PayType

PostPaid

付費類型(按量/訂用帳戶)

PayPeriodUnit

Month

購買時間長度單位(僅 PrePaid 時顯示)

PayPeriod

1

購買時間長度(僅 PrePaid 時顯示)

SystemDiskSize

40

系統硬碟大小(GB),範圍 40~500

DataDiskSize

100

資料盤大小(GB),範圍 20~32768

Bandwidth

10

EIP 頻寬上限(Mbps),範圍 1~1000

InstancePassword

—

ECS 執行個體登入密碼,長度 8-30,需含大小寫+數字+特殊字元中至少三種

部署方式

方式一:通過 ROS 控制台部署

  1. 登入Resource Orchestration Service控制台。

  2. 在左側導覽列選擇資源棧 > 建立資源棧。

  3. 選擇選擇已有模板 > 輸入模板,將完整模板粘貼到編輯器中。

  4. 單擊下一步,按參數分組填寫各項配置參數。

  5. 確認配置後單擊建立,等待資源棧狀態變為 CREATE_COMPLETE。

方式二:通過 ROS IaC Code 部署

IaC Code 是面向雲基礎設施的 AI 基礎設施即代碼助手,通過自然語言提示詞產生、部署和管理基礎設施模板。架構設計面向多雲工作流程。以下為本方案的參考提示詞:

# Prompt
幫我部署一組ECS執行個體並掛載到CLB負載平衡器上,要求:
1.使用建立的VPC和VSwitch
2.建立2台ECS執行個體,通過CommandContent安裝並啟動Nginx
3.使用WaitCondition等待Nginx安裝完成後再掛載到CLB
4.CLB配置TCP 80連接埠監聽和健全狀態檢查
5.建立EIP綁定到CLB,對外提供HTTP訪問
6.安全性群組開放入方向80連接埠
7.ECS配置100GB資料盤並在CommandContent中自動分區掛載
8.ZoneId、EcsInstanceType、SystemDiskCategory、DataDiskCategory、LoadBalancerSpec都使用AssociationProperty配置成控制台動態篩選
9.付費類型支援按量和訂用帳戶切換,訂用帳戶參數使用條件顯示

常見問題

Q1:CLB 健全狀態檢查一直失敗,後端 ECS 顯示異常

原因:ECS 上的 Nginx 服務未正常啟動,或安全性群組未開放 80 連接埠。

排查步驟:

  1. 登入 ECS執行 systemctl status nginx 確認 Nginx 正在運行。

  2. 確認安全性群組入站規則已開放 80 連接埠(PortRange: 80/80)。

  3. 檢查 CLB 健全狀態檢查配置的 Port 是否與 Nginx 監聽連接埠一致。

  4. 適當增大 HealthyThreshold(健康閾值)和 Interval(檢查間隔)。

Q2:如何調整後端伺服器的流量分配比例?

方案:修改 SlbBackendServerAttachment 的 BackendServerWeightList:

BackendServerWeightList:
  - 100  # 第1台ECS:接收約67%流量
  - 50   # 第2台ECS:接收約33%流量

權重比為 100:50,即第 1 台處理約 2/3 的請求。如果需要某台 ECS 暫停服務(灰階下線),將其權重設為 0 即可。

Q3:如何將 ECS::RunCommand 中的 Nginx 部署指令碼替換為自訂應用?

方案:修改 CommandContent 指令碼中"安裝並啟動"部分,保留資料盤初始化邏輯:

CommandContent:
  Fn::Sub:
    - |
      #!/bin/bash
      # ... 資料盤初始化代碼(保持不變)...

      # === 替換為你的應用部署指令碼 ===
      # 例如:部署Java SpringBoot應用
      yum install -y java-11-openjdk
      wget -P /disk1 https://your-oss-bucket.oss-cn-hangzhou.aliyuncs.com/app.jar
      nohup java -jar /disk1/app.jar --server.port=80

Q4:如何將 CLB 替換為 ALB(應用型負載平衡)?

改造要點:

  1. 將 ALIYUN::SLB::LoadBalancer 替換為 ALIYUN::ALB::LoadBalancer。

  2. 使用 ALIYUN::ALB::ServerGroup 建立伺服器組並添加後端 ECS。

  3. 使用 ALIYUN::ALB::Listener + ALIYUN::ALB::Rule 配置七層 HTTP/HTTPS 路由。

  4. ALB 原生支援公網,無需額外綁定 EIP。

Q5:如何使用已有 VPC 而非建立?

方案:將 VPC 和 VSwitch 從 Resources 中移除,改為Parameters傳入:

Parameters:
  ExistingVpcId:
    Type: String
    Label:
      zh-cn: 已有VPC ID
    AssociationProperty: ALIYUN::ECS::VPC::VPCId
  ExistingVSwitchId:
    Type: String
    Label:
      zh-cn: 已有交換器ID
    AssociationProperty: ALIYUN::VPC::VSwitch::VSwitchId
    AssociationPropertyMetadata:
      VpcId: ${ExistingVpcId}

瞭解更多資源部署問題,可以查詢常見問題合集。