AWS App Runner 上的 .NET 工作負載

模組 2

模組 2:AWS App Runner 基礎知識

 學習模組

學習目標

在本模組中,您將:

  • 了解 AWS App Runner 的基礎知識,包括其好處、使用案例、功能和定價模式。
  • 了解在哪裡可以找到文件和其他資源。
  • 在 AWS 管理主控台中了解 AWS App Runner,並了解如何建立、管理和刪除服務。

AWS App Runner 是一項全受管的服務,可讓開發人員輕鬆快速地大規模部署容器化 Web 應用程式和 API,而無需事先具備基礎設施經驗。從原始程式碼或容器映像開始。App Runner 自動建置和部署 Web 應用程式,透過加密對流量進行負載平衡,進行擴展以滿足您的流量需求,並使您的服務能夠輕鬆地與在私有 Amazon VPC 中執行的其他 AWS 服務和應用程式進行通訊。藉助 App Runner,您不必考慮伺服器或擴展性,而可以將更多時間專注於應用程式。 

 完成時間

60 分鐘 

AWS App Runner 簡介

AWS App Runner (後稱「App Runner」) 是一項全受管的服務,可讓開發人員輕鬆快速地大規模部署容器化 Web 應用程式和 API,而無需事先具備基礎設施經驗。如果您擁有 Web 應用程式或網路服務,例如網站、API 或微服務,那麼它們非常適合使用 App Runner。

App Runner 是專為容器化 Web 應用程式的打造「豪華」服務。當 AWS 將 App Runner 描述為「完全受管理」時,他們並不是開玩笑:如果您希望為自己處理每一個細節,App Runner 就是您的首選服務。與 AWS Lambda 一樣,您唯一的責任就是提供程式碼。與 AWS Lambda 一樣,您可以不了解 (或不需要) 服務執行的基礎 EC2 執行個體和基礎架構知識。

如果您不熟悉容器,則無需擔心:部署流程可以自動為您的程式碼建立一個容器。如果您已經擁有容器,則可以繼續使用現有的容器。App Runner 將為您執行其他所有工作,包括管理 TLS、負載平衡器、運作狀態檢查和自動擴展。App Runner 在 Amazon ECS 上使用 AWS Fargate 執行您的容器,但您永遠不會直接與這些服務進行互動。

好處

App Runner 易於使用,自動擴展,節省時間,並提供符合規範的環境。

易於使用

只需點擊幾下,您就可以使用 AWS App Runner 建置和執行安全的 Web 規模應用程式。您不需要容器、基礎設施、伺服器設定、網路、負載平衡或部署管道的經驗。

隨流量擴展

App Runner 可以無縫擴展和縮小資源,以響應網路流量。您可以設定容器執行個體的最少數量,以消除冷啟動並確保低延遲。

節省時間

您不需要花費時間使用 App Runner 分配、設定或管理資源和基礎設施。資源和基礎設施元件完全 AWS 受管,可受益於我們的安全性和運營最佳實務。您可以完全專注於您的應用程式

確保合規環境

您的 App Runner 應用程式可透過 Amazon VPC 連線到 AWS 服務,例如資料庫、快取和訊息佇列服務。不需要公有子網路來幫助您保護資源。

使用案例

AWS App Runner 的使用案例包括前端和後端 Web 應用程式、微服務、Web API 以及快速部署。

前端和後端 Web 應用程式

您可以在 App Runner 中託管網站、Web 服務和 API。

微型服務和 API

藉助 App Runner,您可以同時運行數千個微型服務。這樣您可以獲得鬆散的耦合,每個微服務都可以獨立擴展。 

快速部署

App Runner 利用 AWS 最佳實務和技術大規模部署和執行容器。這可縮短新應用程式和功能的上市時間。

功能

讓我們回顧 AWS App Runner 服務的功能:

VPC 連接器

App Runner 服務可以透過 VPC 連接器與在私有 Amazon Virtual Private Cloud (VPC) 中執行的其他 AWS 服務通訊。這可讓您新增對 Amazon VPC 控制下的其他服務的支援。

自動擴展

