

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 容器化 .NET 應用程式
<a name="net-containerize"></a>

## 概觀
<a name="net-containerize-overview"></a>

容器是一種輕量且有效率的方式，以一致且可重現的方式封裝和部署應用程式。本節說明如何使用 AWS Fargate無伺服器容器服務來降低 .NET 應用程式的成本，同時提供可擴展且可靠的基礎設施。

## 成本影響
<a name="net-containerize-cost"></a>

影響使用容器節省成本效率的一些因素包括應用程式的大小和複雜性、需要部署的應用程式數量，以及應用程式的流量和需求層級。對於小型或簡單應用程式，與傳統基礎設施方法相比，容器可能無法大幅節省成本，因為管理容器和相關服務的負荷實際上可能會增加成本。不過，對於更大或更複雜的應用程式，使用容器可以透過改善資源使用率並減少所需執行個體的數量來節省成本。

使用容器節省成本時，建議您謹記下列事項：
+ **應用程式大小和複雜性** – 更大和更複雜的應用程式更適合容器化，因為它們往往需要更多資源，並且可以從改善的資源使用率中受益更多。
+ **應用程式數量** – 您的組織必須部署的應用程式越多，可透過容器化節省的成本就越多。
+ **流量和需求** – 遇到高流量和需求的應用程式可以從容器提供的可擴展性和彈性中受益。這可能會導致節省成本。

不同的架構和作業系統會影響容器成本。如果您使用的是 Windows 容器，由於授權考量，成本可能不會降低。Linux 容器的授權成本較低或不存在。下列圖表使用 AWS Fargate 美國東部 （俄亥俄） 區域中 的基本組態搭配下列設定：每月 30 個任務，每個執行 12 小時，配置 4 個 vCPUs和 8 GB 記憶體。

