單元 2:AWS 上的 .NET 容器開發人員工具
學習單元
AWS 提供免費工具和整合式開發環境工具組,可協助建置容器化 .NET 和 .NET Framework 應用程式並部署到 Amazon ECS、Amazon ECR 和 AWS Fargate。除了 AWS 管理主控台外,與 Visual Studio、JetBrains Rider、Visual Studio Code 和 dotnet CLI 的整合提供了選擇合適工具的靈活性,以滿足開發和持續整合與部署 (CI/CD) 要求
在本單元中,您將會了解如何藉由使用 AWS Toolkit for Visual Studio 來使用 Amazon ECS、AWS Fargate 和 Amazon ECR,以及在命令列上使用 dotnet CLI 擴充功能。
完成時間
60 分鐘
使用 Visual Studio 將 .NET 應用程式部署到 AWS 上的容器
AWS Toolkit for Visual Studio 是 Windows 上的 Visual Studio 的免費使用擴充功能 (不支援 Visual Studio for Mac)。該工具組提供一個可讓您存取多項 AWS 服務的總管視窗,包括容器服務,以及協助建置應用程式並發佈到 AWS 雲端的精靈。這些精靈支援從 Visual Studio 內將 .NET 和 .NET Framework 應用程式部署到 AWS Elastic Beanstalk、Amazon ECS and ECR、AWS Fargate 和 AWS App Runner (此課程著重在部署到 ECS/ECR 和 Fargate)。
從 Visual Studio 市集安裝工具組:https://marketplace.visualstudio.com/vs。針對在 Windows 上執行的 Visual Studio 有兩個支援版本可用:
工具組可安裝在於本機開發電腦上執行的 Visual Studio,也可以安裝在 Amazon Elastic Compute Cloud (EC2) 提供的包含授權 Visual Studio 映像中。這些映像是需要偶爾使用 Visual Studio 而不需要長期授權承諾之開發案例的理想解決方案。
安裝工具組後,它需要一組憑證,才能代表您存取 AWS 服務。這些憑證稱為憑證設定檔,如果需要建立它們,工具組會引導您完成程序。但是,如果您先前曾經在電腦上使用過 AWS CLI 或 AWS Tools for PowerShell 之類的工具,則工具組應該會自動偵測針對這些工具使用的憑證設定檔,然後在 AWS Explorer 工具視窗頂端的 設定檔:下拉式清單中顯示。
如果未顯示此視窗,請使用 IDE 的「檢視」功能表的 AWS Explorer 項目來顯示。選取憑證設定檔 (或建立一個設定檔),然後從總管視窗中的「區域:」下拉式清單控制項選取「AWS 區域」,以便開始使用。
從 AWS Explorer 檢視使用 Amazon ECS 和 Amazon ECR
在總管中選取憑證設定檔和區域後,您就可以從 Visual Studio 存取 Amazon ECS 和 Amazon ECR 中的資源。在 AWS Explorer 視窗中,展開總管中的 Amazon Elastic Container Service 項目及其兩個子項目 (叢集和儲存庫) 之後,您就可以使用屬於所選取區域的 ECR 私有註冊表中的現有叢集和儲存庫。工具組不支援使用 ECR 公有註冊表。
檢閱下方每個項目,以進一步了解叢集群組、每個叢集、儲存庫群組以及「總管」檢視中顯示的每個儲存庫上內容功能表中可用的功能。
叢集內容功能表
叢集群組上的內容功能表提供下列選項:
- 重新整理:更新「總管」中顯示的叢集集合。
叢集內容功能表
「總管」中所顯示的每個已部署叢集上的內容功能表提供下列選項:
- 檢視叢集詳細資訊 (開啟新文件視窗)。
- 刪除叢集。
在叢集有執行中任務時,無法刪除叢集。您可以先使用檢視功能表選項開啟叢集的詳細資訊檢視,然後在檢視中選取編輯,將所需任務值設定為 0,以將叢集中的任務耗盡。耗盡所有執行中任務後,請使用檢視中的「刪除」按鈕或內容功能表項目刪除叢集。叢集詳細資訊的檢視如下所示:
儲存庫內容功能表
「儲存庫」群組上的內容功能表提供下列選項:
- 建立儲存庫:開啟對話視窗,可輸入新儲存庫的名稱。請注意,新的儲存庫只能在您的私有註冊表中建立。
- 重新整理:更新「總管」中顯示的儲存庫集合。
儲存庫內容功能表
「儲存庫」群組底下所列儲存庫上的內容功能表提供下列選項:
- 檢視:開啟新的文件視窗,列出儲存庫中包含的映像。將映像推送到此儲存庫所需的特定命令也可以在此處檢視
- 刪除:開啟對話視窗,以確認刪除儲存庫。工具組可以選擇性地刪除儲存庫中包含的所有映像,然後再刪除儲存庫本身 (無法刪除非空白的儲存庫)。
從 Visual Studio 部署到 Amazon ECS 和 Amazon ECR
除了使用 AWS Explorer 中的叢集和儲存庫之外,工具組還提供兩種部署選項,可協助您將容器應用程式和映像部署到 Amazon ECS、AWS Fargate 和 Amazon ECR。這兩個選項都可以從 Solution Explorer 中應用程式專案的內容功能表取得:發佈至 AWS 和將容器發佈至 AWS (舊版)。
以下各節說明這些選項,以及您選擇使用各個選項的時機。
發佈至 AWS
發佈至 AWS 支援使用 AWS Fargate、AWS App Runner 和 AWS Elastic Beanstalk 中的虛擬機器,將 .NET 應用程式部署至 Amazon ECS。它也可用於將容器映像發佈至 Amazon ECR。除了從單一 IDE 入口網站提供部署至多項服務之外,「發佈至 AWS」還提供:
- 為應用程式建立自訂部署專案的能力。自訂部署專案可在部署期間建構其他 AWS 資源,以及自訂部署 UX 設定。藉由將部署專案與應用程式一起簽入來源控制,從 Visual Studio 內部署應用程式時,開發團隊可以存取適用於應用程式的相同自訂設定和部署資源。
- dotnet 命令列體驗,可在從 NuGet 安裝 AWS.Deploy.Tools 套件之後取得。命令列體驗顯示相同的選項,包括使用自訂部署專案新增的選項。本節稍後將討論使用命令列工具。當部署到 AWS 容器服務時,應用程式不需要有先前存在的 Dockerfile;如果需要,系統會產生 Dockerfile。
注意:「發佈至 AWS」僅支援 .NET 應用程式;不支援部署使用 .NET Framework 的應用程式。
注意:部署至 AWS App Runner 會在個別課程中討論:AWS App Runner 上的 .NET 工作負載。
發佈至 AWS 具有一些先決條件安裝,如果缺少任何一個安裝,則系統會出現提示。AWS 雲端部署套件 (CDK) 是用於佈建和設定 AWS 資源以支援應用程式部署。CDK 需要安裝 Node.js。開啟瀏覽器至 https://nodejs.org/en/,然後安裝最新長期支援 (LTS) 或目前版本的 Node.js。安裝 Node.js 後,開啟命令 Shell,然後執行命令 npm install -g aws-cdk 來安裝 CDK。安裝這兩個先決條件後,就可以執行使用「發佈至 AWS」部署。
從 Solution Explorer 中應用程式專案上的內容功能表,啟動發佈至 AWS。系統會分析應用程式,並顯示一些稱為「配方」的部署選項。對於已使用 Dockerfile 設定的應用程式,首先會顯示使用 AWS Fargate 將應用程式部署到 Amazon ECS 的配方,或是將容器映像推送至 Amazon ECR 的配方。對於尚未使用 Dockerfile 設定的應用程式,會針對 ASP.NET Core Web 和 Web API 應用程式 (包括 Blazor Server) 以及主控台應用程式顯示這些選項。
注意:如果應用程式已經部署 (至任何服務),則發佈 UI 將會先提供重新部署至現有目標。如果發生這種情況,請選取「發佈至新目標」標籤選項來執行新部署,而不是重新部署。
以下螢幕擷取畫面顯示在撰寫本文時,ASP.NET Core 6 Web 應用程式可用的配方。如果應用程式有任何自訂部署專案可用,它們將會列在 AWS 提供的配方上方。在螢幕擷取畫面中,會選取使用 AWS Fargate 發佈至 Amazon ECS 的配方。右側面板顯示該配方的預設部署選項。
至少需要應用程式名稱;預設會使用專案名稱。視應用程式而定,可以選取「發佈」按鈕並立即開始部署。但是,如果應用程式呼叫 AWS 服務,則需要提供自訂角色,其中包含允許應用程式存取服務和服務 API 的許可。如果需要的話,選取「編輯設定」按鈕以指定應用程式的角色,以及部署前所需的基礎設施變更。例如,可以對任務記憶體和 CPU、網路設定、負載平衡和擴展要求進行變更。以下螢幕擷取畫面顯示所選取配方可用的一些選項。左側類別 (運算、許可、VPC 等) 說明可為部署指定的選項範圍。
Fargate 上的 Windows 容器可以在 .NET Framework 和 .NET 應用程式上執行。Fargate 目前針對應用程式支援兩個 Windows Server 版本:Windows Server 2019 Full 和 Windows Server 2019 Core。無論您使用哪個版本,AWS 都會為您管理 Windows 作業系統授權。
設定所需選項後,請選取「發佈」按鈕以開始部署。
針對上方顯示的範例 ASP.NET Core Web 應用程式,發佈至 AWS 會歷經數個步驟,可以在部署日誌輸出中追蹤:
- 容器映像是使用現有的 Dockerfile 或自動產生的 Dockerfile 來建置的。
- 驗證是針對您的 Amazon ECR 私有註冊表執行,並將映像推送到儲存庫。根據預設,會使用與應用程式部署相同名稱的儲存庫,但是可以在開始發佈之前選取另一個儲存庫,方法是編輯部署設定 (儲存庫名稱可在「專案建置」類別的設定中找到)。
- 會產生暫時 CDK 專案,定義支援部署所需的資源,例如任務定義、叢集設定、網路組態和其他設定。
- 最後,CDK 專案用於部署 AWS CloudFormation 堆疊以啟動和設定資源,然後應用程式會部署到這些資源。
部署完成後,視窗中會顯示有關 CloudFormation 堆疊的摘要資訊,其中包含已部署應用程式的 URL (如果是以服務部署)。按一下 URL 會將瀏覽器啟動至已部署的應用程式。
從 CI/CD 管道部署
Visual Studio 中的發佈至 AWS 是專為進行應用程式迭代的開發人員所設計,不需要離開 IDE。針對 CI/CD 自動化,或針對不在 Windows 系統上工作的開發人員使用,AWS 提供擴展 dotnet CLI 的命令列版本。此工具可在 NuGet 上的 AWS.Deploy.Tools 套件中取得。
若要安裝,請開啟命令列 Shell 並執行下列命令:
dotnet tool install -g aws.deploy.tools
安裝後,藉由執行下列項目來檢視最上層命令選項:
dotnet aws
若要從包含應用程式專案的資料夾啟動部署,請執行:
dotnet aws deploy
使用 --help 參數可取得工具的其他說明及其所有命令。
使用 AWS.Deploy.Tools dotnet CLI 擴充功能將容器化應用程式部署至 AWS 的詳細資訊,包括在 CI/CD 自動化中的使用,都會在本單元稍後標題為從命令列將 .NET 容器部署至 AWS 的章節中進一步討論。
刪除使用「發佈至 AWS」進行的容器部署
使用「發佈至 AWS」進行的應用程式部署只是 AWS CloudFormation 堆疊。您可以透過以下方式刪除部署:
- 導覽至 AWS 管理主控台中的 CloudFormation 儀表板,並刪除相關聯的堆疊。
- 在 Visual Studio 中展開 AWS Explorer 中的 AWS CloudFormation 項目、選取堆疊,然後從堆疊的內容功能表中選擇「刪除」。
- 從命令列 Shell,使用安裝的 AWS.Tools.Deploy 套件執行命令 dotnet aws delete-deploymen。
此外,您也可以從命令列 Shell 使用 AWS Tools for PowerShell 命令 Remove-CFNStack,或是 AWS CLI 命令 aws cloudformation delete-stack,刪除代表已部署容器型應用程式的堆疊。
總結
發佈至 AWS 提供易於使用且可擴展的機制,將適合在容器中執行的 .NET 應用程式部署至 AWS,不需要 AWS 或甚至是雲端開發的廣泛知識。內建且可自訂的配方可讓開發人員在開發期間使用 AWS Fargate 和其他容器型服務,很方便地將應用程式從 Visual Studio 部署和重新部署到 Amazon ECS。「發佈至 AWS」是將 ASP.NET Core Web 和 Web API 應用程式 (包括伺服器端 Blazor) 部署至 AWS 上的容器的建議選項。
將容器發佈至 AWS
「將容器發佈至 AWS」是從 Visual Studio 將容器化 .NET 應用程式部署至 AWS 的原始、精靈型方法。現在被視為舊版方法,在撰寫本文時仍然在 Visual Studio 內支援精靈,但是在未來版本中可能會遭到移除。
與「發佈至 AWS」相比,「將容器發佈至 AWS」具有以下功能和限制:
- 僅支援部署至 Amazon ECS (使用或不使用 AWS Fargate)。「發佈至 AWS」也支援 AWS App Runner 以及虛擬機器服務,例如 AWS Elastic Beanstalk
- 支援將 ASP.NET Core Web 和 Web API 應用程式以及主控台應用程式部署至容器。這類似於「發佈至 AWS」提供的功能。
- 需要應用程式中已存在 Dockerfile。與「發佈至 AWS」不同,Dockerfile 不是自動產生的。如果應用程式的專案不包含 Dockerfile,則專案的內容功能表中不會顯示「將容器發佈至 ECS」選項。
- 與 AWS 雲端開發套件和 Node.js 不具相依性。
- 部署無法在精靈中可用的設定以外進行修改。無法使用「發佈至 AWS」所提供的自訂部署專案。
- 可與 dotnet CLI 工具擴充功能 Amazon.ECS.Tools 搭配使用,可於 NuGet 上取得。 透過簡單的 JSON 格式組態檔案 aws-ecs-tools-defaults.json,在精靈中選擇的組態設定可以與命令列體驗共享,從在命令列 Shell 中執行 dotnet ecs 開始。命令列選項適合無法使用 Visual Studio 或 AWS 工具組的開發人員,或適用於在 CI/CD 系統中進行自動部署。
注意:精靈包含一個橫幅,建議切換到新的「發佈至 AWS」體驗。在未來某個時間點,舊版精靈將從工具組中移除。
精靈會根據 AWS Explorer 視窗中目前的選擇預先填入 AWS 憑證和區域欄位。根據預設,專案的「版本」組態會部署到以專案命名的儲存庫,在需要時建立該儲存庫。
頁面底部的部署目標下拉式清單包含四個可能選項:
- ECS 叢集上的服務適用於需要全天候執行的應用程式,例如 Web 應用程式或可能是 Web API。
- 在 ECS 叢集上執行任務適用於執行一次然後結束的應用程式程式碼,例如主控台式應用程式。任務結束後,可以視需要手動重新執行。
- ECS 叢集上的排程任務適用於在結束前定期執行的任務。範例包括批次處理或隔夜 ETL 工作。
- 僅將 Docker 映像檔推送到 Amazon Elastic Container Registry 會建置應用程式的容器映像、針對您的私有註冊表進行驗證,並將其推送到私有註冊表中的儲存庫。不支援公有註冊表中的儲存庫。
選擇適當的目標後,「下一步」按鈕會移至在其中定義啟動組態的頁面。在此處和後續頁面中選取的資料會為您填入任務定義中。
選擇「為 ECS 叢集建立空白叢集」欄位,會將精靈鎖定為使用 AWS Fargate 進行部署。若要在不使用 AWS Fargate 的情況下部署到 Amazon ECS,您必須先使用其他工具 (例如 AWS 管理主控台) 建立必要的叢集資源,然後在精靈中選取現有的叢集。
如果在精靈開始時選取了 ECS 叢集上的服務,則下一頁會詢問要執行的任務數目、容器執行個體 (預設為 1),以及服務應維護的任務最小和最大百分比。若要使用現有服務,請在此處選取其名稱,或設定要建立的新服務的名稱。如果選取了 ECS 叢集上的任務,系統會改為要求您設定任務數目並為任務群組命名。以下螢幕擷取畫面顯示在部署 Web 應用程式時,ECS 叢集上的服務選項。
如果部署目標是服務,則精靈的下一頁可以設定 Application Load Balancer,並附有運作狀態檢查頁面。預設不會設定負載平衡器。對於任務型部署目標,因為構成任務的容器會執行一次然後結束,因此不會顯示負載平衡器頁面。
精靈的最終設定頁面包含將會包含在任務定義中的進一步選項,包括使用現有任務定義還是建立新的任務定義。在這裡也可以選取應用程式程式碼 (任務角色) 的 IAM 角色 (如果應用程式呼叫 AWS 服務),以及 Amazon ECS 將承擔的執行角色,授與您的私有註冊表映像和部署期間佈建資源所需其他資源的存取權。最後,指定應該公開的容器連接埠以及任何其他環境變數。
完成所有設定後,選取「發佈」即會開始部署。與較新的「發佈至 AWS」功能類似,工具組將會逐步執行一些步驟以完成部署。您可以在精靈中的進度輸出或 IDE 輸出視窗的 Amazon Web Services 窗格中追蹤這些步驟。
- 將會建置應用程式並建立容器映像。
- 驗證是針對您的 Amazon ECR 私有註冊表執行,並將映像推送到儲存庫。要使用的儲存庫名稱是在精靈的第一頁上指定,預設為專案名稱。
- 叢集和適用於精靈中所選擇的設定的其他資源會佈建和設定。
完成叢集的資源佈建後,工具組會開啟「叢集」檢視。您可以在這裡監控開始執行的任務進度,以符合精靈中指定的數量,如果精靈期間選取負載平衡器,則為服務尋找存取已部署應用程式的 URL。
從 CI/CD 管道部署到容器
Visual Studio 中的將容器發佈至 AWS 精靈是專為在其 IDE 內進行應用程式迭代的開發人員所設計。針對 CI/CD 自動化,或針對不在 Windows 系統上工作的開發人員使用,AWS 提供擴展 dotnet CLI 的 NuGet 工具套件,Amazon.ECS.Tools。若要安裝此工具,請開啟命令列 Shell 並執行下列命令:
dotnet tool install -g Amazon.ECS.Tools。
若要在安裝後開始使用,以檢視最上層命令選項,請執行下列命令:
dotnet ecs
若要開始部署,請從應用程式的專案資料夾內執行:
dotnet ecs deploy
使用 --help 參數可取得工具的其他說明及其所有命令。
針對先前在 Visual Studio 中使用精靈部署的應用程式,在精靈中選取的設定預設會以 JSON 格式文字檔案 aws-ecs-tols-defaults.json 提供。此檔案位於應用程式專案目錄中。這些設定將由命令列工具讀取,並可視需要覆寫。
使用 Amazon.ECS.Tools dotnet CLI 擴充功能將容器化應用程式部署至 AWS 的詳細資訊,包括在 CI/CD 自動化中的使用,都會在本單元稍後標題為從命令列將 .NET 容器部署至 AWS 的章節中進一步討論。
刪除使用「將容器發佈至 AWS」進行的部署
若要刪除使用「將容器發佈至 AWS」精靈進行的部署,請使用下列其中一種方法:
- 在 AWS 管理主控台中,導覽至 ECS 儀表板,在顯示的清單中選取叢集,然後在叢集的詳細資訊檢視中選擇刪除叢集。
- 在 Visual Studio 中,開啟已部署應用程式的叢集檢視,選擇編輯,然後將所需任務計數設定為 0。一旦沒有任何任務執行,請在「叢集」檢視中選取刪除,或從 AWS Explorer 檢視中叢集項目上的內容功能表中選取「刪除」以刪除叢集。
- 刪除叢集後,您可能也想要刪除包含部署期間使用的映像的儲存庫。
刪除叢集後,您可能也想要刪除包含部署期間使用的映像的儲存庫。
注意:Amazon.ECS.Tools 命令列擴充功能不支援刪除部署。
總結
將容器發佈至 AWS 提供精靈型方法,可將應用程式部署至 Amazon ECS (使用或不使用 AWS Fargate) 和 Amazon ECR。與僅支援 Amazon ECS、AWS Fargate 和 Amazon ECR 做為部署目標的發佈至 AWS、將容器發佈至 ECS 不同。此外,部署選項僅限於精靈或同等命令列中提供的選項,且無法自訂。「發佈至 AWS」是針對 .NET 應用程式部署至 AWS 的偏好取代工具。但是,針對那些無法採用新體驗的團隊,舊的精靈和命令列擴充功能仍然受到支援並可供使用。
從命令列將 .NET 容器部署到 AWS
AWS 提供兩個免費的命令列工具,可與容器化 .NET 應用程式搭配使用。兩者都在 NuGet 上發佈,並使用額外的命令來擴展dotnet CLI 體驗,可讓 .NET 應用程式部署到 Amazon ECS、AWS Fargate 和 Amazon ECR。這些 dotnet CLI 擴充功能不支援部署 .NET Framework 應用程式。
注意:截至本文撰寫時,雖然可以從命令列和 Visual Studio 使用自訂部署專案,但是只能使用命令列工具來建立它們。
AWS.Deploy.Tools
NuGet 上的 AWS.Deploy.Tools 套件是 Windows 上 Visual Studio 中「發佈至 AWS」的同等命令列。可在 Windows、macOS 和 Linux 平台上使用的命令列版本,會顯示 Visual Studio 中可用的相同部署配方。這包括選取為應用程式定義的自訂部署專案的能力。套件是以 GitHub 上的開放原始碼專案形式進行維護。
注意:截至本文撰寫時,雖然可以從命令列和 Visual Studio 使用自訂部署專案,但是只能使用命令列工具來建立它們。
若要安裝套件,請開啟命令列 Shell 並執行下列命令:
dotnet tool install -g aws.deploy.tools
定期發佈新版本,若要更新,請執行下列命令:
dotnet tool update -g aws.deploy.tools
就像在 Visual Studio 中發佈至 AWS 一樣,AWS.Deploy.Tools 套件與 Node.js 和 AWS 雲端開發套件具有相依性,因此請務必也安裝這些套件。
安裝後,若要驗證安裝成功並檢視可用的最上層命令選項,請執行:
dotnet aws
若要在命令列開始部署,請從包含您的應用程式專案檔案 (.csproj 檔案) 的資料夾中執行下列命令:
dotnet aws deploy
系統會分析應用程式,並顯示一組帶編號的部署配方供您選擇。在以下螢幕擷取畫面中,該工具已完成對目前沒有 Dockerfile 的應用程式的分析,並建議將其部署到 AWS Elastic Beanstalk 中的虛擬機器。但是,可以藉由輸入所需的配方編號 (在此案例中為 3),以使用 AWS Fargate 做為容器部署來加以變更。將會在部署期間建立一個 Dockerfile 並新增至專案中。
選取配方後,一系列提示會收集必要資訊,例如部署名稱 (預設為專案名稱,但是可變更)。其他選擇性設定可使用帶編號的子功能表進行調整。
在上方螢幕擷取畫面中,按「4」會針對應用程式選取自訂 IAM 角色,在執行時擔任該角色,而不是部署建立一個新的空白角色。輸入「更多」即可取得針對部署設定的其他進階選項。
一旦您對設定感到滿意,按 Enter 鍵即可開始部署。對於應用程式不需要指定自訂角色,而且建議的預設值是可接受的案例,只需按兩次 Enter 鍵,一次是確認預設部署名稱,再一次是開始部署應用程式。
就像從 Visual Studio 部署一樣,如果選取容器配方,則會視需要產生 Dockerfile,建置映像並推送到 Amazon ECR (該工具為您進行身分驗證),並建立 CDK 專案以佈建基礎設施,然後部署到 AWS CloudFormation。部署中的事件和其他狀態資訊會回應至終端機。最後,會與其他摘要資訊一起輸出應用程式端點 URL,例如叢集和服務名稱。
命令列也支援重新部署應用程式。當 dotnet aws deploy 在先前已部署之專案的資料夾中執行時,它首先會列出現有部署以供選擇,然後再列出選取新部署配方的選項。
從 CI/CD 管道部署容器
AWS.Deploy.Tools 可以在持續整合和交付管道中使用。但是在這些案例中,提示可能會出現問題。若要停用提示,請將 --silent 參數新增至您的命令。
停用提示時,工具在執行時無法收集部署設定。若要提供所有必要和選擇性設定,請在 JSON 格式文字檔案中指定它們,並使用 --apply 選項向部署命令提供檔案名稱以及選擇性地提供路徑:
dotnet aws deploy --apply settings.json –-silent
建立設定檔案不在本課程範圍內。工具的 GitHub 儲存庫中檔案定義的連結,可以在 AWS .NET GitHub 儲存庫中標題為「建立部署設定檔案」的章節中取得。
建立自訂部署專案
雖然這不是本課程的主題或進一步討論,但是請注意,您可以為容器化 .NET 應用程式建立自訂部署專案。建立自訂部署專案可讓您新增其他基礎設施或其他資產以支援已部署的應用程式,並自訂執行期環境。您可以將自訂部署專案與您的應用程式一起簽入來源控制,並在開發團隊之間共用,確保每個人都使用相同的設定和自訂,無論他們是從 Visual Studio 部署還是在命令列部署。
如需在 Visual Studio 中使用「發佈至 AWS」或在命令列使用 AWS.Deploy.Tools,以使用自訂部署專案的詳細資訊,請參閱 https://aws.github.io/aws-dotnet-deploy/docs/deployment-projects/cdk-project/。
刪除使用 AWS.Deploy.Tools 進行的容器部署
使用 AWS.Deploy.Tools 以及在 Visual Studio 中使用發佈至 AWS 執行的應用程式部署,在使用命令列時可以藉由執行下列命令輕易地刪除:
dotnet aws delete-deployment deployment-name
將 deployment-name 取代為針對部署建立之 AWS CloudFormation 堆疊的名稱。
Amazon.ECS.Tools
NuGet 上的 Amazon.ECS.Tools 套件是 Visual Studio 中「將容器發佈至 AWS」的同等命令列。該套件可以在 Windows、macOS 和 Linux 平台上使用,並且以 GitHub 上的開放原始碼專案形式維護。 該儲存庫包括其他兩個 dotnet CLI 擴充功能,用於部署到 AWS Lambda 和 AWS Elastic Beanstalk。
若要檢視最上層命令選項,請執行下列命令:
dotnet ecs
所有命令都有額外說明,可透過提供 --help 參數來存取。
若要開始部署,請先決定是要部署至服務 (持續執行)、任務 (執行一次然後結束) 還是排程任務 (定期執行,每次執行後結束)。或者,您可以建置映像並將其推送到您私有 Amazon ECR 註冊表中的儲存庫。對於本課程中使用的範例網站,持續執行服務是適當的選項。使用 --help 參數指定部署服務命令,會列出您可以套用的所有設定。
推送映像後,系統會提示您提供啟動類型,EC2 或 FARGATE。針對 EC2 啟動類型,您必須已經建立必要的叢集基礎設施。FARGATE 啟動類型不需要任何預先佈建,但確實需要指定任務的 CPU 和記憶體。如需最新的有效值組合,請參閱 https://docs.aws.amazon.com/AmazonECS/latest/userguide/task_definition_parameters.html,Linux 與 Windows 容器類型之間的值有些微不同。
在以下螢幕擷取畫面中,已選取 FARGATE 做為啟動類型,具有 512MiB 記憶體和對應 256 (.25 vCPU) CPU。此工具還會在完成部署之前提示叢集和服務名稱的值。輸入並驗證這些值後,系統會要求部署並結束命令。
注意:與本單元中先前討論的發佈至 AWS 和 AWS.Deploy.Tools 不同,Amazon.ECS.Tools 命令不會等待部署完成。您需要造訪管理主控台,或是在 Visual Studio 中使用「叢集」檢視,以取得像是已部署應用程式 URL 的資料。
此部署撰寫的設定檔案顯示在以下螢幕擷取畫面中。它大致類似於針對從 Visual Studio 開始的部署所撰寫的內容 (IDE 版本會撰寫更多設定)。這個檔案可以與應用程式程式碼一起簽入原始程式碼儲存庫中,並與 Windows 上的 Visual Studio 以及 Windows、macOS 和 Linux 上的命令列部署搭配使用。可以手動策劃更廣泛的設定檔案,為所有命令列選項提供值。為了方便起見,選項的名稱對應於設定檔案中的索引鍵。
從 CI/CD 管道部署容器
Amazon.ECS.Tools 可以在持續整合和交付管道中使用。但是在這些案例中,提示可能會出現問題。若要停用提示,請將 --disable-interactive 參數新增至您的命令。
停用提示時,工具在執行時無法收集部署設定。若要提供所有必要和選擇性設定,請在 JSON 格式設定檔案中指定它們,並使用 --config-file 選項向部署命令提供檔案名稱以及選擇性地提供路徑
刪除使用 Amazon.ECS.Tools 進行的容器部署
Amazon.ECS.Tools 不支援從命令列刪除已部署容器應用程式。若要刪除部署,請使用下列其中一個選項。
- 在 AWS 管理主控台中,導覽至 ECS 儀表板,在顯示的清單中選取叢集,然後在叢集的詳細資訊檢視中選擇刪除叢集。
- 在 Visual Studio 中,開啟已部署應用程式的叢集檢視,選擇編輯,然後將所需任務計數設定為 0。一旦沒有任何任務執行,請在「叢集」檢視中選取刪除,或從 AWS Explorer 檢視中叢集項目上的內容功能表中選取「刪除」以刪除叢集。
刪除叢集後,您可能也想要刪除包含部署期間使用的映像的儲存庫
從 Azure DevOps 將 .NET 容器部署到 AWS
若要從 Azure DevOps 管道將 .NET 應用程式部署至 Amazon ECS 和 AWS Fargate,可以使用本單元中先前概述的使用 AWS.Deploy.Tools 或 Amazon.ECS.Tools dotnet CLI 擴充功能選項。在這兩個案例中,在管道期間如下所示安裝工具,然後在 Shell 任務中執行適當部署命令,使用設定組態檔案來提供必要和選擇性設定,伴隨 --silent (AWS.Deploy.Tools) 或 -disable-interactive- (Amazon.ECS.Tools) 選項來隱藏提示。
或者,針對建置需要簡單地向您的私有 Amazon ECR 註冊表中的儲存庫推送或提取映像的案例,AWS Tools for Azure DevOps 擴充功能包含兩個您可能會覺得方便的任務。
這些工具可以從 Azure DevOps 市集安裝。安裝並使用服務憑證設定後,請將 Amazon ECR 推送或 Amazon ECR 提取任務新增至您的建置管道中。以下是推送命令中可用設定的螢幕擷取畫面。
這些任務使得針對先前在管道中建置的映像設定推送或提取操作變得簡單方便,為您對儲存庫處理所需的授權程序。工具是以 GitHub 上的開放原始碼專案形式維護,如需安裝後組態和工具內個別任務的詳細資訊,可於使用者指南中找到。
知識檢查
您現在已完成單元 2,AWS 上的 .NET 容器開發工具。以下測試可讓您檢查到目前為止學習到的內容。
1.「發佈至 AWS」工具發佈哪些服務?(選取兩個)
a.Lambda
b.ECS
c.EC2
d.ECR
2.使用「發佈至 AWS」工具需要哪兩個先決條件?
a.C# 和 Node.js
b.CDK 和 Node.js
c.Python 和 CDK
d.Python 和 Node.js
3.AWS.Deploy.Tools 套件可以在哪些作業系統上使用?
a.Windows
b. macOS
c.Linuxs
d.以上皆是
答案:1-b 和 d,2-b,3-d