5 月 29 日,阿里雲開發者大會的《應用開發的基礎設施雲上優化》分論壇上,阿里雲技術專家王斌鑫發表了主題為《雲上資源自動化部署新模式》的分享,詳細闡述了雲上資源自動化部署新模式——基於資源編排、Terraform託管、ROS CDK的自動化部署最佳實踐。
本文為根據王斌鑫的演講整理成文。
當前雲上資源部署模式
雲上資源傳統部署模式的挑戰
大部分用戶一般是通過控制檯/API/SDK 等傳統模式進行雲上資源的部署,這種部署模式會面臨規模、效率、規範和成本四個方面的挑戰:
- 規模上,隨著業務的發展需要管理的資源規模不斷上升,部署和管理種類繁多的資源帶來挑戰。
- 效率上,隨著規模上升,手動批量部署變得難以為繼。
- 規範上,如何確保對基礎設施的變更均符合組織管理規範。
- 成本上,手動部署的方式無法極致地利用雲上彈性能力,其成本仍有優化空間。
阿里雲自動化部署模式
資源編排服務(ROS)的核心價值
面對傳統部署模式的挑戰,我們在想是否能夠幫助客戶對雲上資源進行自動化部署?因此有了阿里雲資源編排服務(ROS),它基於基礎設施即代碼(IaC)的理念,讓開發者和管理員使用模版的方式,編排雲上的多種資源,進行自動化部署。
對比手動部署,使用資源編排服務 ROS 進行自動化部署會帶來如下好處:
效率提升,針對諸如 SAP 這樣複雜的解決方案能有效提升部署效率,也能夠幫助 MSP、ISV、onECS 服務提升部署效率;
架構優化,ROS 提供了種類豐富的阿里雲最佳實踐模板,用戶無需豐富的架構經驗即可部署解決方案級別的架構;
流程管控,由 IT 管理員統一管理基礎設施以避免各類風險,且可基於模板進行審核再進一步結合 CI/CD 以規範化 IT 管理流程;
節省成本,自動化部署方式可以按需部署和釋放資源,從而極致地使用雲上彈性能力來降低成本。
ROS 的使用流程和核心功能
使用 ROS 進行自動化部署的過程非常簡單:
- 按照 ROS 模板語法編寫模板,定義想要創建的各類雲上資源。
- 在 ROS 控制檯 使用模板創建資源棧,以執行部署。其中,資源棧是一組資源的集合,這些資源均是模板中定義的資源。
- 在 ROS 控制檯查看資源棧,可以查看棧中各種資源的創建情況,並可以跳轉到對應資源的控制檯。
值得一提的是,ROS 服務本身完全免費,集成了身份認證和安全審計的功能,資源創建結果是可視化的,且能夠進行多賬號跨地域地部署,支持資源棧和實際資源的差異檢測並進行修正。
除了直接使用 ROS 模板來做自動化部署,是否還有別的方式呢?
新模式一:Terraform 託管
Terraform 是什麼
Terraform 同 ROS 一樣,也是基於基礎設施即代碼(IaC)的理念的自動化編排工具。它使用一種特定的配置語言(HCL, Hashicorp Configuration Language)來描述基礎設施資源,語法樣例如上圖所示。
Terraform & ROS
既然 Terraform 和 ROS 都是基於相同的理念的自動化編排工具,那它們的目標也是一致的,都是為用戶打造良好的雲上部署體驗。
兩者有很多相同之處,比方說 Terraform 的配置文件相當於 ROS 的模板,Terraform 的狀態相當於 ROS 的資源棧,Terraform 的 CLI 程序則相當於 ROS 的編排引擎。
兩者也各有優勢,Terraform 的語法更簡潔,對多雲支持地很完善;而 ROS 則提供免費的服務託管,且有云原生的鑑權和審計能力。
那麼是否能夠將兩者的優勢結合呢?因此就有了 Terraform 託管能力。
Terraform 託管
用戶直接在本地使用 Terraform 時,需要根據當前的操作系統下載對應的 Terraform CLI,編寫模板,管理所使用的各類 Provider 的版本,且要管理狀態等文件。
而使用 Terraform 託管功能時,只需在 ROS 的控制檯編寫 Terraform 模板便可直接部署,後續則通過資源棧來管理模板中定義的資源。底層的各類管理都交給 ROS。
在使用原理上,ROS 控制檯會將 Terraform 模板組合成符合 ROS 語法規範的模板,ROS 服務端會其進行語法校驗,生成租戶信息,調度到 ROS 的 Terraform 服務進行資源的部署。
定時與多雲場景實踐
我們可以在很多場景中使用 Terraform 託管的功能。
場景一:定時部署資源
假設我們需要通過 Terraform 定時部署資源,傳統方式下需要本地創建定時任務,執行 Terraform CLI 來做。而在雲上,我們可以:
- 事先編寫一個 Terraform 模板,聲明想要部署的雲資源;
- 事先編寫一個 OOS 運維模板來聲明由它調用 ROS 進行資源部署;
- 在 OOS 中設置為定時執行,OOS 會定時觸發 ROS,ROS 則會使用 Terraform 託管功能進行資源部署。
場景二:多雲管理
如果我們既想要對多種雲平臺(如阿里雲、AWS 等)的資源進行部署,又想有可視化的結果反饋,可以直接編寫 Terraform 的模板來聲明各個雲上資源,並使用 ROS 的 Terraform 託管功能來進行部署。
Terraofrm 託管總結
Terraform 託管功能能讓用戶在雲上直接使用 Terraform,和直接使用 ROS 模板部署有一致的控制檯體驗,且兼容了 ROS 原生的 API,同時兼備了統一的身份認證和權限控制。相比於本地使用 Terraform,不再需要管理多種 Provider 和多個 Terraform CLI 版本。
新模式二:ROS CDK
現有資源定義方式的不足
事實上,通過直接編寫 ROS 模板,或者通過可視化編輯器生成模板,然後進行資源部署的方式是能夠大大提升資源的部署效率的,但是也有一些不足之處:
- 缺少對過程式的支持
- 複雜場景的編寫效率較低
- 對程序的友好性較低
- 動態性支持較差
針對這些問題,是否可以更進一步,在模板之上解決這些不足呢?
ROS CDK 是什麼
ROS CDK 是資源編排(ROS)提供的一種命令行工具和多語言 SDK,利用面向對象的高級抽象模式對雲資源進行標準定義,從而快速構建雲資源。
ROS CDK 以應用作為資源管理的入口,一個應用管理多個資源棧,而每個資源棧中則可以有多個構件。構件可以理解為雲上資源的組件,能包含一個或多個資源。
我們可以選擇自己熟悉的編程語言(TypeScript/JavaScript/Java/Python/C#)編寫應用代碼聲明想要部署的資源,ROS CDK 會將項目代碼轉換成 ROS 模板,然後使用該模板進行自動化部署。
使用步驟和項目生命週期
ROS CDK 的使用步驟也很簡單:
- 首先,就是初始化項目,配置阿里雲的訪問憑證(AccessKey)
- 其次,就是編寫資源代碼和測試用例進行本地測試
- 最後,通過 CDK CLI 或者直接程序進行資源部署,並管理資源棧
在進行部署的階段,CDK 會根據用戶編寫的資源代碼進行構造,實例化出各種資源對象;然後在準備階段做終態前的調整(通常由框架自動完成);進而驗證各種資源屬性,確保能夠正確部署;最終合成出一個 ROS 模板,並使用該模板部署為資源棧。
代碼、模板示例
上圖中,左邊是 ROS CDK 的資源代碼,其中聲明瞭一個 VPC,並使用循環動態生成 3 個 VSwitch。而右邊則是由 ROS CDK 生成的 ROS 模板。由此可以看出針對動態生成的場景,ROS CDK 可以大大簡化模板編寫的複雜度。
應用程序集成 CDK 實現持續部署場景
假設我們需要實現一個 CI/CD 系統,能夠部署這樣的資源架構:使用 API 網關中提供 API,使用函數計算的函數提供業務邏輯,要分別部署測試、預發、線上環境的資源,並且支持從測試發佈到預發,從預發部署到線上。
針對這樣的資源架構,在直接使用 ROS 模板的方式中,需要分別為三個環境準備三個模板,而環境間的部署則還需要動態拼接模板,對應用程序來說並不友好。這裡就建議使用 ROS CDK,這樣應用程序可以根據環境的不同指定對應的變量,生產對應的資源,從而滿足環境的動態性部署。
ROS CDK 總結
相較於直接使用 ROS 模板部署,使用 ROS CDK 允許開發者選擇自己熟悉的編程語言,並能藉助其動態特性來實現複雜的編排效果。ROS CDK 能夠非常容易地集成到應用程序中,從而能夠方便地在程序中進行資源部署。
總結
企業上雲規模逐漸增大,企業雲上資源的部署方式從人工開始走向自動,從單雲走向多雲,從原子操作走向模板部署。隨著基礎設施即代碼的理念而興起,資源的部署模式也因場景的不同而不同,總體來說有以下四個部署模式的建議:
- 作為入門級用戶,只需管理有限幾個資源,直接使用控制檯的方式是最為簡單直觀的;
- 作為企業 IT 管理員,需管理規模較大的雲上資源,使用 ROS 模板管理基礎設施會是最有效率的選擇;
- 作為運維研發人員,需要在業務系統中實現資源部署邏輯,那麼 ROS CDK 會是最佳選擇;
- 作為多雲管理員,需可視化管理阿里雲、AWS、Azure 等多種雲的資源,使用 ROS Terraform 託管功能是不二之選。