AWS 上的無伺服器或 Kubernetes

幫助您選擇

Amazon Web Services (AWS) 為客戶提供靈活性,以便客戶選擇符合其業務需求的現代化應用程式建置策略。客戶在 AWS 上制定建立現代化應用程式的策略時,通常採用兩種高階方法之一:使用 AWS Lambda 和容器的無伺服器 AWS 策略模型,或使用 AWS 上的 Kubernetes

AWS 旨在為您的工作負載提供合適的運算和支援服務 (如資料庫、傳訊和協同運作)。AWS 提供使用事件驅動運算服務 (如 AWS Lambda),以及無伺服器容器選項 (如 AWS FargateAWS App Runner) 來建立無伺服器應用程式的能力。 AWS 提供使用 Amazon Elastic Container Service (Amazon ECS) 和 Kubernetes 選項 (如 Amazon Elastic Kubernetes Service (Amazon EKS)、Red Hat OpenShift Service on AWS (ROSA),以及在 Amazon Elastic Compute Cloud (Amazon EC2) 上的自我管理 Kubernetes) 來建立容器應用程式的方法。

以下內容將有助於選擇最適合您環境的方法,並協助您開始在 AWS 上實作您的方法。

現代應用程式的優勢

使用模組化架構模式來建置,並充分利用受管服務營運模型。

建立更具環境永續性、可擴展和彈性的應用程式。

加速創新、降低風險,加快上市速度,以及減少總體擁有成本。

準備好利用明確定義的後續步驟,開始在雲端部署生產工作負載。

步驟 1:確定條件

現代應用程式採用模組化架構模式建置,可利用無伺服器營運模型來建置更具永續性、可擴展性,以及恢復能力更強的應用程式。微型服務可讓您加速創新、降低風險,加快上市速度,以及減少總體擁有成本。 在建置新的現代應用程式或將現有應用程式現代化時,有大量建置區塊可供架構師和開發人員使用,其中最重要的一項是選擇運算服務。AWS 旨在讓您能夠存取最適合其工作負載的運算服務,支援您為滿足需求而選擇的任何現代應用程式開發策略。

