開發與維運

從原子操作走向模板部署,詳解雲上資源自動化部署新模式

5 月 29 日,阿里雲開發者大會的《應用開發的基礎設施雲上優化》分論壇上,阿里雲技術專家王斌鑫發表了主題為《雲上資源自動化部署新模式》的分享,詳細闡述了雲上資源自動化部署新模式——基於資源編排、Terraform託管、ROS CDK的自動化部署最佳實踐。

本文為根據王斌鑫的演講整理成文。

image.png

當前雲上資源部署模式

雲上資源傳統部署模式的挑戰

image.png

大部分用戶一般是通過控制檯/API/SDK 等傳統模式進行雲上資源的部署,這種部署模式會面臨規模、效率、規範和成本四個方面的挑戰:

  1. 規模上,隨著業務的發展需要管理的資源規模不斷上升,部署和管理種類繁多的資源帶來挑戰。
  2. 效率上,隨著規模上升,手動批量部署變得難以為繼。
  3. 規範上,如何確保對基礎設施的變更均符合組織管理規範。
  4. 成本上,手動部署的方式無法極致地利用雲上彈性能力,其成本仍有優化空間。

阿里雲自動化部署模式

資源編排服務(ROS)的核心價值

image.png

面對傳統部署模式的挑戰,我們在想是否能夠幫助客戶對雲上資源進行自動化部署?因此有了阿里雲資源編排服務(ROS),它基於基礎設施即代碼(IaC)的理念,讓開發者和管理員使用模版的方式,編排雲上的多種資源,進行自動化部署。

對比手動部署,使用資源編排服務 ROS 進行自動化部署會帶來如下好處:

效率提升,針對諸如 SAP 這樣複雜的解決方案能有效提升部署效率,也能夠幫助 MSP、ISV、onECS 服務提升部署效率;

架構優化,ROS 提供了種類豐富的阿里雲最佳實踐模板,用戶無需豐富的架構經驗即可部署解決方案級別的架構;

流程管控,由 IT 管理員統一管理基礎設施以避免各類風險,且可基於模板進行審核再進一步結合 CI/CD 以規範化 IT 管理流程;

節省成本,自動化部署方式可以按需部署和釋放資源,從而極致地使用雲上彈性能力來降低成本。

ROS 的使用流程和核心功能

image.png

使用 ROS 進行自動化部署的過程非常簡單:

  1. 按照 ROS 模板語法編寫模板,定義想要創建的各類雲上資源。
  2. 在 ROS 控制檯 使用模板創建資源棧,以執行部署。其中,資源棧是一組資源的集合,這些資源均是模板中定義的資源。
  3. 在 ROS 控制檯查看資源棧,可以查看棧中各種資源的創建情況,並可以跳轉到對應資源的控制檯。

值得一提的是,ROS 服務本身完全免費,集成了身份認證和安全審計的功能,資源創建結果是可視化的,且能夠進行多賬號跨地域地部署,支持資源棧和實際資源的差異檢測並進行修正。

除了直接使用 ROS 模板來做自動化部署,是否還有別的方式呢?

新模式一:Terraform 託管

Terraform 是什麼

image.png

Terraform 同 ROS 一樣,也是基於基礎設施即代碼(IaC)的理念的自動化編排工具。它使用一種特定的配置語言(HCL, Hashicorp Configuration Language)來描述基礎設施資源,語法樣例如上圖所示。

Terraform & ROS

image.png

既然 Terraform 和 ROS 都是基於相同的理念的自動化編排工具,那它們的目標也是一致的,都是為用戶打造良好的雲上部署體驗。

兩者有很多相同之處,比方說 Terraform 的配置文件相當於 ROS 的模板,Terraform 的狀態相當於 ROS 的資源棧,Terraform 的 CLI 程序則相當於 ROS 的編排引擎。

兩者也各有優勢,Terraform 的語法更簡潔,對多雲支持地很完善;而 ROS 則提供免費的服務託管,且有云原生的鑑權和審計能力。

那麼是否能夠將兩者的優勢結合呢?因此就有了 Terraform 託管能力。

Terraform 託管

image.png

用戶直接在本地使用 Terraform 時,需要根據當前的操作系統下載對應的 Terraform CLI,編寫模板,管理所使用的各類 Provider 的版本,且要管理狀態等文件。

而使用 Terraform 託管功能時,只需在 ROS 的控制檯編寫 Terraform 模板便可直接部署,後續則通過資源棧來管理模板中定義的資源。底層的各類管理都交給 ROS。

image.png

在使用原理上,ROS 控制檯會將 Terraform 模板組合成符合 ROS 語法規範的模板,ROS 服務端會其進行語法校驗,生成租戶信息,調度到 ROS 的 Terraform 服務進行資源的部署。

定時與多雲場景實踐

image.png

我們可以在很多場景中使用 Terraform 託管的功能。

場景一:定時部署資源