App Runner 會根據您設定的限制,自動擴展或縮減容器執行個體以滿足流量要求。

自動部署

App Runner 可以在應用程序更改時自動建置和部署您的應用程式。您可以將 App Runner 連接到您的程式碼儲存庫,或連接到容器映像登錄,例如 ECR。 

憑證管理

App Runner 自動包括 Transport Layer Security (TLS)。不需要設定,憑證會自動續訂。

成本管理

您可以透過 AWS 管理主控台、AWS CLI 或 AWS SDK 輕鬆暫停或恢復應用程式來控制成本。

負載平衡

App Runner 負載自動平衡流量,提供可靠性和高可用性。

日誌和指標

透過提供詳細的建置、部署和執行期記錄,App Runner 可以監控和最佳化容器化應用程式。透過與 Amazon CloudWatch 的內建整合,也可提供完整的運算指標。

限制

App Runner 僅適用於特定區域,您可以在 AWS App Runner 端點和配額頁面中查看。 如果您將與其他 AWS 服務 (例如資料庫或儲存服務) 一起使用 App Runner,則您需要使用支援所有目標服務的區域,以便可同地協作,提高效率。您還應考慮選擇區域的 AWS 建議,例如遵守當地法規,以及距您的使用者基礎位置的距離。

並非在所有區域提供。

並非所有 AWS 區域都提供 AWS App Runner。您可以在 AWS App Runner 端點和配額頁面上找到目前支援的區域。

每次服務一個容器

在 App Runner 中,服務僅與一個容器相關聯,而且只有一個容器。您可以根據流量執行該容器的多個執行個體,但是無法像使用 ECS 或 EKS 那樣從多個容器構成服務。

地區配額

依預設,您最多可以建立 10 個自動擴展組態、10 個第三方資源連接、10 個可觀測性組態、10 個服務,以及每個區域 10 個 VPC 連接器。所有這些配額都可以調整。您可以使用 AWS 服務配額和 AWS 支援中心請求提升服務配額。

定價模式

App Runner 根據運算和記憶體資源收費。此外,如果您選擇使用這些功能,您可以支付自動部署和從源程式碼建置費用。注意:此處所述的費率和定價範例以截至 2022 年 5 月的美國匯率為準。請務必查看定價頁面以確認費率和其他定價模式詳細信息。請注意,價格可能會因地區而異。

在 App Runner 中建立應用程式時,您可以設定所需的記憶體數量和虛擬 CPU。虛擬 CPU (vCPU) 是等於一個 CPU 核心的一個執行緒的 CPU 單位。您也可以指定並行性,以決定作用中容器執行個體需要支援的同時請求數目上限。當您的應用程式閒置時,您只需為佈建的容器執行個體記憶體付費,這樣您的應用程式就能保持正常運轉,並準備快速回應下一個請求。當出現請求時,您需要為作用中容器執行個體在應用程式處理請求時所消耗的 vCPU 和記憶體付費。只有在您的應用程式執行時收取費用,您可以透過 AWS Console 暫停並恢復應用程式。 

已佈建的容器執行個體

部署應用程式後,每個容器執行個體中佈建的記憶體都會需要您支付費用。App Runner 即使沒有流量也能保持記憶體佈建,確保它能夠以低延遲回應下一個請求。

在撰寫本文時,佈建的容器執行個體在美國和歐洲地區的費用為 0.007 美元/GB-小時。

定價範例:假設您已經部署了需要 2GB 記憶體且目前沒有流量的佈建容器執行個體。該 2GB 佈建容器執行個體的費用為 1 x 2GB x 0.007 美元 = 每天 0.34 美元。

作用中容器執行個體

當您的應用程式處理請求時,您的費用會從佈建的容器執行個體切換為作用中容器執行個體。作用中容器執行個體向您收取運算資源和任何超出佈建容器執行個體涵蓋範圍之外的任何記憶體費用。

作用中容器執行個體收費為 0.064 美元/vCPU/小時。容器執行個體費用會按秒計費,當佈建容器執行個體開始處理請求後,vCPU 資源按最少一分鐘計費。

自動部署

