全部產品
Search
文件中心

Auto Scaling:應用發布

更新時間:Jan 24, 2026

當需要在伸縮組中的ECS執行個體上持續部署業務應用(Continuous Deployment)時,可以使用Auto Scaling整合的應用發布功能。它能協助您自動化發布應用,並結合Auto Scaling生命週期掛鈎實現應用的自動發布和優雅下線。

概述

Auto Scaling(ESS)的應用發布功能將應用源檔案和啟動/停止指令碼封裝為部署物,並通過標準化的發布流程將其部署到伸縮組執行個體中。

支援的部署物類型

根據應用源檔案的儲存位置,可以選擇不同的部署物類型:

類型

說明

適用情境

OSS檔案

應用檔案(如JAR/ZIP包)儲存在OSS中。發布時自動下載並執行指令碼。

傳統應用部署,如Java應用。

ECS鏡像

應用預裝在ECS鏡像中。發布時直接替換執行個體系統硬碟。

需要快速啟動或環境複雜的應用。

Docker鏡像

應用鏡像儲存在Container RegistryACR中。發布時自動拉取並啟動容器。

容器化應用部署。

僅執行命令

不指定源檔案,僅執行Shell指令碼。

靈活的指令碼化部署,或使用第三方源。

發布能力

  • 發布模式:支援全量發布(所有執行個體)和灰階發布(手動選擇部分執行個體驗證)。

  • 分批控制:支援設定發布批次,並可配置批次間暫停,降低發布風險。

  • 彈性整合

    • 擴容自動發布:新擴容的執行個體會自動部署最新版本的應用,確保版本一致性。

    • 縮容優雅下線:縮容前先執行停止指令碼,確保業務處理完畢後再釋放執行個體。

使用限制

  • 執行個體系統:僅支援 Linux 系統的 ECS 執行個體。

  • 指令碼語言:啟動和停止指令碼僅支援 Shell 指令碼。

  • 部署流程:遵循先停後啟原則,每次部署都會先執行停止指令碼,確保上一次部署的應用版本被正常停止,再執行啟動指令碼。

  • 資料風險:使用ECS鏡像類型部署時,會替換執行個體的系統硬碟,請務必提前備份重要資料。

建立部署物

  1. 登入Auto Scaling控制台

  2. 在左側導覽列中,單擊伸縮組管理
  3. 在頂部功能表列處,選擇地區。
  4. 單擊伸縮組ID進入伸縮組詳情頁,單擊應用發布 > 部署物 > 建立部署物

  5. 根據應用情境選擇合適的部署物類型進行配置。

    OSS檔案

    適用於將應用程式套件(如 JAR、WAR、ZIP)儲存在 OSS 的情境。發布時,系統會自動下載檔案到指定工作目錄,然後先執行應用停止指令碼停止上一版本的應用(如有),再執行應用啟動指令碼啟動當前應用。

    • 配置項

      • OSS資訊:選擇OSS地區OSS Bucket,並在OSS檔案配置項填寫檔案在Bucket中的路徑(如 apps/sample-spring-1.0-SNAPSHOT.jar)。

      • 內網下載:如果 ECS 執行個體與OSS在同一地區,建議開啟此選項以提升下載速度。

    • 啟動/停止指令碼樣本

      應用啟動指令碼

      start_application() {
        set -e
        yum install -y maven-3.5.4
        java -jar ./sample-spring-1.0-SNAPSHOT.jar &
      }
      
      start_application

      應用停止指令碼

      重要

      如不需要停止應用相關操作,可將停止指令碼置空,部署時會跳過。

      ### Stop the application (if any)
      stop_application() {
        PID=$(ps -ef | grep "sample-spring-1.0-SNAPSHOT.jar" | grep -v "grep" | awk '{print $2}')
        if [ -n "$PID" ]; then
          kill -9 $PID
        fi
      }
      
      stop_application

    ECS鏡像

    適用於應用環境複雜或啟動時間要求極高的情境。發布時,系統會將伸縮組內執行個體的系統硬碟替換為指定的鏡像。

    選擇ECS鏡像部署物時,需單擊新增按鈕後,選擇伸縮組所在地區下的鏡像。

    • 配置項

      • 地區:選擇與伸縮組相同的地區。

      • 鏡像ID:選擇與伸縮組所在地區一致的自訂鏡像(包含已部署好的應用)。

    重要

    ECS鏡像部署物不支援配置應用啟動/停止指令碼,如需應用自動啟動,請配置應用的開機自啟動手動設定生命週期掛鈎實現。

    Docker鏡像

    適用於容器化應用。發布時,系統會自動從 ACR 拉取鏡像,然後先執行應用停止指令碼停止上一版本的容器(如有),再執行應用啟動指令碼啟動當前容器。

    重要

    僅支援選擇Container RegistryACR企業版中的Docker鏡像,對於個人版ACR或第三方鏡像倉庫,通過僅執行命令部署物進行部署。

    • 配置項

      • Docker鏡像資訊:設定Container Registry地區Container Registry執行個體ID命名空間倉庫名稱鏡像版本等資訊。

      • 內網拉取:如果要使用內網連結拉取鏡像,請確保您的鏡像倉庫和ECS執行個體在同一個VPC內,具體請參考配置專用網路的存取控制

    • 啟動/停止指令碼

      應用啟動指令碼

      重要
      • 請確保待發布機器上已安裝Docker。

      • 發布時,Docker鏡像會在指令碼執行前被自動拉取到ECS執行個體上,指令碼中無需做拉取鏡像相關操作。

      ### 發布時,Docker鏡像會被自動拉取到ECS上,可直接進行容器啟動操作。
      ### 啟動目前的版本的容器
      ### 使用時,需將<image_name>替換為實際鏡像地址
      start_application() {
        image_name="<image_name>"
        container_name="my-container"
        docker run -d -p 8080:8080 --name ${container_name} ${image_name}
      }
      
      start_application

      應用停止指令碼

      重要

      如果不需要停止應用相關操作,可將停止指令碼置空,部署時會跳過。

      stop_application() {
        # 通過容器名查詢容器是否存在,如存在則刪除容器
        container_name="my-container"
        container_id=$(docker ps -aq -f name=${container_name}) 
        if [ -n "$container_id" ]; then
          docker rm -f $container_id
        fi
      }
      
      stop_application

    僅執行命令

    適用於無需特定源檔案,僅通過 Shell 指令碼進行部署的情境(如從第三方源下載代碼)。發布時,系統會先執行應用停止指令碼停止上一版本的應用(如有),再執行應用啟動指令碼啟動當前應用。

    • 配置項:無需配置部署物源,僅需指定工作目錄

    • 啟動/停止指令碼樣本(以拉取公用鏡像為例):

      應用啟動指令碼

      ### 啟動目前的版本的應用           
      start_application() {
         repo="<repo>"
         image="<image>"
         container_name="my-container"
         docker login --username=${username} --password=${password} $repo
         docker pull $image
         docker run -d -p 8080:8080 --name $container_name $image
      }
      
      start_application

      應用停止指令碼

      重要

      如果不需要停止應用相關操作,可將停止指令碼置空,部署時會跳過。

      ### 停止容器(如果有)
      ### Stop the container (if any)
      
      stop_application() {
        # 通過容器名查詢容器是否存在,如存在則刪除容器
        # Query whether the container exists by the container name, and delete the container if it exists
        container_name="my-container"
        container_id=$(docker ps -aq -f name=${container_name}) 
        if [ -n "$container_id" ]; then
          docker rm -f $container_id
        fi
      }
      
      stop_application
  6. 完成配置後,單擊建立並發布僅建立

    單擊建立並發布後,會繼續進入部署物發布配置。

