模組 1:AWS 上的容器和無伺服器運算
學習模組
概觀
AWS App Runner 是一項全受管的 AWS 運算服務,可讓開發人員輕鬆快速地大規模部署 Web 應用程式和 API,而無需事先具備基礎架構經驗。
學習目標
在本模組中,您將:
- 了解容器和無伺服器。
- 審視支援容器和無伺服器的 AWS 運算服務。
- 了解如何確定 AWS App Runner 何時適合您的工作負載。
容器和無伺服器是當下的兩個熱門主題。使用容器,您可以更輕鬆地管理本機或雲端的底層基礎架構。如今,雲端中近 80% 的容器在 AWS 上執行。無伺服器為您管理基礎架構,讓您的團隊可以專注處理業務優先事項。AWS 提供多種容器和無伺服器服務,請先分析一些關鍵注意事項,然後確定適合您應用場景的服務。
完成時間
30 分鐘
容器
將您的應用程式連同其組態、執行期系統和依賴項全部打包成一個簡潔的服務包,豈不是一個很好的選擇? 這就是容器的要義:容器提供一種標準的方式,將您應用程式的程式碼、組態及相依性封裝至單一物件。它們共用伺服器上安裝的作業系統,然後作為資源隔離程序執行,確保快速、可靠且一致的部署,而不論環境如何。
容器與虛擬機器
要了解容器,我們先來談談虛擬機器,以便進行對比。在物理伺服器占主導地位的時代,伺服器是一個單一的環境。它配備了一定量的記憶體、儲存空間和網路硬體,執行特定的作業系統,並為一個組織提供服務。然後,虛擬化問世,它使得在軟體中類比電腦成為可能。現在,您的「伺服器」能夠以一個虛擬機器,根據您的組織和應用程式所需的作業系統和資源量身定制。名為虛擬機器監控器的軟體層可以高效創建、執行和管理虛擬機器,並將虛擬機器與物理硬體關聯起來。物理伺服器可以為多個租戶執行多個虛擬機器,從而降低整體基礎架構成本。如今,虛擬機器已經在企業中佔據主導地位,成為了雲端運算的基礎。
容器不僅具有一些與虛擬機器相同的優勢,而且更便於移植、效率也更高。容器是一種打包應用程式及其依賴項、程式庫和設定的方式。多個容器共用一個主機作業系統,並作為獨立程序執行。虛擬機器虛擬化硬體,通常以千百萬位元組來衡量,而容器虛擬化作業系統,則通常以百萬位元組來衡量。這使容器具備輕巧、高效且便於移植的特點。容器特別適合微服務,因為二者均秉持打造羽量級獨立軟體元件的理念。
容器被設計為軟體部署單元,因此與虛擬機器相比,容器更容易改變開發人員的工作方式。開發人員構建容器並進行部署,這是他們工作的一部分。容器和虛擬機器並非非此即彼的選擇。您通常可以將二者結合使用,兼得二者之長。許多支援容器的 AWS 服務都在虛擬機器上執行容器。
容器共用伺服器上安裝的作業系統,然後作為資源隔離程序執行,確保快速、可靠且一致的部署,而不論環境如何。無論您是在筆記型電腦上本地部署還是在生產環境中部署,除了金鑰和環境設定外,體驗都將保持一致。
參考:AWS 容器
容器的類型
Docker 平台
Docker 是一種軟體平台,可讓您快速地建置、測試和部署應用程式。Docker 將容器定義為「您裝置上與主機上的所有其他程序隔離的沙盒程序。這種隔離利用了內核命名空間和控制組,這兩項功能都是 Linux 很久以前就有的功能。Docker 一直在努力讓這些功能更加容易獲得且方便使用。」
使用 Docker 帶來的好處包括更快地傳輸程式碼、標準化應用程式操作、無縫遷移程式碼,以及透過高效資源利用節省資金。平均而言,Docker 使用者發佈軟體的頻率比非 Docker 使用者高出 7 倍。您可以標準化容器的部署、故障排除和回滾操作。從本地設備轉移到生產環境非常簡單、直接。您可以利用容器在每台伺服器上執行更多程式碼,從而節省資金。
現代 .NET 應用程式 (採用 .NET Core 3.1 或 .NET 5+ 編寫) 可以在 Linux 上執行,並且與 Docker 容器相容。
支援 Docker 容器的 AWS 服務包括 AWS App Runner、Amazon Elastic Container Service (ECS)、Amazon Elastic Kubernetes Service (EKS)、ECS 或 EKS 上的 AWS Fargate 以及 AWS Lambda。
參考:AWS Docker
Linux 容器
Docker Linux 容器在 Linux 主機上執行。現代 .NET 應用程式 (採用 .NET Core 3.1 或.NET 5+ 編寫) 可以在 Linux 容器上執行,但舊版 .NET Framework 應用程式則需要使用 Windows。
支援 Linux 容器的 AWS 服務包括 AWS App Runner、Amazon Elastic Container Service (ECS)、Amazon Elastic Kubernetes Service (EKS)、ECS 或 EKS 上的 AWS Fargate 以及 AWS Lambda。
Windows 容器
Windows 容器支援 Microsoft Windows 作業系統。Windows 容器不能在 Linux 容器執行個體上執行,反之亦然。
支援 Windows 容器的 AWS 服務包括 Amazon Elastic Container Service (ECS)、AWS Fargate 上的 Amazon ECS 以及 Amazon Kubernetes Service (EKS)。AWS App Runner 不支持 Windows 容器。
容器的優勢
容器具有許多實際優勢:
羽量級
容器是羽量級套裝軟體。容器比虛擬機器小得多,因為其中沒有客戶機作業系統映像,它們與其主機共用一個作業系統。因此,容器的啟動速度通常比虛擬機器更快。
標準化且便於移植
容器提供了一致且便於移植的軟體環境。這使您可以標準化部署、問題調查和回滾操作。
無縫遷移
容器可以無縫遷移。您可以將容器化應用程式從本機電腦遷移到生產環境中,也可以將其從內部部署環境遷移到雲端。容器還具有一致性和版本控制功能,因而可以簡化 CI/CD 管道的實作。
發佈速度更快
容器為羽量級、便於移植且可無縫遷移,這幾種特點相結合可帶來出色的敏捷性。容器可以加快開發速度,因為容器可以節省在軟體依賴項、設定環境和排除環境差異方面耗費的時間。舉個例子,Docker 使用者發佈軟體的頻率平均比非 Docker 使用者高出 7 倍。
節省資金
利用容器,您可以在每個伺服器執行個體上執行更多程式碼。這不僅能提高利用率,還能為您節省資金。
AWS 上的容器的優勢
AWS 是一個熱門的容器雲目的地。如今,雲端中近 80% 的容器在 AWS 上執行。除了容器的固有優勢外,在 AWS 上託管容器時,您還可以獲得以下優勢。
安全
AWS 針對安全、合規和治理提供 200 多種服務和關鍵功能。AWS 利用強大的安全隔離技術和最新的安全更新來執行您的容器。您可以為每個容器設定精細的安全許可權。
可靠
AWS 提供的全球基礎架構包括 22 個區域中的 69 個可用區,讓您可以在全球範圍內執行容器。所有 AWS 容器服務都有服務等級協定 (SLA)。
選擇
AWS 提供多種容器服務選擇,包括受管服務和無伺服器服務。其中包括 Amazon Elastic Container Registry (ECR)、Amazon Elastic Container Service (ECS)、Amazon Elastic Kubernetes Service (EKS)、AWS Fargate、Amazon Elastic Compute Cloud (EC2),以及 AWS App Runner。
AWS 還提供 App2Container 工具 (A2C),該工具可幫助容器化和遷移現有的 .NET 和 Java 應用程式。
AWS 整合
AWS 容器服務已與 AWS 深度整合。這樣一來,您的容器應用程式便可以利用 AWS 服務進行自動擴展、聯網,並保障安全和進行監控。而您也可以兼得容器的敏捷性與 AWS 的彈性和安全性。
參考:深入探究 AWS 容器
容器應用場景
以下是容器的一些常見應用場景。
微服務
微服務是一種軟體發展方法,其中軟體由小型獨立服務組成,並透過定義良好的 API 進行通訊。這些服務由小型的獨立團隊所擁有。微服務架構使應用程式更易於擴展並可加快開發速度。這不僅推動了創新,還縮短了新功能的上市時間。容器是一種熱門的微服務策略。整體式應用程式可以分解為微服務,即容器中的獨立元件。
批次處理
批次處理和提取-轉換-載入 (ETL) 作業非常適合在容器中執行。有了容器,這些作業可以快速啟動,並按計劃執行或回應事件。同時,還可以根據需要動態擴展。
機器學習
使用容器針對訓練和推論快速擴展機器學習模型,然後在任何平台上靠近您的資料來源執行。
混合應用程式
容器可讓您標準化程式碼的部署方式,使其能夠針對在內部部署和雲端環境之間執行的應用程式建立工作流程。
應用程式遷移至雲端
容器有助於「直接遷移」到雲端。您可以輕鬆將整個應用程式打包到容器中,從而無需更改任何程式碼,即可將其遷移到雲端。您可以利用雲端彈性來擴展容器。
參考:AWS | 微服務
無伺服器
無伺服器技術讓可讓您在無須考量伺服器的情況下建置並執行應用程式。AWS 提供託管服務,用於託管程式碼、管理資料以及集成無需您管理伺服器的應用程式。它們具有自動擴縮功能、內置高可用性,並且採取按使用量付費的計費模式。
無伺服器的優勢
無伺服器技術讓您可以專注于應用程式和客戶,無需費心管理基礎架構。
消除營運開銷
使用無伺服器技術,您無需處理基礎架構管理、容量預置和修補。透過消除營運開銷,您的團隊可以快速發佈、取得意見回饋並進行疊代,以更快地進入市場。
適應大規模
無伺服器技術可以自動從零擴展,輕鬆應對峰值需求。這使您能夠迅速適應客戶需求。
降低成本
無伺服器技術可以自動從零擴展,輕鬆應對峰值需求。這使您可以更快速地適應客戶需求。
更輕鬆地建置更好的應用程式
無伺服器技術內置與其他 AWS 服務的整合。您可以專注建置應用程式,無需費心進行設定。
參考:AWS | 無伺服器
無伺服器使用案例
無伺服器技術非常適合以下常見使用案例:
Web 應用程式
Web 應用程式,包括 Web API 和微服務,可使用無伺服器技術輕鬆建立。無伺服器運算服務能夠自動擴展,以符合您的 Web 流量。
資料處理
您可以使用 Amazon Simple Storage Service (S3)、Amazon DynamoDB、Amazon Relational Database Service 代理 (RDS 代理) 以及 Amazon Aurora Serverless 等無伺服器資料技術處理幾乎任意規模的資料。
批次處理
無伺服器技術可以按計劃執行批次處理任務,也可以根據事件需要來執行。
事件攝取
您可以執行無伺服器功能來對傳入的非結構化資料進行處理、編制索引或分析,並應用機器學習服務。
適用於容器的 AWS 運算服務
現在,您已了解容器和無伺服器,下面我們來看看支援容器的 AWS 運算服務,其中一些也支援無伺服器。所有這些服務都支援 Docker Linux 容器,有些還支持 Windows 容器。您可以在 AWS 容器頁面上查看適用於容器的 AWS 服務和工具的完整清單。雖然無需詳盡了解這些服務的每個細節,但您應該了解它們之間的區別。
容器註冊表:Amazon ECR
Amazon Elastic Container Registry (ECR) 支援公開或私密儲存、共用和部署容器軟體。您通常會將容器推送到 ECR,這裡非常靠近 AWS App Runner、Amazon ECS 或 Amazon EKS 等 AWS 容器運算服務。
容器協同運作:Amazon ECS、Amazon EKS 和 AWS Fargate
這些服務託管容器並對其進行編排,這意味著它們可以自動對容器進行佈建預置、部署、聯網、擴展、可用性設定和生命週期管理。
Amazon Elastic Container Service (ECS) 是一項完全託管的容器協同運作服務,支援輕鬆部署、管理和擴展容器化應用程式 (包括微服務)。您可以在 ECS 上執行高度安全、可靠且可擴展的容器。
Amazon Elastic Kubernetes Service (EKS) 是一項受管容器服務,可在雲端或內部部署系統中啟動、執行和擴展 Kubernetes 應用程式。Kubernetes 是一種開放原始碼系統,用於自動化容器化應用程式的部署、擴展和管理。EKS 是啟動、執行和擴展 Kubernetes 的最可靠的方式。
AWS Fargate 是適用於容器的無伺服器運算。Amazon ECS 和 Amazon EKS 均以無伺服器形式提供,當您將它們與 AWS Fargate 結合使用時,它們的定價模式會有所不同。
除了管理雲端的容器外,Amazon ECS 和 Amazon EKS 還可以透過 Amazon ECS Anywhere 或 Amazon EKS Anywhere 服務管理本地容器應用程式。
無伺服器函數:AWS Lambda
AWS Lambda 是一項無伺服器事件驅動型服務,用於執行函數。它支持容器。
伺服器級控制:Amazon EC2 和 EC2 Spot 執行個體
這些選項不僅能最大限度地控制基礎架構的細節方面,同時也是在 AWS 上執行容器時所需管理最少的方式。
Amazon Elastic Compute Cloud (Amazon EC2) 是一種服務,可在雲端提供安全、可調整大小的運算容量。您可以在 EC2 上執行具有伺服器級控制的容器。為此,您需要分配 EC2 執行個體並在其上安裝 Docker。
如果您的應用程式具有容錯功能,可以在 Amazon EC2 Spot 執行個體上執行它們,這些執行個體最高可提供 90% 的折扣。Spot 執行個體 讓您可以利用 AWS 雲端中未使用的 EC2 容量。要使用 Spot 執行個體,您的應用程式必須可以中斷。您可以考慮使用 Spot 執行個體進行資料分析、批次處理作業、幕後處理或執行可選任務。
簡易 Web 應用程式:AWS Lightsail
AWS Lightsail 適合您希望以固定月費執行的簡單容器化應用程式。對於擁有小型網站且資料庫可以在雲端啟動和執行的學生、小型企業和初創企業來說,這是一個不錯的選擇。
完全託管:AWS App Runner
最後,我們終於講到了本課程的主題,AWS App Runner。App Runner 是一項全受管的服務,可讓開發人員輕鬆快速地大規模部署容器化 Web 應用程式和 API,而無需事先具備基礎設施經驗。App Runner 同樣採用無伺服器技術,讓您可以兼得容器和無伺服器的優勢。App Runner 可以在 Linux 容器上執行現代 .NET 工作負載。
選擇 AWS 運算服務
現在,我們已經了解適用於容器的 AWS 運算服務,下面介紹的是一些關鍵問題,這些問題將幫助您確定您的應用程式適合使用 AWS App Runner 還是其他服務。表 1 將注意事項與 AWS 服務相關聯。
表 1:AWS 容器運算服務決策表
在容器方面,您是新手還是頗有經驗的老手?
如果您是容器新手,可以考慮 AWS App Runner。這是服務水準最高的選項,無需事先具備基礎架構經驗。
您是否需要 Windows 容器?
如果您希望在容器中執行舊版 .NET Framework 應用程式,則只能使用 Windows 容器。支援 Windows 容器的 AWS 服務包括 Amazon ECS、使用 AWS Fargate 的 Amazon ECS,以及 Amazon EKS。如果您執行的是新版 .NET,則可以使用 Linux 容器以及任何支援容器的 AWS 運算服務。
容器協同運作是當前需求還是未來需求?
單容器應用程式和必須編排的容器組合之間有很大的區別。如果您的容器安排比較複雜並且需要終身管理,可以考慮使用 Amazon ECS 或 Amazon EKS。
無伺服器技術是否適合您?
如果您的應用程式符合無伺服器應用場景,並且您對讓 AWS 管理基礎架構和無伺服器支付模式感到滿意,可以考慮使用以下選項:AWS Lambda、App Runner 或 AWS Fargate。
- 如果您的應用程式由事件驅動的函數組成,則可以使用 AWS Lambda。
- 如果您需要協同運作,則應搭配使用 AWS Fargate 與 Amazon ECS 或 Amazon EKS。
- 如果您喜歡完全託管式服務,請選擇 AWS App Runner。
關鍵要點
現在,您應該對容器和無伺服器及其各自的優勢有了基本的了解。您了解了不同的 AWS 運算服務及其各自的優勢。您還了解了問哪些問題能夠為工作負載確定合適的 AWS 運算服務。
結語
在本模組中,您首先認識了容器:它們與虛擬機器有何不同,以及 Docker Linux 容器與Windows 容器。它們輕巧、標準化且可攜,移動順暢,讓您能夠更快速地運送,並且節省成本。AWS 中的容器安全、可靠,且受到多種容器服務的支援,並且與 AWS 深度整合。
接下來,您了解了無伺服器技術,這些技術可讓您在無須考量伺服器的情況下建置應用程式。優勢包括消除營運開銷、自動擴展、降低成本,以及透過內建與其他 AWS 服務的整合更輕鬆地建置應用程式。使用案例包括 Web 應用程式、資料處理批次處理,和事件擷取。
您了解了適用於容器的 AWS 運算服務,以及如何選擇運算服務。您了解了 AWS App Runner 是一項全受管服務,用來託管同時屬於無伺服器類型的容器。