在決定應實作哪種現代應用程式開發策略前,您需要根據工作負載的大小確定標準。

  • 組織可以選擇使用雲端,透過標準化受管服務將營運負擔轉移至 AWS,以降低營運成本。較高層次的抽象化讓開發者和操作者得以專注於自己獨特的增值活動,而不用面對許多未加區分的任務。

    使用 AWS 無伺服器建置,利用更高層次的抽象化服務,將維護基礎設施的營運開銷轉移至 AWS。

    AWS 也為 Kubernetes 提供幾種受管產品。在組織中,這些服務在需要管理的技術層面上有所不同。AWS 還提供加速器,例如附加元件和 EKS 藍圖,以加速組態。

  • 許多 AWS 客戶選擇在獲廣泛支援的開放原始碼技術上標準化。開放原始碼有助於組織找到合適技能,並避免一些與鎖定相關的風險。在開放原始碼生態系統中做出錯誤選擇,可能會困於抽象概念和自製的整合中。此外,確保不同開放原始碼元件共同運作的責任通常由選擇使用它們的組織承擔。組織通常會花費過多時間維護來開放原始碼整合。

    備註:

    • 在進行這些投資時,考慮來自社群來源和企業或基金會的支援。對這些專案的投資,不僅是財務上的投入。您還需要投入資金進行培訓,並為您的團隊就選用的技術進行教育。 
    • 由於這些元件和相關整合通常需要更新,您可能還會產生一些技術債務 (為了維護這些整合所涉及的工作)。
    • 如需開放原始碼實作的觀點,請瀏覽 AWS 開放原始碼部落格
  • 選擇現代應用程式開發策略時,重要的是您的策略必須適應各種工作負載模式。您可以藉由了解工作負載模式,更輕鬆地選擇架構。例如,Web 應用程式、以 API 為基礎的微型服務、事件驅動應用程式、串流與傳訊、資料管道、IT 自動化等更多類型。某些工作負載在某種運算環境中的效能會更好,或者成本效益更高。

    使用 AWS 無伺服器架構建置時,像 App Runner 和 AWS Batch 這類服務專門用於迅速支援特定工作負載類型的需求。使用此方法的工作負載將更容易建置、效能更好或更具成本效益,儘管這樣做會降低靈活性。

    如果貴組織有此等要求,Kubernetes 可提供跨雲端和內部部署環境的一致性。

  • 工作負載並非孤立存在。工作負載由資料庫、傳訊、串流、協同運作和其他服務等技術所支援。有效的現代應用程式開發策略需要與這些服務整合。受管整合可簡化營運開銷,就像管理底層基礎設施一樣。

    AWS 無伺服器選項深度整合於 AWS 生態系統中。AWS Lambda 可以訂閱來自 200 多個其他服務的事件。例如,AWS Lambda 延伸可與監控、可觀測性、安全性和管控工具整合。Lambda 會在執行環境中調用特定函數,以為執行函式程式碼提供安全且隔離的執行期。 

    適用於 Kubernetes 的 AWS 受管產品提供與受管產品的整合。Kubernetes 本身擁有豐富的合作夥伴生態系統,可與眾多其他技術整合。

  • 許多客戶需要建立實驗以驗證構想。這些原型可能是新應用程式的構想,如果不成功,也可能被捨棄。提供能快速撰寫、部署和驗證構想的環境,對健康的環境至關重要。這個環境在制定現代應用程式開發策略時常被忽略,但公司內部的創新能力可能取決於此。讓團隊能使用可快速建置、測試和迭代的服務,對於發掘新商機具有無可估量的價值。

  • 許多客戶都希望確保其應用程式能在不同環境中執行,且能輕易遷移或移動到不同的環境。他們希望能夠保留選擇更換雲端供應商的選擇,或者在內部部署和雲端上執行應用程式。這通常包括需要支援熱門語言框架和開發場景的需求。例如,Java 開發人員可能想要使用 Spring 或 Python,而資料工程師可能想要使用 PyTorch。選擇現代化開發應用程式方法本身是不夠的。還需要最佳實務和架構才能實現應用程式的可攜性。我們建議在軟體架構和建立封裝方面建立能力,以便您更容易地在運算服務之間移植差異化的商業邏輯。

    使用某些技術建立的應用程式在某些運算服務上執行起來可能會比在其他運算服務上更有效率。容器服務通常是遷移傳統應用程式的更佳選擇,而不是 Lambda,因為後者需要變更架構。

  • 應用程式與自動化可攜性之間應有明顯區別。大多數情況下,選擇 AWS 無伺服器或 AWS Kubernetes 實際上與應用程式是否具備可攜性並無太大關係。反而,基礎設施團隊和 DevOps 團隊所使用的工具是關鍵因素。選擇在 AWS 上使用 Kubernetes 的客戶通常是在尋求基礎設施和部署工具的可攜性。

  • 在決定採用無伺服器還是容器型方法進行現代應用程式開發時,貴組織的技能是主要因素。不論選擇無伺服器還是容器,均需在 DevOps 和網站可靠性工程師 (SRE) 團隊上進行一些投資。建立自動化管道以部署應用程式是大多數現代應用程式的常見做法。

    部分選擇會提高管理量。例如,有些組織因投資強大的 SRE 團隊來管理 Kubernetes 叢集,而具有執行和管理 Kubernetes 實作的技能和資源。這些團隊會處理頻繁的叢集升級 (例如,Kubernetes 每年有三個主要版本,並且舊版本會被棄用)。

    組織規模是關鍵因素,因為較小的新創公司可能只有小型 IT 團隊,而且其中每個人都身兼數職,而較大的企業一次可能支援數百個生產工作負載。

  • 架構決策伴隨著權衡取捨,其中之一通常是成本。由於涉及的元件具有動態性質,因此常常會很難估算現代應用程式的成本。雖然一組固定伺服器的成本較容易估算,但就算這些伺服器並未增加商業價值,您仍需要支付其費用。

    這兩種方法都提供多個槓桿,以滿足您工作負載的成本目標。高層次的方法選擇,應考慮的不僅是資源成本,還要考慮建立和維護該策略所需的努力。AWS 定價計算器在了解特定工作負載成本方面會很有用。

  • 滿足安全和合規要求是每個工作負載的基礎。這兩種策略的 AWS 服務都能讓您滿足嚴格的合規要求。
     
    使用 AWS 無伺服器建置,能讓您利用與 AWS Identity and Access Management (IAM) 的整合來控制存取、原生 AWS 網路建構模組和 AWS 管控工具的支援。
     
    在 AWS 上使用 Kubernetes 需要了解 Kubernetes 和 AWS 的安全模型,並可能需要在安全策略之間進行映射。受管 AWS 產品 (如 Amazon EKS) 提供加速器,讓您能在 EKS 上安全執行應用程式。
  • 使用 AWS 無伺服器AWS 上的 Kubernetes 建置,可讓您建置高效能、可擴展和具有彈性的工作負載。您可以滿足所需的技術需求。具有最高層級抽象的服務,可管理跨 AWS 可用區域的放置和擴展環境,以改善效能和彈性。較低的抽象層級能讓您在工作負載擴展方面有更多控制。主要是在成本和管理複雜性方面權衡取捨。