假設我們需要通過 Terraform 定時部署資源,傳統方式下需要本地創建定時任務,執行 Terraform CLI 來做。而在雲上,我們可以:

  • 事先編寫一個 Terraform 模板,聲明想要部署的雲資源;
  • 事先編寫一個 OOS 運維模板來聲明由它調用 ROS 進行資源部署;
  • 在 OOS 中設置為定時執行,OOS 會定時觸發 ROS,ROS 則會使用 Terraform 託管功能進行資源部署。

場景二:多雲管理

如果我們既想要對多種雲平臺(如阿里雲、AWS 等)的資源進行部署,又想有可視化的結果反饋,可以直接編寫 Terraform 的模板來聲明各個雲上資源,並使用 ROS 的 Terraform 託管功能來進行部署。

Terraofrm 託管總結

image.png

Terraform 託管功能能讓用戶在雲上直接使用 Terraform,和直接使用 ROS 模板部署有一致的控制檯體驗,且兼容了 ROS 原生的 API,同時兼備了統一的身份認證和權限控制。相比於本地使用 Terraform,不再需要管理多種 Provider 和多個 Terraform CLI 版本。

新模式二:ROS CDK

現有資源定義方式的不足

image.png

事實上,通過直接編寫 ROS 模板,或者通過可視化編輯器生成模板,然後進行資源部署的方式是能夠大大提升資源的部署效率的,但是也有一些不足之處:

  • 缺少對過程式的支持
  • 複雜場景的編寫效率較低
  • 對程序的友好性較低
  • 動態性支持較差

針對這些問題,是否可以更進一步,在模板之上解決這些不足呢?

ROS CDK 是什麼

image.png

ROS CDK 是資源編排(ROS)提供的一種命令行工具和多語言 SDK,利用面向對象的高級抽象模式對雲資源進行標準定義,從而快速構建雲資源。

ROS CDK 以應用作為資源管理的入口,一個應用管理多個資源棧,而每個資源棧中則可以有多個構件。構件可以理解為雲上資源的組件,能包含一個或多個資源。

我們可以選擇自己熟悉的編程語言(TypeScript/JavaScript/Java/Python/C#)編寫應用代碼聲明想要部署的資源,ROS CDK 會將項目代碼轉換成 ROS 模板,然後使用該模板進行自動化部署。

使用步驟和項目生命週期

image.png

ROS CDK 的使用步驟也很簡單:

  1. 首先,就是初始化項目,配置阿里雲的訪問憑證(AccessKey)
  2. 其次,就是編寫資源代碼和測試用例進行本地測試
  3. 最後,通過 CDK CLI 或者直接程序進行資源部署,並管理資源棧

在進行部署的階段,CDK 會根據用戶編寫的資源代碼進行構造,實例化出各種資源對象;然後在準備階段做終態前的調整(通常由框架自動完成);進而驗證各種資源屬性,確保能夠正確部署;最終合成出一個 ROS 模板,並使用該模板部署為資源棧。

代碼、模板示例

image.png

上圖中,左邊是 ROS CDK 的資源代碼,其中聲明瞭一個 VPC,並使用循環動態生成 3 個 VSwitch。而右邊則是由 ROS CDK 生成的 ROS 模板。由此可以看出針對動態生成的場景,ROS CDK 可以大大簡化模板編寫的複雜度。

應用程序集成 CDK 實現持續部署場景

image.png

假設我們需要實現一個 CI/CD 系統,能夠部署這樣的資源架構:使用 API 網關中提供 API,使用函數計算的函數提供業務邏輯,要分別部署測試、預發、線上環境的資源,並且支持從測試發佈到預發,從預發部署到線上。

針對這樣的資源架構,在直接使用 ROS 模板的方式中,需要分別為三個環境準備三個模板,而環境間的部署則還需要動態拼接模板,對應用程序來說並不友好。這裡就建議使用 ROS CDK,這樣應用程序可以根據環境的不同指定對應的變量,生產對應的資源,從而滿足環境的動態性部署。

ROS CDK 總結

image.png

相較於直接使用 ROS 模板部署,使用 ROS CDK 允許開發者選擇自己熟悉的編程語言,並能藉助其動態特性來實現複雜的編排效果。ROS CDK 能夠非常容易地集成到應用程序中,從而能夠方便地在程序中進行資源部署。

總結

image.png

企業上雲規模逐漸增大,企業雲上資源的部署方式從人工開始走向自動,從單雲走向多雲,從原子操作走向模板部署。隨著基礎設施即代碼的理念而興起,資源的部署模式也因場景的不同而不同,總體來說有以下四個部署模式的建議:

  1. 作為入門級用戶,只需管理有限幾個資源,直接使用控制檯的方式是最為簡單直觀的;
  2. 作為企業 IT 管理員,需管理規模較大的雲上資源,使用 ROS 模板管理基礎設施會是最有效率的選擇;
  3. 作為運維研發人員,需要在業務系統中實現資源部署邏輯,那麼 ROS CDK 會是最佳選擇;
  4. 作為多雲管理員,需可視化管理阿里雲、AWS、Azure 等多種雲的資源,使用 ROS Terraform 託管功能是不二之選。

Leave a Reply

Your email address will not be published. Required fields are marked *