

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

# 將 Windows 應用程式移至容器
<a name="windows-containers-main"></a>

## 概觀
<a name="windows-containers-overview"></a>

根據 [CNCF 2021 年度調查](https://www.cncf.io/reports/cncf-annual-survey-2021/)，96% 的組織正在使用或評估容器來現代化其基礎設施。這是因為容器可協助您的組織降低風險、提高營運效率和速度，並啟用敏捷性。您也可以使用容器來降低執行應用程式的成本。本節提供跨容器服務以經濟實惠的方式執行 AWS 容器的建議，包括 [Amazon Elastic Container Service (Amazon ECS)](https://aws.amazon.com/ecs/)、[Amazon Elastic Kubernetes Service (Amazon EKS)](https://aws.amazon.com/eks/) 和 [AWS Fargate](https://aws.amazon.com/fargate/)。

## 成本利益
<a name="windows-containers-cost-benefits"></a>

下列資訊圖表顯示企業可以透過根據[AWS 最佳化和授權評估 (AWS OLA) ](https://aws.amazon.com/optimization-and-licensing-assessment/)建議，將 ASP.NET Framework 應用程式合併到 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體來節省成本。下列資訊圖表顯示將應用程式移至 Windows 容器可以節省哪些額外成本。



![\[ASP.NET 整合\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/asp_net_consolidation.png)


OLA AWS 建議企業進行提升，並轉移到個別的 t3.small 執行個體。如下列效能使用率分析所示，企業可以在內部部署伺服器上執行七個 ASP.NET 應用程式，藉此節省這些成本。



![\[效能使用率分析\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/perform_util_analysis-partA.png)


進一步分析顯示，透過在容器上執行工作負載，企業可以節省更多成本。容器可減少 CPU、RAM 和磁碟使用量等系統資源的作業系統額外負荷 （下一節說明）。在此案例中，企業可以將所有七個應用程式合併到一個 t3.large 執行個體，並且仍有 3 GB 的 RAM 可供備用。遷移至容器有助於企業使用容器而非 Amazon EC2，在運算和儲存之間平均節省 64% 的成本。

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

下一節提供透過整合應用程式和使用容器來最佳化成本的建議。

### 減少 Amazon EC2 上的 Windows 使用量
<a name="windows-containers-ec2-footprint"></a>

Windows 容器可讓您將更多應用程式合併到較少Amazon EC2 EC2 上的 Windows 使用量。例如，假設您有 500 個 ASP.NET 應用程式。如果您為 Amazon EC2 上的 Windows 執行一個核心，則等於 500 個 Windows 執行個體 (t3.small)。如果您假設使用 Windows 容器 （使用 t3.large) 的比率為 1：7 （可能會根據 EC2 執行個體類型/大小而大幅增加），則只需要大約 71 個 Windows 執行個體。這表示您的 Windows on Amazon EC2 使用量減少了 85.8%。

### 降低 Windows 授權成本
<a name="windows-containers-licensing-costs"></a>

如果您授權 Windows 執行個體，則不需要授權在該執行個體上執行的容器。因此，使用 Windows 容器合併 ASP.NET 應用程式可以大幅降低您的 Windows 授權成本。

### 減少您的儲存體使用量
<a name="windows-containers-storage-footprint"></a>

每次啟動新的 EC2 執行個體時，您都會建立並支付新的 Amazon Elastic Block Store (Amazon EBS) 磁碟區，以容納作業系統。隨著規模擴展，成本也會隨之擴展。如果您使用容器，可以降低儲存成本，因為所有容器共用相同的基本作業系統。此外，容器會使用 layer 的概念，根據該映像為所有執行中的容器重複使用容器映像的不可變部分。在上述範例案例中，所有容器都會執行 .NET Framework，因此都會共用中繼和不可變的 ASP.NET Framework layer。

### 將end-of-support伺服器遷移至容器
<a name="windows-containers-end-support"></a>

Windows Server 2012 和 Windows Server 2012 R2 的支援已於 2023 年 10 月 10 日結束。您可以遷移在 Windows Server 2012 或舊版上執行的應用程式，方法是將它們容器化以在新的作業系統上執行。如此一來，您就可以避免在不合規的作業系統上執行應用程式，同時利用容器提供的成本效率、降低風險、營運效率、速度和敏捷性。

如果您的應用程式需要與目前使用中的作業系統版本 （例如 COM Interop) 相關的特定 APIs，請謹慎考慮此方法。在此情況下，您必須測試將應用程式移至較新的 Windows 版本。Windows 容器會將基本容器映像 （例如 Windows Server 2019) 與容器主機的作業系統 （例如 Windows Server 2019) 對齊。測試和移至容器可讓您在未來更輕鬆地進行作業系統升級，方法是變更 Dockerfile 內的基本映像，並部署到執行最新版本 Windows 的新主機集。