步驟 2:確定您想進行多少管理

現代化的主要好處之一是能夠轉移營運責任,讓您能釋放資源去做更能增值和創新導向的活動。在現代化的不同層級中有一系列共享責任選項,從 Amazon EC2 (您可以建置並執行程式碼,同時管理整合、擴展、安全組態、佈建、修補等),到 AWS Lambda 等無伺服器功能,而您只需管理應用程式程式碼。

步驟 3:決定使用案例

建議您在預設策略中根據每個工作負載的情況,評估最合適的運算選項:使用 AWS 執行無伺服器,或是選擇 AWS 上的 Kubernetes。

在 AWS 上使用無伺服器策略的使用案例範例可能包括建立文件處理系統或處理網站工作負載。在該策略中,您可以選擇 AWS Lambda 來建置主要事件驅動文件處理工作負載,並選擇 AWS AppRunner 來實現交易網站所需的低延遲和可擴展性。

同時,容器 (和 AWS 上的 Kubernetes) 的使用案例範例,可以是將現有應用程式遷移至微型服務之漸進方法的一環。只需要最低程度的努力,就可以將許多舊式中介軟體應用程式修改為容器。

注意:有些組織會支援多種選項或工作負載模式,以便於工作負載或開發人員選擇。

在下表中,您可能需要在選擇運算服務時考慮其他一些使用案例。

步驟 4:比較並為您的工作負載做出正確選擇

AWS 提供不同的容器選項,例如 Amazon ECS、使用 AWS Fargate 的無伺服器容器和 AWS App Runner,以及不同的 Kubernetes 選項,例如 Amazon EKS、ROSA 和在 Amazon EC2 上的自我管理 Kubernetes。

下列比較表有助於您根據工作負載需求確定要使用的方法。您可以選擇兩種方法的元素或折衷方案,並擁有使用不同方法的不同團隊。在大型企業中,不同部門擁有不同策略的情況並不罕見。

 

  使用 AWS 的無伺服器 AWS 上的 Kubernetes