如果您選擇自動部署,原始程式碼會變更為部署分支的建置容器映像,並觸發部署。自動部署的費用為每個應用程式每月 1 美元。

建置費用

當 App Runner 從原始程式碼建置應用程序時,您需要支付建置費用。費率為 0.005 美元/每分鐘建置。

定價範例 1:應用程式測試

您每天測試應用程式 2 小時。測試作用中時,您的應用程式每秒收到 2 個請求,持續 2 個小時。您的應用程式需要每個容器執行個體 2GB 的記憶體。您每天暫停服務 22 小時。

您的每日佈建容器執行個體費用為 2 小時 x 1 個佈建容器執行個體 x (2 GB x 0.007 美元/GB-小時),或 0.03 美元。您每天只支付 2 小時的費用,因為您每天的其他 22 小時暫停該應用程式。

您的每日作用中容器執行個體費用為 2 小時 x 1 個作用中容器執行個體 x [(1 個 vCPU x 0.064 美元/vCPU-小時)] – 2 小時 x 1 個佈建容器執行個體 x (2 GB x 0.007 美元) = 0.13 美元。您的每日總成本為 0.16 美元,或 4.80 美元/月。

定價範例 2:輕量級 API

您已將輕量級的延遲敏感 Web API 部署到 1 個具有 2GB 記憶體的佈建容器執行個體。每天,您在 8 小時內收到 80 個偶爾的請求。

App Runner 每天 24 小時維護佈建的容器執行個體 (記憶體),收費為 2GB x 0.007 美元/GB-小時,或每天 0.34 美元。

當請求進入時,App Runner 每天可擴展到 1 個作用中容器執行個體,每天 8 小時。作用中容器執行個體會收取運算和記憶體費用,減去佈建容器執行個體記憶體費用。公式如下,費用為每天 0.51 美元。

8 小時 × 1 個作用中容器執行個體 × [(1 vCPU × 0.064 美元/vCPU-小時) + (2 GB × 0.007 美元/GB-小時)] - 8 小時 x 1 個佈建容器執行個體 x (2 GB × 0.007 美元/GB-小時) = 0.51 美元

每日總費用為 0.51 美元 (作用中容器執行個體) + 0.34 美元 (佈建容器執行個體) = 0.85 美元,或每月 25.50 美元。

定價範例 3:大量生產

您在生產中有一個 Web 應用程式。每個容器執行個體需要 2GB 的記憶體,並且每秒可處理 80 個請求。該網站在白天繁忙,請求最高達 800 個請求/秒,持續 3 小時。在 12 個非繁忙小時內,每秒有 60 個請求。App Runner 在高峰時段將應用程式擴展到 10 個作用中容器執行個體,並在非高峰時段將應用程式縮減到 1 個作用中容器執行個體。佈建的容器執行個體記憶體每天收費 24 小時。

佈建的容器執行個體 (記憶體) 每天收費為 2GB x 0.007 美元/GB-小時,或每天 0.34 美元。

在高峰時段,需要 10 個作用中容器執行個體,才能在持續 3 小時內每秒提供 800 個請求。10 個作用中容器執行個體 × 3 小時 x [(1 vCPU × 0.064 美元/vCPU-小時) + (2 GB × 0.007 美元/GB-小時)] - 1 個佈建容器執行個體 x 3 小時 x (2 GB × 0.007 美元/GB-小時) = 2.30 美元

在非高峰 (12 小時) 時段,1 個作用中容器執行個體處理每秒 60 個請求。12 小時 × 1 個作用中容器執行個體 × [(1 vCPU × 0.064 美元/vCPU-小時) + (2 GB × 0.007 美元/GB-小時)] - 12 小時 x 1 個佈建容器執行個體 x (2 GB × 0.007 美元/GB-小時) = 0.77 美元。

綜上,2.30 美元 (高峰作用中容器執行個體)+ 0.77 美元 (非高峰作用中容器執行個體) + 0.45 美元 (每日佈建容器執行個體) = 3.40 美元/天,或每月 102 美元。

參考:AWS App Runner | 定價EC2 虛擬 CPU

開發人員工作流程

在本節中,您將了解開發人員如何使用 App Runner。您可以按照下面顯示的流程,為您的應用程式建立 App Runner 服務。

