模块 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 以及在命令行中使用 dotnet CLI 扩展来使用 Amazon ECS、AWS Fargate 和 Amazon ECR。
完成时间
60 分钟
使用 Visual Studio 将 .NET 应用程序部署到 AWS
AWS Toolkit for Visual Studio 是 Windows 版 Visual Studio 的免费扩展程序(它不支持 Mac 版 Visual Studio)。该工具包提供了一个可用于浏览多项 AWS 服务(包括容器服务)的服务浏览器窗口,以及帮助构建应用程序并将其发布到 AWS Cloud 中的向导。这些向导支持从 Visual Studio 中将 .NET 和 .NET Framework 应用程序部署到 AWS Elastic Beanstalk、Amazon ECS 和 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 各区服务浏览器工件窗口顶部的配置文件:下拉列表中。
如果此窗口不可见,请使用 IDE 的视图菜单中的 AWS 各区服务浏览器项来显示它。选择一个凭证配置文件(或创建一个),然后从服务浏览器窗口中的“区域:”下拉控件中选择一个 AWS 区域以开始。
从 AWS 各区服务浏览器视图使用 Amazon ECS 和 Amazon ECR
在服务浏览器中选择凭证配置文件和区域后,可以从 Visual Studio 中访问您在 Amazon ECS 和 Amazon ECR 中的资源。在 AWS 各区服务浏览器窗口中,在服务浏览器中展开 Amazon Elastic Container Service 项目及其两个子项目(集群和存储库)后,您将能够使用 ECR 私有注册表中属于所选区域的现有集群和存储库。该工具包不支持使用您的 ECR 公共注册表。
查看下面的每一项,了解有关集群组、每个集群、存储库组以及资源管理器视图中显示的每个存储库的上下文菜单中可用的功能的更多信息。
集群上下文菜单
集群组上的上下文菜单提供以下选项:
- 刷新:更新服务浏览器中显示的集群集合。
集群上下文菜单
服务浏览器中显示的每个已部署集群的上下文菜单提供以下选项:
- 查看集群详细信息(在新文档窗口中打开)。
- 删除集群。
集群有正在运行的任务时,将无法删除。可以通过以下方式从集群中清空任务:首先使用“视图”菜单选项打开集群的详细信息视图,然后在视图中选择“编辑”,并将“所需任务”值设置为 0。清空所有正在运行的任务后,使用视图中的删除按钮或快捷菜单条目删除集群。集群详细信息的视图如下所示:
存储库上下文菜单
存储库组上的上下文菜单提供以下选项:
- 创建存储库:打开一个对话框窗口,用于输入新存储库的名称。请注意,新的存储库只能在您的私有注册表中创建。
- 刷新:更新服务浏览器中显示的存储库集合。
存储库上下文菜单
存储库组下列出的存储库的上下文菜单提供以下选项:
- 视图:打开一个新的文档窗口,其中列出了存储库中包含的映像。也可以在此处查看将映像推送到此存储库所需的特定命令
- 删除:打开一个对话框窗口,用于确认删除存储库。在删除存储库本身之前,可以通过该工具包选择删除存储库中包含的所有映像(无法删除非空存储库)。
从 Visual Studio 部署到 Amazon ECS 和 Amazon ECR
除了在 AWS 各区服务浏览器中使用集群和存储库之外,该工具包还提供两个部署选项,可帮助您将容器应用程序和映像部署到 Amazon ECS、AWS Fargate 和 Amazon ECR。这两个选项都可以从解决方案资源管理器中的应用程序项目的上下文菜单中找到:发布到 AWS 和将容器发布到 AWS(旧版)。
以下部分描述了每个选项以及您何时可以选择使用它们。
发布到 AWS
发布到 AWS 支持使用 AWS Fargate、AWS App Runner 和 AWS Elastic Beanstalk 中的虚拟机将 .NET 应用程序部署到 Amazon ECS。它还可用于将容器映像发布到 Amazon ECR。除了从单个 IDE 门户提供对多种服务的部署之外,发布到 AWS 还能够:
- 为应用程序创建自定义部署项目。自定义部署项目支持在部署期间构建额外的 AWS 资源以及自定义部署 UX 设置。通过将部署项目与应用程序一起检入源代码管理,开发团队在从 Visual Studio 中部署应用程序时都可以访问适用于该应用程序的相同自定义设置和部署资源。
- 从 NuGet 安装 AWS.Deploy.Tools 包后即可获得 dotnet 命令行体验。命令行体验显示相同的选项,包括使用自定义部署项目添加的选项。本节稍后将讨论如何使用命令行工具。在部署到 AWS 容器服务时,应用程序不需要现成的 Dockerfile;如果需要,系统将生成一个 Dockerfile。
注意:发布到 AWS 仅支持 .NET 应用程序;它不支持部署使用 .NET Framework 的应用程序。
注意:我们将在另一门课程“AWS App Runner 上的 .NET 工作负载”中讨论如何部署到 AWS App Runner。
发布到 AWS 有几个必备安装程序,缺少其中任何一项都会发出提示。AWS Cloud Deployment Kit(CDK)用于预置和配置 AWS 资源以支持应用程序部署。CDK 需要安装 Node.js。打开浏览器访问 https://nodejs.org/en/ 并安装最新的长期支持(LTS)或当前版本的 Node.js。安装 Node.js 后,打开命令 Shell 并运行命令 npm install -g aws-cdk 以安装 CDK。安装这两个必备程序后,即可使用“发布到 AWS”执行部署。
从解决方案资源管理器中的应用程序项目的上下文菜单开始发布到 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 即可迭代应用程序。AWS 提供了扩展 dotnet CLI 的命令行版本,以实现 CI/CD 自动化,或者供不在 Windows 系统上工作的开发人员使用。该工具可在 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 各区服务浏览器中的 AWS CloudFormation 条目,选择堆栈,然后从堆栈的上下文菜单中选择“删除”。
- 从命令行 Shell 中,使用安装的 AWS.Tools.Deploy 软件包运行命令 dotnet aws delete-deployment。
您还可以从命令行 Shell 中使用 AWS Tools for PowerShell 命令 Remove-CFNStack 或 AWS CLI 命令 aws cloudformation delete-stack 来删除表示已部署的基于容器的应用程序的堆栈。
摘要
发布到 AWS 提供了一种易于使用且可扩展的机制,让您无需具备丰富的 AWS 知识甚至云开发知识,即可将适合在 AWS 上的容器中运行的 .NET 应用程序部署到 AWS 上。内置且可自定义的配方使开发人员能够在开发过程中使用 AWS Fargate 和其他基于容器的服务,方便地从 Visual Studio 到 Amazon ECS 中部署和重新部署应用程序。将 ASP.NET Core Web 和 Web API 应用程序(包括服务器端 Blazor)部署到 AWS 上的容器时,建议选择“发布到 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 Cloud Development Kit 和 Node.js。
- 部署的修改不能超出向导中可用的设置。自定义部署项目(如“发布到 AWS”提供的项目)不可用。
- 可与 NuGet 上提供的 dotnet CLI 工具扩展 Amazon.ECS.Tools 一起使用。 通过简单的 JSON 格式配置文件 aws-ecs-tools-defaults.json,可以通过在命令行 Shell 中运行 dotnet ecs 启动的命令行体验来共享向导中选择的配置设置。命令行选项适合无法使用 Visual Studio 或 AWS 工具包的开发人员,或适合在 CI/CD 系统中进行自动化部署的开发人员。
注意:该向导包含一条横幅,建议切换到新的“发布到 AWS”体验。旧版向导会在将来某一时间将从工具包中删除。
该向导将根据 AWS 各区服务浏览器窗口中的当前选择预填充“AWS 凭证”和“区域”字段。默认情况下,项目的发布配置会部署到以项目命名的存储库中,该存储库将在需要时创建。
页面底部的部署目标下拉列表包含四个可能的选项:
- ECS 集群上的服务适合需要 24x7 运行的应用程序,例如 Web 应用程序或可能的 Web API。
- 在 ECS 集群上运行任务适合运行一次即退出的应用程序代码,例如基于控制台的应用程序。任务退出后,可以根据需要手动重新运行。
- ECS 集群上的计划任务适合在退出前定期运行的任务。示例包括批处理或隔夜 ETL 作业。
- 仅将 Docker 映像推送到 Amazon Elastic Container Registry 将为应用程序构建容器映像,根据您的私有注册表进行身份验证,并将其推送到私有注册表中的存储库。不支持公共注册表中的存储库。
选择适当的目标后,“下一步”按钮将移至定义启动配置的页面。此处和后续页面中选择的数据将填充到您的任务定义中。
为 ECS 集群字段选择创建空集群会将向导锁定到使用 AWS Fargate 的部署。要在不使用 AWS Fargate 的情况下部署到 Amazon ECS,您必须首先使用 AWS 管理控制台等其他工具创建必要的集群资源,然后在向导中选择现有集群。
如果在向导开始时选择 ECS 集群上的服务,则下一页会询问要运行的任务、容器实例的数量(默认为 1)以及服务应维护的最小和最大任务百分比。要使用现有服务,请在此处选择其名称或设置要创建的新服务的名称。如果选择了 ECS 集群上的任务,则系统会要求您设置任务数量并为任务组指定名称。下面的屏幕截图显示了部署 Web 应用程序时,适用于 ECS 集群上的服务的选项。
如果部署目标是服务,则向导的下一页允许配置应用程序负载均衡器,并包含运行状况检查页面。默认情况下,没有配置负载均衡器。对于基于任务的部署目标,不会显示负载均衡器页面,因为组成任务的容器运行一次即退出。
向导的最终设置页面包含更多将包含在任务定义中的选项,包括是使用现有任务定义还是创建新的任务定义。如果应用程序调用 AWS 服务,请在此处为应用程序代码选择 IAM 角色(任务角色),以及将由 Amazon ECS 担任的执行角色,以授予对您的私有注册表映像以及部署期间预置资源所需的其他资源的访问权限。最后,指定应公开的容器端口以及任何其他环境变量。
完成所有设置后,选择“发布”开始部署。与新的“发布到 AWS”功能类似,该工具包将逐步完成部署。可以在向导的进度输出中执行这些步骤,也可以在 IDE 输出窗口的 Amazon Web Services 窗格中执行这些步骤。
- 将构建应用程序并创建容器映像。
- 根据您的 Amazon ECR 私有注册表执行身份验证,并将映像推送到存储库。要使用的存储库的名称在向导的第一页上指定,默认为项目名称。
- 预置和配置适合向导中选择的设置的集群和其他资源。
集群的资源配置完成后,工具包将打开集群视图。在这里,您可以监控开始运行的任务达到向导中指定数量的进度,而且对于服务,如果在向导期间选择了负载均衡器,则可以找到用于访问已部署应用程序的 URL。
从 CI/CD 管道部署到容器
Visual Studio 中的将容器发布到 AWS 向导专为开发人员在其 IDE 内迭代应用程序而设计。AWS 提供了扩展 dotnet CLI 的 NuGet 工具包 Amazon.ECS.Tools,以实现 CI/CD 自动化,或者供不使用 Windows 系统的开发人员使用。要安装此工具,请打开命令行 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 各区服务浏览器视图中集群条目的上下文菜单中选择删除,以删除集群。
- 删除集群后,您可能还需要删除包含部署期间所使用的映像的存储库。
删除集群后,您可能还需要删除包含部署期间所使用的映像的存储库。
注意:Amazon.ECS.Tools 命令行扩展不支持删除部署。
摘要
将容器发布到 AWS 提供了一种基于向导的方法来将应用程序部署到 Amazon ECS(带或不带 AWS Fargate)和 Amazon ECR。与发布到 AWS 不同,发布容器到 ECS 仅支持 Amazon ECS、AWS Fargate 和 Amazon ECR 作为部署目标。此外,部署选项仅限于向导或等效命令行中提供的选项,并且无法自定义。发布到 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 Cloud Development Kit,因此请务必安装它们。
安装后,要验证安装已成功并查看顶级命令选项,请运行:
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
创建设置文件不在本课程讨论范围内。标题为“在 AWS .NET GitHub 存储库中创建部署设置文件”的部分提供了该工具的 GitHub 存储库中文件定义的链接。
创建自定义部署项目
虽然不是本课程的主题,也未就此进行详细讨论,但请注意,您可以为容器化 .NET 应用程序创建自定义部署项目。创建自定义部署项目使您能够添加其他基础设施或其他资产来支持已部署的应用程序,并自定义运行时系统环境。自定义部署项目可以与应用程序一起签入源代码管理,并在开发团队中共享,确保每个人都使用相同的设置和自定义进行部署,无论他们是从 Visual Studio 还是在命令行进行部署。
有关在 Visual Studio 中使用自定义部署项目和发布到 AWS 的更多信息,请参阅 https://aws.github.io/aws-dotnet-deploy/docs/deployment-projects/cdk-project/,或访问 AWS.Deploy.Tools 命令行。
删除使用 AWS.Deploy.Tools 进行的容器部署
在命令行中运行以下命令时,可以轻松删除在 Visual Studio 中使用 AWS.Deploy.Tools 和发布到 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 上的开源项目进行维护。 该存储库包括另外两个用于部署到 AWS Lambda 和 AWS Elastic Beanstalk 的 dotnet CLI 扩展。
要查看顶级命令选项,请运行以下命令:
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 各区服务浏览器视图中集群条目的上下文菜单中选择删除,以删除集群。
删除集群后,您可能还需要删除包含部署期间所使用的映像的存储库
将 .NET 容器从 Azure DevOps 部署到 AWS
要将 .NET 应用程序从 Azure DevOps 管道部署到 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 Push 或 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