工作負載 支援各種工作負載模式,並針對特定工作負載提供最佳化的專屬服務。AWS Lambda 可能用於非同步工作負載,而 AWS Fargate 用於同步工作負載。 支援各種工作負載模式,並且更偏好在雲端或內部部署資料中心中使用一致的部署模式。
架構特性 支援大多數架構和模式,並提供針對效能、可擴展性、可靠性和成本最佳化的特定服務。 支援大多數需要在技術堆疊上維持一致性的架構。可使用一些最佳化層級,但需要更多的整合和管理工作。
整合 AWS 無伺服器提供與許多受管服務的整合。部分選項 (例如 AWS Lambda) 可訂閱 200 多項服務,並以受管方式接收事件。  許多合作夥伴提供 AWS 整合。 適用於 Kubernetes 的 AWS 受管產品提供與 AWS 服務的整合。Kubernetes 的合作夥伴生態系統非常豐富,並與其他開放原始碼技術整合。許多技術合作夥伴將 EKS 作為驗證其 Kubernetes 整合的第一選擇。
建立原型 AWS 無伺服器針對讓客戶能快速編寫、部署和變更程式碼而最佳化,使其成為執行快速原型設計工作的實用選擇,而且無需事先做很多選擇。 客戶若有 Kubernetes 策略,通常需要設定專門用於原型設計的特殊叢集,並像維護其他環境一樣維護它。
開銷 AWS 無伺服器設計主要是為了充分利用受管服務,只需對伺服器、網路和整合付出最少的管理努力。 AWS 提供了幾種 Kubernetes 的模式。這可能代表要管理多層技術 (例如叢集和雲端網路),或 Kubernetes 和 AWS 安全角色,不過 AWS 提供了附加元件和 EKS 藍圖等加速器。
生態系統 AWS 擁有建立在 AWS 服務之上的龐大合作夥伴生態系統,並提供解決方案和整合。AWS 建置在多種空間內,並使用許多開放原始碼技術。 Kubernetes 是大型生態系統,在每個雲端都有重要支援,並擁有大量社群支援。  CNCF 生態圈是此龐大生態系統的範例之一。AWS 提供附加元件和藍圖,以協助客戶採用其中一些熱門工具。
應用程式可攜性 應用程式架構 (針對使用託管服務或多個服務的應用程式) 的設計方式能讓商務邏輯輕鬆地從 Lambda、App Mesh 或 ECS 移植到其他運算環境。 Kubernetes 可用於大多數雲端和內部部署環境,且工作負載大多是可攜式。特定 Kubernetes 模式依賴程式碼中的服務網格 (例如 Istio 或 KNative 之類的程式設計模型),這代表應用程式需要 Kubernetes,而且無法移植至 Kubernetes 以外的其他系統。某些功能可能會將您鎖定在特定版本。您可能需要重建映像以支援各種 Linux 組建或特定硬體 (ARM 或 AMD)。
自動化 使用以開放式技術為基礎的風格來提供 AWS 特定的自動化支援。AWS CloudFormation、AWS Serverless Application Model (AWS SAM) 和一些 AWS Cloud Development Kit (AWS CDK) 程式庫都是範例。客戶可以使用開放原始碼選項,例如 Terraform。許多 AWS 客戶使用開放原始碼 DevOps 工具,例如 Jenkins。   在 Kubernetes 上制定策略的客戶通常會選擇使用自動化 Kubernetes 的工具。需要自動化叢集建置,而且您可以使用 AWS API、AWS 工具 (例如 AWS CloudFormation) 或 CDK。許多客戶使用像是 Terraform 這樣的技術。AWS EKS 藍圖是 Terraform 和 CDK 加速器的範例,用於建置叢集和附加元件。許多客戶開始採用 GitOps 工具 (例如 Flux 或 ArgoCD),透過 Kubernetes API 部署,並使用像 AWS 控制器或 Crossplane 這樣的工具來佈建原生雲端資源。
組織規模與技能 有些企業在主要雲端上標準化,並首先選擇 AWS 無伺服器,因為儘管他們可能有資金/資源來建立 SRE 團隊,但選擇全面採用 AWS 以針對敏捷性最佳化並降低營運成本。 中型至大型企業 (或銷售要在不同雲端或內部部署資料中心運執行之產品的軟體供應商) 通常使用 Kubernetes 優先方法。成功的客戶通常會在管理、執行和維護大量叢集的基礎設施和 SRE 團隊上投入更多資源。
可擴展性/彈性 AWS Lambda 客戶只需在調用函數時付費。如果 Lambda 不適合,您可以使用 Fargate 或 ECS。提供更多硬體架構選擇與運算定價選項 (例如 AWS EC2 Spot 執行個體)。 AWS 上的 Kubernetes 方法可藉由 Well-Architected 來實現您的效能、可擴展性和彈性需求。EKS 也提供使用 AWS EC2 Spot 和 Graviton 等選項的功能。
安全性 AWS 無伺服器方法利用 AWS 安全性、聯網和實務。 Kubernetes 方法需要了解 Kubernetes 安全性和 AWS 安全性,以及額外的營運開銷,例如將 Kubernetes 安全政策映射到 AWS 政策、保護容器映像和執行期,以及驗證第三方容器工具。  

在建置新的現代應用程式或將現有應用程式現代化時,架構師和開發人員可使用大量建置區塊,其中最重要的之一是選擇運算服務。

了解貴組織建置和部署的工作負載和應用類型,是選擇現代應用程式開發策略的關鍵因素。每個工作負載都有不同特性和需求。例如,文件處理工作負載的延遲和正常執行時間需求,與交易網站有截然不同。

步驟 5:避免常見陷阱

了解環境中的標準化

許多執行多種工作負載模式的組織希望將可有效支援和執行的一組模式標準化。有些大型組織試圖對運算選項標準化,並選擇預設平台來執行大多數工作負載,並在需要時提供例外狀況。

標準化有助於提供一致性,並將組織需要聘用的專業技能人員人數降至最低。這些選項可以成為偏好的運算選擇,只有在偏好選擇無法使用時,才會考慮其他選項。通常,標準選擇可有效支援一組工作負載,但在其他方面卻會面臨困難。因此,有些組織會支援多種選項或工作負載模式,以便於工作負載或開發人員選擇。

了解您環境中的整合

有些組織在維護開放原始碼整合方面花費的時間比他們希望的要多,這是很常見的。

建議您在進行這些投資時,考慮社群來源和/或企業或基金會的支援。對這些專案的投資,不僅是財務上的投入,還包括對知識資本和潛在技術債務的投資,因為這些元件及相關整合通常需要更新。如需詳細資訊,請參閱 AWS 開放原始碼部落格。

