在 Amazon EC2 Linux 实例上运行 ASP.NET Core Web API Docker 容器 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Amazon EC2 Linux 实例上运行 ASP.NET Core Web API Docker 容器

由 Vijai Anand Ramalingam (AWS) 和 Sreelaxmi Pai (AWS) 编写

环境:PoC 或试点

技术:容器和微服务; DevelopmentAndTesting;Web 和移动应用程序

工作负载:Microsoft

Amazon Web Services:Amazon EC2、弹性负载均衡(ELB)

Summary

这种模式适用于开始在 Amazon Web Services (AWS) Cloud 上对其应用程序进行容器化的人员。当您开始在云上容器化应用程序时,通常没有设置容器编排平台。这种模式可以帮助您在 AWS 上快速设置基础设施来测试您的容器化应用程序,而无需复杂的容器编排基础设施。

现代化进程第一步是改造应用程序。如果是旧版.NET 框架应用程序,则必须先将其运行时系统更改为 ASP.NET Core。然后执行以下操作:

  • 创建 Docker 容器镜像

  • 从该镜像运行 Docker 容器。

  • 在将应用程序部署到任何容器编排平台(例如 Amazon Elastic Container Service (Amazon ECS) 或 Amazon Elastic Kubernetes Service (Amazon EKS))之前验证应用程序。 

此模式涵盖 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例上现代应用程序开发的构建、运行和验证方面。

先决条件和限制

先决条件

产品版本

  • Visual Studio Community 2022 及以上版本

架构

目标架构

此模式使用 A WS CloudFormation 模板创建高可用架构,如下图所示。Amazon EC2 Linux 实例在私有子网启动。AWS Systems Manager 会话管理器用于访问私有 Amazon EC2 Linux 实例和测试 Docker 容器中运行 API。

访问亚马逊 EC2 Linux 实例并测试在 Docker 容器中运行的 API 的用户。
  1. 通过 Session Manager 访问 Linux 实例

工具

Amazon Web Services

  • AWS 命令行界面 - AWS 命令行界面(AWS CLI)是一种开源工具,它使您能够使用命令行 Shell 中的命令与 Amazon Web Services 交互。仅需最少的配置,即可使用 AWS CLI 开始运行命令,以便从终端程序中的命令提示符实现与基于浏览器的 AWS 管理控制台 所提供的功能等同的功能:

  • AWS 管理控制台 - AWS 管理控制台是一款 Web 应用程序,其中包含并引用了多种用于管理 AWS 资源的服务控制台。首次登录时,您会看到控制台主页。主页提供了对每个服务控制台的访问权限,并提供了访问执行 AWS 相关任务所需信息的单一位置。

  • AWS Systems Manager 会话管理器 – 会话管理器是一项完全托管的 AWS Systems Manager 功能。您可以在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上托管 Siebel 服务器。Session Manager 提供安全且可审计的节点管理,无需打开入站端口、维护堡垒主机或者管理 SSH 密钥。

其他工具

  • Visual Studio 2022 – Visual Studio 2022 是一种集成式开发环境(IDE)。

  • Docker - Docker 是一组平台即服务(PaaS)产品,它们使用操作系统级别的虚拟化技术在容器中交付软件。

代码

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src COPY ["DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj", "DemoNetCoreWebAPI/"] RUN dotnet restore "DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj" COPY . . WORKDIR "/src/DemoNetCoreWebAPI" RUN dotnet build "DemoNetCoreWebAPI.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "DemoNetCoreWebAPI.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "DemoNetCoreWebAPI.dll"]

操作说明

任务描述所需技能

使用 Visual Studio 创建 ASP.NET Core web API

要创建示例 ASP.NET Core web API,请执行以下操作:

  1. 打开 Visual Studio 2022

  2. 选择 Create a new project

  3. 选择 ASP.NET Core Web API 项目模板,然后选择下一步

  4. 对于项目名称,输入 DemoNetCoreWebAPI,然后选择下一步

  5. 选择 Create(创建)。

  6. 要在本地运行项目,请按 F5。

  7. 验证默认 WeatherForecastAPI 端点是否使用 Swagg er 返回结果。

  8. 打开命令提示符,导航到.csproj 项目文件夹,然后运行以下命令将新的 Web API 推送到您的存储库。 GitHub  

    git add --all git commit -m “Initial Version” git push