1.新增來源

在此步驟中,您可以連線到容器映像或原始程式碼,然後選取部署設定。當您建立 App Runner 服務時,您將其連接到來源。來源可以是容器映像或原始程式碼儲存庫 (如下所示)。對於原始程式碼儲存庫 (例如 GitHub 儲存庫),您需要提供連接詳細資訊。

即使您的應用程式未被容器化,App Runner 也支持自動建置容器映像。關聯現有的原始程式碼儲存庫並有選擇地向 App Runner 提供運行時建置和啟動命令時,App Runner 會自動將您的 Web 應用程式容器化,同時提供一個執行中 Web 應用程式。自動容器化適用於包含支援的執行期和框架,且經過策略規劃的 App Runner 平台。

參考:AWS App Runner | 常見問答集

在部署設定中,您可以選擇手動或自動觸發應用程式的更新部署。如果您啟用自動部署,App Runner 會在您更新原始程式碼或容器映像時自動建置和部署應用程式。

2.設定建置和服務設定

在此步驟中,您可以設定容器的 vCPU 和記憶體,並選取自動擴展和運作狀態檢查選項。如果您選擇從來源程式碼儲存庫而不是容器登錄部署,則也將設定建置設定。雖然 App Runner 會為您預設這些設定,但您需要了解它們並了解自訂組態的選項。

您可以選擇在主控台中設定設定,或在原始程式碼儲存庫中提供 YAML 組態檔案。

在服務設定中,您將為服務命名,並設定容器的 CPU 和記憶體大小。這些設定會影響您的成本。您也可以在此設定應用程式所需的任何環境變數。

您可以設定自動擴展行為。預設值僅是容器的一個執行個體。當 App Runner 接收超過 80 個並行請求時,可將您的服務擴展到更多執行個體。您可以設定執行個體數目上限,這可讓您控制成本。

運作狀態檢查設定可讓您識別 App Runner 可以傳送運作狀態檢查請求的網路路徑。預設情況下,如果連續發生 5 次運作狀態檢查失敗,則該執行個體被視為運作狀態不良,並且 App Runner 將替換它。您可以將在 App Runner 判斷服務運作狀態不良之前必須失敗的運作狀態檢查數量從 1 設為 20。

安全性設定可讓您選擇執行個體將使用的 IAM 角色。如果您的應用程式需要與其他 AWS 服務通訊,您可以在 IAM 角色中授權。這些設定也可讓您選擇性地提供客戶管理金鑰 (CMK) 來加密原始程式碼。 

3. 檢查並建立

在此步驟中,您可以檢查並驗證所有設定。按一下「建立和部署」後,App Runner 會建立您的服務並部署您的應用程式。

4.接收安全 URL

最後,您會從 AWS App Runner 收到執行即可生產服務的安全 URL。HTTPS 會自動為您設定。

最後,如果您有自訂網域,您可以將應用程式與自訂網域關聯。您將依照指示採取行動證明您擁有該網域。

管理 App Runner 服務

您可以透過多種方式建立、部署和管理 App Runner 服務。

AWS 管理主控台

您可以從 AWS 管理主控台建立、部署、設定、監控和終止 App Runner 服務。您可以導覽至 AWS App Runner 主控台以執行這些作業。

建立和部署服務後,您可以選取服務並檢視下列區域中的服務詳細資訊:

服務概觀

在「服務概觀」區段中,您會看到應用程式的狀態 (例如執行中)、預設網域 URL、服務的 Amazon Resource Name (ARN) 以及「來源」URL。最後一個會將您帶到 Amazon Elastic Container Registry (ECR) 或原始程式碼儲存庫中的容器。

日誌

此分頁會顯示您的部署日誌和應用程式執行日誌。App Runner 會收集您的應用程式輸出並將其串流至 CloudWatch 日誌。您可以包含任何您認為有用的輸出,例如對 Web 服務的請求的詳細資訊。

活動

「活動」分頁會顯示您服務的歷史記錄。App Runner 使用操作清單來追蹤您的 App Runner 服務中的活動。操作表示對 API 動作的非同步呼叫,例如建立服務、更新組態和部署服務。