瞭解您的架構特性

支援各種架構的能力非常重要。建議您利用 AWS Well-Architected Framework 作為指南,以協助您了解在 AWS 上建置系統時所做決策的利弊得失。此外,使用此架構可讓您學習設計和操作可靠、可擴展、安全、高效且具成本效益之雲端系統的架構最佳實務。

步驟 6:決定方法

根據組織和工作負載大小、模式和業務需求,您可能需要選擇這兩種方法的特定元素,或讓不同團隊使用不同方法。讓各個團隊使用不同策略的做法並不罕見。

AWS 無伺服器與 AWS

  • 使用 AWS 受管服務和工具作為首選,例如 AWS LambdaAWS App RunnerAmazon ECSAWS Fargate。 
  • 投資開發 AWS 相關專業,包括佈建、DevOps、基礎設施自動化、安全性、聯網以及可觀測性/營運。
  • 提高生產力並儘可能減少營運負擔。

AWS 上的 Kubernetes

  • 使用 Kubernetes 作為主要運算平台介面。
  • 圍繞執行和管理多個 Kubernetes 叢集及其上的工作負載和工具、GitOps 等進階模式採取紀律措施。
  • 整合不同的生態系統和合作夥伴工具。
  • Kubernetes 客戶可以針對特定使用案例使用受管 AWS 服務及 AWS Lambda 等其他運算選項。

實作您的方法

現在您已確定哪種方法最適合您的環境工作負載,建議您檢閱下列資源,這有助於開始實作您的方法。

  • AWS 上的無伺服器概觀
    使用無伺服器優先策略,以提升整個應用程式堆疊敏捷性的方式建置現代應用程式。本指南重點介紹堆疊的所有三層無伺服器服務:運算、整合和資料存放區。
    建置無伺服器 Web 應用程式
    在本教學中,您將學習如何使用 AWS Lambda、Amazon API Gateway、AWS Amplify、Amazon DynamoDB 和 Amazon Cognito 建置簡單的無伺服器 Web 應用程式。
    無伺服器運算實作研討會
    這些免費的引導式研討會將介紹使用 AWS Lambda、AWS Step Functions、Amazon API Gateway、Amazon DynamoDB、Amazon Kinesis 和 Amazon S3 等服務建置無伺服器應用程式和微型服務的基礎知識。
    AWS Fargate:適用於容器的無伺服器運算
    AWS Fargate 是無伺服器、依用量計費的運算引擎,讓您能專注於建置應用程式,而無需管理伺服器。AWS Fargate 適用於搭配 Amazon Elastic Container Service (Amazon ECS) 和 Amazon Elastic Kubernetes Service (Amazon EKS) 使用。
    AWS App Runner 概觀
    使用 AWS App Runner 建置、部署和執行容器化 Web 應用程式和 API 服務,無需事先具備基礎設施或容器經驗。
  • 選擇 Kubernetes 方法
    檢閱使用 Amazon Elastic Kubernetes Service (EKS) 受管 Kubernetes 服務在 AWS 雲端和內部部署資料中心執行 Kubernetes 的選項。
    開始使用 Amazon EKS
    提供開始使用 Amazon EKS 的逐步指南,並附上實用部落格、影片和詳細教學的連結。
    Amazon EKS 研討會
    親身體驗如何充分利用 Amazon EKS 的逐步說明。
    介紹 AWS Controllers for Kubernetes (ACK)
    ACK 是一種工具,可讓您直接透過 Kubernetes 管理 AWS 服務。ACK 使您能夠輕鬆建置使用 AWS 服務的可擴展、可用性極高的 Kubernetes 應用程式。
    什麼是 Red Hat OpenShift Service on AWS?
    探索使用 ROSA 建立使用 ROSA API 和工具的 Kubernetes 叢集,並可存取 AWS 服務的完整廣度和深度。

    最佳實務

    安全性

    安全性是設定和維護 Kubernetes 叢集和應用程式的關鍵元件。Amazon EKS 預設會提供安全、受管的 Kubernetes 叢集,但您仍需確定設定作為叢集一部分執行的節點和應用程式,以確保安全實作。如需詳細資訊,請參閱 Amazon EKS 安全性最佳實務指南

    主機安全

    使用 Amazon Inspector,這是自動化漏洞管理服務,可不斷掃描 AWS 工作負載以尋找軟體漏洞和意外網路風險。

本頁對您是否有幫助?