在雲端擁抱以應用程式為中心的基礎架構 1

在雲端運算的世界中,管理基礎架構和應用程式往往是兩種哲學的結合。一方面,我們有像 AWS CloudFormation 這樣的工具,它源於工程思維,專注於確定性和一致性。CloudFormation 擅長將基礎架構定義為程式碼,確保可預測的部署和自動化復原。另一方面,Kubernetes 源於營運領域,強調在動態的容器化應用程式中進行臨機操作和緩解措施。雖然 Kubernetes 在容器編排方面無與倫比,但傳統上缺乏 CloudFormation 那樣廣泛的基礎架構管理能力。

這種分歧導致了工具鏈的蔓延、不一致和營運複雜性。然而,隨著「應用程式」的定義演變為包含更廣泛的緊密耦合資源,一種新的範式正在興起:以應用程式為中心的基礎架構。這種方法由 AWS Cloud Development Kit (CDK) 等工具實現,旨在統一基礎架構和執行階段管理,為雲端部署帶來一致性、可管理性和領域驅動的視角。

CloudFormation 與 Kubernetes:實踐中的兩種哲學

要理解向以應用程式為中心的基礎架構的轉變,必須先了解 CloudFormation 和 Kubernetes 之間的基本差異:

CloudFormation:工程確定性與自動化復原

Kubernetes:營運彈性與韌性

這些截然不同的方法反映了它們的起源和主要使用案例:CloudFormation 用於基礎架構,而 Kubernetes 用於應用程式執行階段管理。

現代「應用程式」:作為有界上下文的垂直切片

「傳統上,雲端中的『應用程式』可能被視為由 Kubernetes 編排的一組容器。然而,現代應用程式是商業功能的垂直切片,通常包含:

將「應用程式」狹隘地定義為僅限容器,會忽略其領域驅動的範圍而變得受限。更準確且有用的定義是將所有緊密耦合的邏輯資源視為一個有界上下文——一個自足的垂直切片,包含提供商業能力所需的所有資源,無論其在何處或屬於何種類型。

以應用程式為中心的基礎架構:領域驅動的方法

這種更廣泛的「應用程式」定義催生了以應用程式為中心的基礎架構設計。此範例將焦點從孤立地管理個別資源,轉移到圍繞邏輯應用程式邊界組織基礎架構。關鍵原則包括:

優點:

這種以應用程式為中心的方法與領域驅動設計 (DDD) 的哲學產生了深刻的共鳴。正如 DDD 圍繞有界上下文和領域邏輯組織軟體一樣,以應用程式為中心的基礎架構則圍繞邏輯應用程式領域組織雲端資源。這種一致性為基礎架構管理帶來了清晰度、一致性以及對商業價值的更強烈關注。

AWS CDK:統一基礎架構與執行階段管理

AWS Cloud Development Kit (CDK) 作為以應用程式為中心的基礎架構的強大推動者而出現。CDK 抽象化了傳統基礎架構即程式碼的複雜性,讓您可以使用熟悉的程式語言,在單一、統一的程式碼庫中定義基礎架構和執行階段編排。

透過使用 CDK,團隊可以擺脫分散的工具和混合方法,為其應用程式採用真正統一的堆疊定義。

部署工具的演進

雲端基礎架構管理的格局經歷了重大的演進,其驅動力來自現代應用程式日益增加的複雜性以及對更有效率和一致的部署策略的需求。最初,組織在分散的專業工具生態系統中摸索,導致營運開銷和不一致。下文追溯了雲端部署工具在三個不同階段的演進,最終以 AWS Cloud Development Kit (CDK) 為例的統一堆疊方法的出現為高潮。

階段 1:分散的工具 – 專業化和孤島的時代

在雲端採用的早期,組織通常依賴各種不同的專業工具,每種工具都處理雲端環境的特定方面。兩個突出的例子是 AWS CloudFormation 和 Kubernetes,它們各自源於不同的營運哲學:

結果:工具鏈蔓延和營運摩擦

這種分散的方法導致了幾個挑戰:

階段 2:混合方法 – 以複雜性彌合鴻溝

認識到分散工具的局限性,組織開始採用混合方法來彌合基礎架構和應用程式管理之間的鴻溝。一種常見的模式是結合:

混合方法的局限性:

雖然混合方法比完全分散的工具提供了改進,但它們也引入了新的複雜性:

階段 3:使用 CDK 的統一堆疊 – 基礎架構與執行階段的融合

目前的演進趨勢是指向統一堆疊的方法,其中基礎架構和執行階段管理融合到單一、有凝聚力的程式碼庫中。AWS Cloud Development Kit (CDK) 體現了此階段 3,提供了一個強大的框架,用於在單一、開發人員友好的環境中定義和管理整個應用程式堆疊,從基礎架構到執行階段編排。

AWS CDK:統一基礎架構與執行階段管理

AWS CDK 作為 AWS CloudFormation 之上的抽象層,但透過以下方式從根本上改變了開發體驗:

使用 CDK 的統一堆疊的優勢:

(註:以下似乎是特定的實作說明或連結)

https://github.com/ondemandenv/odmd-eks/.../simple-k8s-manifest.ts#L10

這個單一堆疊將管理 EKS 叢集內外所有資源的生命週期和相依性,使其成為一個包含其所有必要資源(基礎架構和執行階段元件)的自足「堆疊」。此堆疊成為應用程式環境的單一事實來源,反映了領域驅動設計 (DDD) 中的「有界上下文」概念。

AWS CloudFormation 將維護堆疊中所有資源之間的相依性,確保它們按順序部署和復原,以實現交易性。

這是真實的程式碼,透過如下所示的參數化進行了少量的編碼抽象:

//what branch I am on
const br = execSync('git rev-parse --abbrev-ref HEAD').toString().trim();
//configuration based on branch
const imgAndVer = StringParameter.valueForStringParameter(this, '/my-app/' + br );

您可以讓不同分支上的相同程式碼產生並部署到多個環境(具有分支指定的組態值的相同邏輯/功能清單),以便進行進一步的實驗、探索、測試或具有高度一致性的生產,透過分支進行程式碼比較以及單元測試,這將 GitOps 徹底淘汰!

以上是 https://ondemandenv.dev 的根本哲學,它支援更深一層的抽象:跨多個帳戶連接 VPC,以便每個帳戶都可以透過私有子網路使用動態值/權杖解析來部署 k8s 清單。