指標

「指標」分頁會顯示您的服務指標,包括請求、回應、延遲以及作用中執行個體數目。

組態

「組態」分頁會顯示您的服務組態詳細資訊,包括虛擬 CPU 和記憶體數目、自動擴展、運作狀態檢查和安全性。按一下「編輯」以修改您的組態。如果需要,您可以控制每個執行個體的虛擬 CPU 和記憶體數量、設定環境變數、自訂自動擴展、設定運作狀態檢查、使用自訂 IAM 角色,或使用自訂加密金鑰。

監控和記錄

監控 App Runner 應用程式對於維持可靠性、可用性和效能至關重要。從 AWS 解決方案的所有部分收集監控資料,輕鬆檢視故障詳細資訊。App Runner 從您的程式碼收集應用程式日誌。它還與多個 AWS 服務整合,以監控和回應服務事件。

Amazon CloudWatch 警示

您可以使用 Amazon CloudWatch 警示來監視服務指標,並在符合您指定的條件時向您傳送通知。您可以在一段時間內觀看服務指標,並設定臨界值,如果指標超過指定時間段數目的臨界值,則向您傳送通知。例如,當 CPU 使用率超過 60% 時,您可能會收到警示。

參考:檢視報告給 CloudWatch 的 App Runner 服務指標

應用程式日誌

App Runner 會收集應用程式程式碼的輸出,並將其串流至 Amazon CloudWatch Logs。您可以決定要登入應用程式的內容,例如向 Web 服務請求詳細資料。您可以在 App Runner 主控台中檢視這些日誌。如果您使用 Visual Studio,如果您已安裝 AWS Toolkit for Visual Studio,則可以從 IDE 檢視 CloudWatch 日誌。 

AWS CloudTrail 操作日誌

AWS CloudTrail 會記錄針對 AWS 服務的 API 呼叫,並將其作為事件追蹤。您可以在 AWS Console 中檢視事件,也可以選擇性地設定事件以持續寫入 Amazon S3 儲存貯體。

參考:CloudWatch 日誌CloudWatch 指標CloudTrail API 操作

適用於 .NET 的 AWS 部署工具

 適用於 .NET 的 AWS 部署工具是用於 .NET CLI 和 AWS Toolkit for Visual Studio 的互動式工具,您無需掌握太多 AWS 知識,並且只需最少點按或命令即可部署 .NET 應用程式。該工具會引導您完成部署。您可以使用此工具,使用單一命令 dotnet aws deploy,建立 .NET Web 應用程式並將其發佈至 AWS App Runner。

如果您使用 Visual Studio 作為 IDE,並且已安裝 AWS Toolkit for Visual Studio,則可以在 Visual Studio 中獲得相同的引導部署功能。在解決方案總管中,以滑鼠右鍵按一下專案,然後選取「發佈至 AWS」。精靈頁面將指導您完成部署

AWS Copilot

AWS Copilot 是開放原始碼命令列介面 (CLI),可以透過受管理的建置管道部署到 AWS App Runner 以及 Amazon ECS 和 AWS Fargate。Copilot 在幕後使用 Amazon CloudFormation。Copilot 可以與 .NET 以及 Python 和 Node.js 應用程式一起使用。 

身為 .NET 開發人員,您很可能需要使用適用於 .NET CLI 的 AWS 部署工具,從命令列部署到 AWS App Runner,但如果您還要部署非 .NET 應用程式,則可以選擇 AWS Copilot。

以下是使用 Copilot 部署 App Runner 時的操作:

AWS CLI

AWS 命令列介面包含用於檢視和管理 AWS App Runner 服務的命令。您可以建立、列出和描述服務和相關工件,例如 VPC 連接器和自訂網域。您可以檢視和設定組態設定。您可以開始部署。您可以暫停或恢復應用程式。您可以刪除服務。

連接到其他 AWS 服務