部署物發布

  1. 應用發布頁簽下,選擇部署物發布 > 發布

  2. 選擇要發布的部署物ID

  3. 配置發布策略:

    • 發布模式

      • 全量發布:發布到組內所有執行個體。

      • 灰階發布:手動選擇特定執行個體,進行發布。

    • 分批策略:設定執行批次(如分2批),並選擇分批模式(不暫停/第一批暫停/每批暫停)。

    • 彈性情境:建議保持預設開啟擴容時自動發布縮容時優雅下線

      • 擴容時自動發布:開啟後,在擴容出的ECS機器上將自動發布應用。在發布過程中,會自動設定一個擴容的生命週期掛鈎

      • 縮容時優雅下線:開啟後,在縮容的ECS機器上執行部署物應用停止指令碼後再完成縮容。在發布過程中,會自動設定一個縮容的生命週期掛鈎

  4. 單擊確定開始發布。可在列表中單擊詳細查看執行狀態和輸出日誌。

應用於生產環境

為了保障生產環境的穩定性,建議遵循以下最佳實務:

  • 降低發布風險

    • 優先使用灰階發布在少量執行個體上驗證新版本。

    • 全量發布時,建議開啟分批發布並選擇第一批暫停。待第一批執行個體發布成功並驗證無誤後,再繼續後續批次。

  • 保障商務持續性:可開啟縮容時優雅下線,並在部署物中編寫完善的停止指令碼(如等待請求處理完畢、關閉串連),避免縮容導致業務中斷。

  • 確保版本一致性:可開啟擴容時自動發布,防止伸縮組自動擴容出的新執行個體運行舊版本應用。

常見問題

  • 應用發布功能支援 Windows 執行個體嗎?

    不支援。目前僅支援 Linux 系統的 ECS 執行個體。

  • 發布過程中,伸縮組還會觸發擴縮容嗎?

    會。應用發布過程不會阻斷伸縮活動。

  • 如何查看應用發布的日誌和結果?

    發布任務開始後,您可以在部署物發布列表中點擊執行ID,查看每台執行個體的執行狀態和詳細的指令碼輸出日誌。

  • 如果部署失敗了,會對現有執行個體有什麼影響?

    如果指令碼執行失敗,該執行個體的發布狀態會顯示為失敗。對於分批發布且開啟了每批暫停第一批暫停的情境,後續批次將不會繼續執行,從而控制影響範圍。建議在發布前先通過灰階發布在少量執行個體上驗證。

  • 應用啟動/停止指令碼的執行目錄在哪裡?

    指令碼會在建立部署物時指定的工作目錄執行。