您可以從兩個主要運算平台中選擇在 AWS EC[EC2-based容器主機和無伺服器](https://catalog.us-east-1.prod.workshops.aws/workshops/1de8014a-d598-4cb5-a119-801576492564/en-US/module2-ecs/lab1-deploy-ecs-cluster) 或 上執行容器[AWS Fargate](https://aws.amazon.com/blogs/containers/running-windows-containers-with-amazon-ecs-on-aws-fargate/)。如果您使用 Amazon Elastic Container Service (Amazon ECS) 而非 Fargate，則必須維持執行中的運算 （執行個體），以允許置放引擎在需要時執行個體化容器。如果您改用 Fargate，則只會佈建所需的運算容量。

下表顯示使用 Fargate 與 Amazon EC2 之同等容器的差異。由於 Fargate 的彈性，應用程式的任務每天可以執行 12 小時，在非上班時間沒有使用率。不過，對於 Amazon ECS，您必須使用 EC2 執行個體的 [Auto Scaling 群組](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-groups.html)來控制運算容量。這可能會導致容量一天執行 24 小時，最終可能會增加成本。

![\[Fargate 每月成本與 EC2 每月成本\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/graph_fargate_ec2_costs.png)


## 成本最佳化建議
<a name="net-containerize-rec"></a>

### 使用 Linux 容器而非 Windows
<a name="net-containerize-rec-linux"></a>

如果您使用 Linux 容器而非 Windows 容器，可以大幅節省成本。例如，如果您在 EC2 Linux 上執行 .NET Core，而不是在 EC2 Windows 上執行 .NET Framework，則可以節省約 45% 的運算成本。如果您使用 ARM 架構 (AWS Graviton) 而非 x86，則可以額外節省 40%。

如果您打算為現有的 .NET Framework 應用程式執行 Linux 型容器，您必須將這些應用程式移植到現代跨平台版本的 .NET ([例如 .NET 6.0](https://learn.microsoft.com/en-us/dotnet/core/releases-and-support))，才能使用 Linux 容器。與透過降低 Linux 容器成本而節省的成本相比，主要考量是權衡重構的成本。如需將應用程式移植到現代 .NET 的詳細資訊，請參閱 AWS 文件中的[適用於 .NET 的移植助理](https://aws.amazon.com/porting-assistant-dotnet/)。

移至現代 .NET （即遠離 .NET Framework) 的另一個好處是有額外的現代化機會可用。例如，您可以考慮將您的應用程式重新同步到以微服務為基礎的架構，該架構更具可擴展性、敏捷性和成本效益。

下圖說明探索現代化機會的決策程序。



![\[複寫決策樹\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/replatform_decision_tree.png)


### 利用 Savings Plans
<a name="net-containerize-rec-savings-plans"></a>

容器可協助您利用 [Compute Savings Plans](https://aws.amazon.com/savingsplans/compute-pricing/) 來降低 Fargate 成本。彈性折扣模式提供與可轉換預留執行個體相同的折扣。Fargate 定價是根據您開始下載容器映像時所使用的 vCPU 和記憶體資源，直到 Amazon ECS 任務終止 （四捨五入至最接近的秒數）。[Fargate 的 Savings Plans ](https://aws.amazon.com/fargate/pricing/) 提供 Fargate 用量高達 50% 的節省，以換取承諾一年或三年期間使用特定數量的運算用量 （以每小時美元為單位）。您可以使用 [AWS Cost Explorer](https://docs.aws.amazon.com/cost-management/latest/userguide/ce-what-is.html) 來協助您選擇 Savings Plans。

請務必了解 Compute Savings Plans 會套用到讓您最先節省成本的用量。例如，如果您在 中執行 t3.medium Linux 執行個體`us-east-2`和相同的 Windows t3.medium 執行個體，則 Linux 執行個體會先收到 Savings Plans 利益。這是因為 Linux 執行個體具有 50% 的節省潛力，而相同的 Windows 執行個體具有 35% 的節省潛力。如果您的 中有其他 Savings Plans 合格資源正在執行 AWS 帳戶，例如 Amazon EC2 或 Lambda，則不需要先將 Savings Plans 套用至 Fargate。如需詳細資訊，請參閱本指南的 [ Savings Plans 文件和 Windows on Amazon EC2 最佳化支出一節中的了解 Savings Plans 如何套用至您的 AWS 用量](https://docs.aws.amazon.com/savingsplans/latest/userguide/sp-applying.html)。 Savings Plans [ Amazon EC2](savings-plans.md) 

### Fargate 任務的大小正確
<a name="net-containerize-rec-savings-fargate-rightsize"></a>

請務必確保 Fargate 任務的大小正確，以達到最高程度的成本最佳化。通常，開發人員在最初決定其應用程式中使用的 Fargate 任務組態時，沒有所有必要的使用資訊。這可能會導致任務過度佈建，然後導致不必要的支出。為了避免這種情況，我們建議您載入在 Fargate 上執行的測試應用程式，以了解特定任務組態在不同使用案例中如何執行。您可以使用負載測試結果、vCPU、任務的記憶體配置，以及自動擴展政策，在效能和成本之間取得適當的平衡。

下圖顯示 Compute Optimizer 如何產生最佳任務和容器大小的建議。



![\[任務和容器大小的 Compute Optimizer 建議\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/container_size_recommendations.png)


其中一種方法是使用負載測試工具，例如 [上的分散式負載測試 AWS](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/)中所述的工具，來建立 vCPU 和記憶體使用率的基準。執行負載測試以模擬典型應用程式負載後，您可以微調任務的 vCPU 和記憶體組態，直到達到基準使用率為止。

## 其他資源
<a name="net-containerize-resources"></a>
+ [Amazon ECS 和 的成本最佳化檢查清單 AWS Fargate](https://aws.amazon.com/blogs/containers/cost-optimization-checklist-for-ecs-fargate/)(AWS 容器部落格文章）
+ [Amazon ECS 啟動類型的理論成本最佳化：Fargate 與 EC2](https://aws.amazon.com/blogs/containers/theoretical-cost-optimization-by-amazon-ecs-launch-type-fargate-vs-ec2/) (AWS 容器部落格文章）
+ 適用於 [.NET 的移植助理](https://aws.amazon.com/porting-assistant-dotnet/) (AWS 文件）
+ [上的分散式負載測試 AWS](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/) (AWS 解決方案程式庫）
+ [AWS Compute Optimizer 在 上啟動對 Amazon ECS 服務的支援 AWS Fargate](https://aws.amazon.com/blogs/aws-cloud-financial-management/aws-compute-optimizer-launches-support-for-amazon-ecs-services-on-aws-fargate/) (AWS 雲端財務管理部落格文章）