阿里雲 Web+ (Aliyun Cloud Web Plus) 使用筆記

Alibaba Cloud web+ 紀錄使用心得

專案命名原則

  • Web+ 應用架構
    同一個應用會共用上傳的部屬包版本
    也就是說如果你專案 TestProject 有分前後端 Web 與 API
    應該是要開兩個不同的應用 Web App 與 API App
    然後各自應用裡面去分不同的部屬環境 Prod 與 Staging
    • ABC-Web/Prod
    • ABC-Web/Staging
    • ABC-API/Prod
    • ABC-API/Staging
  • 部屬環境命名
    部屬環境名稱會被拿來當作實例名稱中的某一段字節
    假設你有兩個應用 TestProject-Web 與 TestProject-API
    分別有各自的兩個環境 Prod 與 Staging
    自動生成的實例名稱會長程以下這樣
    • ECS
      • ABC-Web/Prod => WebPlus-Prod 
      • ABC-API/Prod => WebPlus-Prod 
      • ABC-Web/Staging => WebPlus-Staging 
      • ABC-API/Staging => WebPlus-Staging
    • SLB
      • ABC-Web/Prod => WebPlus-slb-Prod 
      • ABC-API/Prod => WebPlus-slb-Prod 
      • ABC-Web/Staging => WebPlus-slb-Staging 
      • ABC-API/Staging => WebPlus-slb-Staging

這樣會導致很多地方的名稱都會長一樣
想像一下你有一百個應用,環境都有Prod與Staging
你就會看到一百個ESC都叫一樣的名字

目前傾向 應用名稱/環境名稱 都把專案名稱放進去

  • ABC-Web/ABC-Web-Prod
  • ABC-Web/ABC-Web-Staging
  • ABC-API/ABC-API-Prod
  • ABC-API/ABC-API-Staging

踩坑紀錄

  • RDS
    從WEB+配置介面內啟用RDS代購時選擇 標準 MSSQL 2019 高可用版 會建立失敗
    目前開工單得到的回應是,要自己去RDS產品頁面購買後,再來配置這邊選擇導入
  • SLB
    從WEB+控制台點擊SLB時,都會導到北京區域的SLB頁面,
    如果SLB其實不在北京區域,可能會產生找不到資源的問題,
    比如:綁定上海EIP時找不到已購買EIP,因為她是列出北京EIP
  • SLB 502
    配置 SLB 後可能會得到 502 Bad Gateway 錯誤,
    預設健康檢查會去訪問 Web 根目錄
    如果無法正確回傳 2xx 或 3xx 狀態
    SLB 會視為服務不可用,而得到 502
    解決辦法:到 SLB 設定 健康檢查網址 改到可以正常回傳 2xx 或 3xx 的 URL
  • 主機實例 公網IP
    此時,主機實例將能夠訪問公網也可以被公網訪問,請注意網絡安全。
    配置主機時預設會配一組外網 IP,如果不需要給外網呼叫,可以選擇關閉外網 IP
    But, 關閉外網 IP 同時也會無法訪問外網!
    所以如果應用不需要訪問外網,只需要提供內網IP給其他服務呼叫,才能關閉外部 IP
  • 新建環境失敗
    (失败原因为通过云助手安装Web+ Agent失败,
    系统等待超过1分钟仍然没有收到Agent的心跳,
    可能是由于通过云助手下发命令失败。)
    解決辦法:Web+ 控制台 右上角 重建
  • 安全組
    預設 22 Port 對外全開?
    解決辦法:到安全組移除 0.0.0.0,改為公司 IP
  • 日誌
    日誌檔案路徑設定一個以上時會無法蒐集日誌

專案設定

  • Dotnet Core
    目前版本最新只支援到 3.1
  • HTTPS Redirect
    SLB 往後拋時預設走 HTTP,強制轉 HTTPS 會連不到
    解決辦法:Startup.cs 中移除 app.UseHttpsRedirection
  • Port
    反向代理預設會將 80 Port 導到 5000 Port (dotnet core default port)
    更改 Web Application listen port 可能會造成連不到的情況
    解決辦法:移除 appsettings.json 中的 Kestrel.EndPoints.Http(s).Url
    改用 LaunchSettings.json 或 appsettings.Development.json 來指定 Port
  • 發布 目標執行階段
    因為 Runtime 環境是 linux,預設 目標執行階段 Portable 可能會啟動失敗
    解決辦法:發布時將目標執行階段,改成 linux-x64

備註

  • Web+ 預設硬碟 100G,用不到那摸多可以設到40G
  • Web+ 主機實例最小可以設到共享型 1 Core 0.5 G Ram
  • SLB 如果不想重建時 IP 跑掉,可以綁定 EIP
    但是 EIP 只能綁到沒有外網 IP 且為 專有網路 的 內網 SLB
    由 Web+ 代購的公網 SLB 是經典網路且已預分配公網 IP 無法再綁定 EIP
    結論:配置內網 SLB 後再綁定 EIP 來固定 IP 位置

缺點

  • 不太成熟的產品
    配置RDS代購有問題,連結SLB的地區也有問題,甚至新建環境還會失敗
  • 不太靈活
    配置外網SLB無法綁定EIP來固定IP,反而要藉由內網SLB才能達成,
    無法自動依照負載彈性伸縮ECS,一定要外網IP才能連外
  • 自家服務新版本整合不易
    無法搭配SLB新版ALB來使用,RDS 最新版 MSSQL 2019 無法代購只能導入
  • 工具支援度低
    Web+ 專用命令操作 Cli 不支援 Windows,VsCode的 Ali 擴充功能也不支援 Web+

結論

還有蠻多進步的空間

延伸閱讀

阿里雲 Web+ 使用 Cli 部署 DotnetCore 3.1 專案筆記

Drone 阿里雲 Web+ DotnetCore 3.1 CI/CD & DockerHub Images CI/CD

PS5