根據預設,App Runner 服務只能傳送訊息到公用端點,例如公用網站和 Web 服務。如果您的應用程式需要與其他 AWS 服務整合而無需透過網際網路 (例如 Amazon RDS 資料庫、Amazon DynamoDB 資料庫或 Amazon ElastiCache),您可以使用 VPC 連接器。雖然您通常不需要了解 AWS 基礎架構才能使用 App Runner,但您需要對 Amazon Virtual Private Cloud (VPC)、子網路和安全性有著高度了解才能使用 VPC 連接器。您可以透過閱讀什麼是 Amazon VPC?以及 Amazon VPC 的運作方式來取得對術語的基本理解。

VPC 連接器

VPC 連接器將您的 App Runner 服務與 VPC 相關聯。VPC 連接器只是連接的一半。若要連接其他 AWS 服務,該其他服務也必須與 VPC 連線。具體方法是使用 VPC 端點,即不需要網際網路存取的私人連接。例如,下圖顯示 App Runner 服務與 DynamoDB 資料庫之間的連接。App Runner 的 VPC 連接器和 DynamoDB 的 VPC 端點是兩個可以通訊的 VPC 連結。 

您可以在建立 App Runner 服務時設定 VPC 連接器。若要設定 VPC 連接器,您需要指定下列項目:

  1. 您想要連接的 VPC,例如預設的 VPC。
  2. 要選取的子網路。為了獲得高可用性,您應該選取至少 3 個可用區域的子網路。
  3. 您的預設安全群組。

在設定 VPC 連接器或 VPC 端點時,您應該諮詢組織的安全專家。

VPC 端點

VPC 端點可讓您透過私有連接將 VPC 連接到支援的 AWS 服務,而無需網際網路閘道、NAT 裝置或 VPN 連接。VPC 中的執行個體不需要公用 IP 地址才能與服務中的資源通訊。VPC 與其他服務之間的流量不會離開 Amazon 網路。

您可以在 AWS Well-Architected Framework 指南和 AWS PrivateLink 概念中了解有關 VPC 端點的更多資訊。

您可以瀏覽至 VPC > 端點,然後按一下「建立端點」,在 AWS Console 中建立 VPC 端點。若要為 AWS 服務建立端點,請選取 AWS 服務類別,然後搜尋並選取您想要連接的服務。

文件和資源

將以下資源設成書籤,您可以使用這些資源作為參考和學習:

AWS App Runner 產品詳細資訊頁面,提供服務概觀、功能、定價、資源和常見問答集。

AWS App Runner文件頁面包含開發人員資源的連結,包括 App Runner 開發人員指南、AWS CLI 參考資料、教學課程、影片和部落格。

AWS App Runner 開發人員指南描述了架構、部署和可觀測性。

AWS CLI App Runner 指令參考。您可以從 AWS CLI 建立服務、執行手動部署,以及列出服務狀態。

使用 CloudFormation 建置 Microsoft .NET Core Web API 應用程式並將其部署到 AWS App Runner研討會,說明勒如何使用 App Runner 透過 Amazon Aurora 資料庫建立 Microsoft .NET Web API 應用程式。

AWS App Runner:深入了解網路研討會影片是技術講座和演示。

AWS App Runner:幾分鐘內即可從程式碼轉換為可擴展且安全的 Web 應用程式是 Martin Beeby 的簡介部落格。

關鍵要點

您現在應該能夠說明 AWS App Runner 的優點、使用案例、功能和定價模式。

您學到了開發人員工作流程的 4 個步驟。

您了解如何在 AWS Console 中管理 App Runner 執行個體、監控和記錄選項以及各種命令列工具。

您了解了 VPC 連接器和 VPC 端點如何共同合作,將 AWS App Runner 與其他 AWS 服務連接。

對於 .NET 工作負載,使用 App Runner 的最簡單方法是使用容器映像作為來源。當您使用程式碼儲存庫來源時,需要額外的工作才能在執行個體上安裝 .NET。

結語

在本模組中,您了解了 AWS App Runner 的基礎知識。在服務介紹中,您檢視了 App Runner 的優點、使用案例、功能、限制和定價模式。您了解了開發人員工作流程以及可以設定的內容。您了解了如何從 AWS 管理主控台和各種工具管理 App Runner 服務。

本頁對您是否有幫助?

實作實驗室