### 移除第三方管理工具和授權
<a name="windows-containers-third-party"></a>

管理您的伺服器機群需要使用數種第三方系統操作工具來進行修補和組態管理。這些可讓基礎設施管理變得複雜，而且您通常會產生第三方授權成本。如果您在 上使用容器 AWS，則不需要在作業系統端管理任何內容。容器執行時間會管理容器。這表示基礎主機是暫時性的，可以輕鬆取代。您可以執行容器，而不需要直接管理容器主機。此外，您可以使用 等免費工具 AWS Systems Manager Session Manager ，輕鬆存取主機並對問題進行故障診斷。

### 改善控制和可攜性
<a name="windows-containers-control-portability"></a>

相較於 EC2 執行個體，容器可讓您更精細地控制 CPU 和 RAM 等伺服器資源。對於 EC2 執行個體，您可以選取執行個體系列、執行個體類型和 CPU [選項來控制 CPU](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html) 和 RAM。不過，使用容器時，您可以確切定義要配置給 ECS 任務定義中容器或 [Amazon EKS 中 Pod ](https://docs.aws.amazon.com/eks/latest/userguide/fargate-pod-configuration.html)的 CPU 或 RAM 數量。事實上，我們建議為 Windows [容器指定容器層級的 CPU 和記憶體](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/windows_task_definitions.html)。此精細程度可帶來成本效益。請考慮下列範例程式碼：

```
json
{
    "taskDefinitionArn": "arn:aws:ecs:us-east-1:123456789012:task-definition/demo-service:1",
    "containerDefinitions": [
        {
            "name": "demo-service",
            "image": "mcr.microsoft.com/dotnet/framework/samples:aspnetapp-windowsservercore-ltsc2019",
            "cpu": 512,
            "memory": 512,
            "links": [],
            "portMappings": [
                {
                    "containerPort": 80,
                    "hostPort": 0,
                    "protocol": "tcp"
                }
            ],
```

### 加速創新
<a name="windows-containers-innovation"></a>

移至容器可讓您更輕鬆地自動化開發生命週期的階段，包括建置、測試和部署應用程式。如果您將這些程序自動化，則可以讓開發和營運團隊有更多時間專注於創新。

### 降低 TCO
<a name="windows-containers-tco"></a>

移至容器通常會減少對授權管理和端點保護工具的依賴。由於容器是暫時性的運算單位，因此您可以自動化並簡化修補、擴展和備份和還原等管理任務。這可以降低管理和操作容器型工作負載的 TCO。與虛擬機器相比，容器更有效率，因為它們可讓您最大化應用程式的置放，以便您可以提高應用程式的基礎設施資源使用率。

### 關閉技能差距
<a name="windows-containers-skills-gap"></a>

AWS 提供計畫和沉浸式日，提升容器和 DevOps 技術的客戶開發團隊技能。這包括實作諮詢和啟用。

### 重構 .NET 5\$1 並使用 Linux 容器
<a name="windows-containers-refactor-net"></a>

雖然您可以將 .NET Framework 應用程式移至容器來降低成本，但當您將舊版 .NET 應用程式重構為雲端原生替代方案時，可以進一步節省成本 AWS。

### 移除授權成本
<a name="windows-containers-licensing-costs"></a>

將您的應用程式從 Windows 上的 .NET Framework 重構為 Linux 上的 .NET Core，可節省約 45% 的成本。

### 存取最新的增強功能
<a name="windows-containers-enhancements"></a>

將您的應用程式從 Windows 上的 .NET Framework 重構為 Linux 上的 .NET Core，可讓您存取最新的增強功能，例如 Graviton2。相較於可比較的執行個體，Graviton2 提供 40% 更好的效能價格。

### 改善安全性和效能
<a name="windows-containers-security-performance"></a>

將您的應用程式從 Windows 上的 .NET Framework 重構為 Linux 上的 .NET Core，可改善安全性和效能。這是因為您取得最新的安全修補程式、受益於容器隔離，以及可存取新功能。

### 使用 Windows 容器，而不是在一個 IIS 執行個體上執行許多應用程式
<a name="windows-containers-iis"></a>

考慮以下優點：使用 Windows 容器，而不是在具有網際網路資訊服務 (IIS) 的 EC2 Windows 執行個體上執行多個應用程式：
+ **安全** – 容器提供開箱即用的安全層級，但無法透過 IIS 層級的隔離達成。如果一個 IIS 網站或應用程式遭到入侵，所有其他託管網站都會公開且容易受到攻擊。容器逸出很少見，而且比透過 Web 漏洞取得伺服器的控制更難利用。
+ **彈性** – 能夠在程序隔離中執行容器，並讓自己的執行個體允許更精細的聯網選項。容器也在許多 EC2 執行個體中提供複雜的分佈方法。當您在單一 IIS 執行個體上合併應用程式時，不會獲得這些好處。
+ **管理開銷** – 伺服器名稱指示 (SNI) 會建立需要管理和自動化的開銷。此外，您必須掌握典型的作業系統管理操作，例如修補、故障診斷 BSOD （如果沒有自動擴展）、端點保護等。根據[安全最佳實務](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/jj635855(v=ws.11))設定 IIS 網站是一項耗時且持續的活動。您甚至可能需要設定[信任層級](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/hh831532(v=ws.11))，這也會增加管理開銷。容器設計為無狀態且不變。最後，如果您改用 Windows 容器，您的部署會更快、更安全且可重複。

## 後續步驟
<a name="windows-containers-next-steps"></a>

投資現代基礎設施來執行舊版工作負載，為您的組織帶來巨大的優勢。 AWS 容器服務可讓您更輕鬆地管理基礎基礎設施，無論是在內部部署還是在雲端，因此您可以專注於創新和業務需求。雲端中幾乎有 80% 的容器在 AWS 今天執行。 為幾乎所有使用案例 AWS 提供一組豐富的容器服務。若要開始使用，請參閱 [Containers at AWS](https://aws.amazon.com/containers/)。

## 其他資源
<a name="windows-containers-resources"></a>
+ [使用 ECS 容量提供者和 EC2 Spot 執行個體最佳化容器工作負載的成本 ](https://aws.amazon.com/blogs/containers/optimize-cost-for-container-workloads-with-ecs-capacity-providers-and-ec2-spot-instances/)(AWS 部落格）
+ [Amazon ECS 和 的成本最佳化檢查清單 AWS Fargate](https://aws.amazon.com/blogs/containers/cost-optimization-checklist-for-ecs-fargate/) (AWS 部落格）
+ [Amazon EKS on AWS Graviton2 已全面推出：多架構應用程式的考量事項](https://aws.amazon.com/blogs/containers/eks-on-graviton-generally-available/) (AWS 部落格）
+ [上的 Kubernetes 成本最佳化 AWS](https://aws.amazon.com/blogs/containers/cost-optimization-for-kubernetes-on-aws/) (AWS 部落格）
+ [使用 Karpenter 整合最佳化 Kubernetes 運算成本](https://aws.amazon.com/blogs/containers/optimizing-your-kubernetes-compute-costs-with-karpenter-consolidation/) (AWS 部落格）