应用程序开发人员

创建 Dockerfile。

要创建新文件,请执行以下操作之一:

  • 使用代码部分中的示例 Dockerfile 手动创建 Dockerfile。根据要求,选择相应的 .NET 基础镜像。有关.NET 和 ASP.NET Core 相关镜像的信息,请参见 Docker 中心。 

  • 使用 Visual Studio 和 Docker 桌面创建 Docker Desktop。在解决方案资源管理器中,右键单击项目,选择添加-> Docker Support。对于目标操作系统,选择 Linux。确保新的 Dockerfile 与解决方案文件 (.sln) 路径相同。 

要将更改推送到您的 GitHub 存储库,请运行以下命令。

git add --all git commit -m “Dockerfile added” git push
应用程序开发人员
任务描述所需技能

设置基础设施。

启动 A WS CloudFormation 模板以创建基础设施,其中包括以下内容: 

  • 虚拟私有云(VPC),使用 AWS VPC 快速入门,具有跨越两个可用区的两个公有子网和两个私有子网。

  • 启用 AWS Systems Manager 所需 IAM 角色。

  • 在其中一个私有子网中,一个带有最新 SSM 代理 Amazon Linux 2 演示实例。尽管此实例没有任何来自 Internet 的直接连接,但可以使用 AWS Systems Manager 会话管理器安全地访问它,而无需堡垒主机。

要详细了解如何使用会话管理器访问私有 Amazon EC2 实例而无需堡垒主机,请参阅 迈向无堡垒世界博客文章。

应用程序开发人员、AWS 管理员、AWS DevOps

登录到您的 Amazon EC2 实例。

要连接至私有子网中的 Amazon Elinux 实例,请执行以下操作:

  1. 打开 Amazon EC2 控制台。      

  2. 在导航窗格中,选择实例

  3. 选择 Amazon Linux 2 演示实例,然后选择 Connect

  4. 选择 Session Manager(会话管理器)。

  5. 选择连接以打开终端窗口。

  6. 运行以下命令。

     sudo su
应用程序开发人员

安装并运行 Docker

要在 Amazon EC2 Linux 实例中安装并启动 Docker,请执行以下操作:

  1. 要安装,请运行以下命令:

    yum install -y docker
  2. 要重新启动 Docker 服务,运行以下命令:

     service docker start
  3. 要验证 Docker 的安装,请运行以下命令。

    docker info
应用程序开发人员、AWS 管理员、AWS DevOps

安装 Git 并克隆存储库。

要在 Amazon EC2 Linux 实例上安装 Git 并从中克隆存储库 GitHub,请执行以下操作。

  1. 要安装 Git,请运行以下命令。

    yum install git -y
  2. 要克隆存储库,请运行以下命令。

    git clone https://github.com/<username>/<repo-name>.git
  3. 要导航到 Dockerfile,请运行以下命令。

    cd <repo-name>/DemoNetCoreWebAPI/
应用程序开发人员、AWS 管理员、AWS DevOps

运行 Docker 容器。

要构建 Docker 映像并在 Amazon EC2 Linux 实例中运行容器,请执行以下操作:

  1. 要创建 Docker 映像,请运行以下命令。

    docker build -t aspnetcorewebapiimage -f Dockerfile .
  2. 要获取 Docker 映像的列表,请运行以下命令。

    docker images
  3. 运行以下命令来创建和运行容器。

    docker run -d -p 80:80 --name aspnetcorewebapicontainer aspnetcorewebapiimage
应用程序开发人员、AWS 管理员、AWS DevOps
任务描述所需技能

使用 curl 命令测试 Web API。

使用以下命令可运行 RSA 测试。

curl -X GET "http://localhost/WeatherForecast" -H "accept: text/plain"

验证 API 响应。

注意:本地运行 Swagger 时,可以从 Swagger 获取每个端点的 curl 命令。

应用程序开发人员
任务描述所需技能

删除资源

删除堆栈,以移除所有资源。这确保您不会为未使用的任何服务付费。

AWS 管理员,AWS DevOps

相关资源