教程:使用 Elastic Beanstalk 在 Linux 上部署 ASP.NET Core 应用程序 - AWS Elastic Beanstalk
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

教程:使用 Elastic Beanstalk 在 Linux 上部署 ASP.NET Core 应用程序

本教程介绍构建新的 ASP.NET Core 应用程序并使用 Elastic Beanstalk 将其部署到 Amazon Linux 2 环境的过程。

在本教程中,您首先使用 .NET Core 开发工具包的 dotnet 命令行工具执行以下操作:

  • 生成一个使用 ASP.NET 为 HTTP 请求提供服务的应用程序。

  • 安装运行时依赖项。

  • 在本地编译和运行 Web 应用程序。

  • 将应用程序构件发布到输出目录。这些构件包括编译的源代码、运行时依赖项和配置文件。

接下来,对新创建的应用程序执行以下操作:

  • 创建包含已发布构件的应用程序源包。

  • 创建 Amazon Linux 2 环境,然后使用 Elastic Beanstalk 将应用程序部署到该环境中。

  • 打开 Elastic Beanstalk 创建的网站 URL 以运行您的应用程序。

应用程序源代码可在此处找到:dotnet-core-linux-tutorial-source.zip

可部署的源包可以在这里找到:dotnet-core-linux-tutorial-bundle

先决条件

本教程使用 .NET Core 开发工具包生成基本 .NET Core Web 应用程序,在本地运行该应用程序,并构建可部署的程序包。

要求

  • .NET Core (x64) 2.1.19 或更高版本

安装 .NET Core 开发工具包

  1. microsoft.com/net/core 下载安装程序。选择您的开发平台。选择下载 .NET Core 开发工具包

  2. 运行安装程序并按说明操作。

注意

尽管本教程中的示例是 Windows 命令行中的列表,但 .NET Core 开发工具包在多个操作系统上支持开发平台。本教程中显示的 dotnet 命令在不同的开发平台之间是一致的。

本教程使用命令行 ZIP 实用工具创建一个源包,您可以将该源包部署到 Elastic Beanstalk。要在 Windows 中使用 zip 命令,您可以安装 UnxUtils。(UnxUtils 是一个轻量级、有用的命令行实用程序(如 zipls)的集合。) 或者,可以使用 Windows 资源管理器或任何其他 ZIP 实用工具创建源包存档。

安装 UnxUtils

  1. 下载 UnxUtils.

  2. 将存档提取到本地目录。例如:C:\Program Files (x86)

  3. 将二进制的路径添加到 Windows PATH 用户变量。例如:C:\Program Files (x86)\UnxUtils\usr\local\wbin

    1. 按下 Windows 键,然后键入 environment variables

    2. 选择 Edit environment variables for your account

    3. 选择 PATH,然后选择编辑

    4. Variable value 字段添加路径,中间用分号隔开。例如:C:\item1\path;C:\item2\path

    5. 选择 OK 两次以应用新设置。

    6. 关闭任何正在运行的命令提示符窗口,然后重新打开命令提示符窗口。

  4. 打开一个新的命令提示符窗口并运行 zip 命令,验证它是否有效。

    > zip -h Copyright (C) 1990-1999 Info-ZIP Type 'zip "-L"' for software license. ...

将 .NET Core 项目作为 Web 应用程序生成

使用 dotnet 命令行工具生成一个新的 C# .NET Core Web 应用程序项目并在本地运行它。默认的 .NET Core Web 应用程序将显示 Hello World!

生成新的 .NET Core 项目

  1. 打开一个新的命令提示窗口并导航至您的用户文件夹。

    > cd %USERPROFILE%
  2. 使用 dotnet new 命令生成新的 .NET Core 项目。

    C:\Users\username> dotnet new web -o dotnet-core-tutorial The template "ASP.NET Core Empty" was created successfully. Processing post-creation actions... Running 'dotnet restore' on dotnet-core-tutorial\dotnet-core-tutorial.csproj... Determining projects to restore... Restored C:\Users\username\dotnet-core-tutorial\dotnet-core-tutorial.csproj (in 154 ms). Restore succeeded.

在本地运行网站

  1. 使用 dotnet restore 命令安装依赖项。

    C:\Users\username> cd dotnet-core-tutorial C:\Users\username\dotnet-core-tutorial> dotnet restore Determining projects to restore... All projects are up-to-date for restore.
  2. 使用 dotnet run 命令在本地构建和启动应用程序。

    C:\Users\username\dotnet-core-tutorial> dotnet run info: Microsoft.Hosting.Lifetime[0] Now listening on: https://localhost:5001 info: Microsoft.Hosting.Lifetime[0] Now listening on: http://localhost:5000 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: C:\Users\username\dotnet-core-tutorial
  3. 打开 localhost:5000 以从默认 Web 浏览器查看站点。

    应用程序返回 Hello World!,该应用程序将显示在您的 Web 浏览器上。

要在 Web 服务器上运行应用程序,您必须将已编译的源代码与 web.config 配置文件和运行时依赖项捆绑。dotnet 工具提供了一个 publish 命令,该命令根据 dotnet-core-tutorial.csproj 中的配置将这些文件聚集在一个目录中。

构建您的网站

  • 使用 dotnet publish 命令将已编译代码和依赖项输出到一个名为 site 的文件夹。

    C:\users\username\dotnet-core-tutorial> dotnet publish -o site Microsoft (R) Build Engine version 16.7.0-preview-20360-03+188921e2f for .NET Copyright (C) Microsoft Corporation. All rights reserved. Determining projects to restore... All projects are up-to-date for restore. dotnet-core-tutorial -> C:\Users\username\dotnet-core-tutorial\bin\Debug\netcoreapp3.1\dotnet-core-tutorial.dll dotnet-core-tutorial -> C:\Users\username\dotnet-core-tutorial\site\

创建源包

  • 使用 zip 命令创建一个名为 dotnet-core-tutorial.zip 的源包。

    源包中包含发布到站点文件夹的所有文件。

    注意

    如果您使用不同的 ZIP 实用程序,请确保将所有文件添加到生成的 ZIP 存档的根文件夹中。这是成功将应用程序部署到您的 Elastic Beanstalk 环境所必需的。

    C:\users\username\dotnet-core-tutorial> cd site C:\users\username\dotnet-core-tutorial\site>zip ../dotnet-core-tutorial.zip * adding: appsettings.Development.json (164 bytes security) (deflated 38%) adding: appsettings.json (164 bytes security) (deflated 39%) adding: dotnet-core-tutorial.deps.json (164 bytes security) (deflated 93%) adding: dotnet-core-tutorial.dll (164 bytes security) (deflated 58%) adding: dotnet-core-tutorial.exe (164 bytes security) (deflated 57%) adding: dotnet-core-tutorial.pdb (164 bytes security) (deflated 48%) adding: dotnet-core-tutorial.runtimeconfig.json (164 bytes security) (deflated 33%) adding: web.config (164 bytes security) (deflated 41%)
    注意

    在本教程中,您只在 Web 服务器上运行一个应用程序,因此源包中不需要 Procfile。但是,要在同一 Web 服务器上部署多个应用程序,必须包含 Procfile。有关更多信息,请参阅 使用 Procfile 配置 .NET Core on Linux 环境

启动 Elastic Beanstalk 环境并部署应用程序

使用 Elastic Beanstalk 控制台启动 Elastic Beanstalk 环境并部署源包。

源包可在此处下载:dotnet-core-linux-tutorial-bundle

启动环境并部署代码(控制台)

  1. 使用下面的预配置链接打开 Elastic Beanstalk 控制台:console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced

  2. 对于 Platform (平台),选择 .NET Core on Linux

  3. 选择 Local file (本地文件),再选择 Choose file (选择文件),然后打开源包。

  4. 选择 Review and launch (复查并启动)

  5. 查看可用设置并选择 Create app (创建应用程序)。应用程序将 Hello World! 写入到响应并返回。

创建环境并部署代码大约需要 10 分钟。

启动环境将创建以下资源:

  • EC2 实例 - 配置为在您选择的平台上运行 Web 应用程序的 Amazon Elastic Compute Cloud (Amazon EC2) 虚拟机。

    各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 NGINX 作为 Web 应用程序前的反向代理,向其转发请求、提供静态资产以及生成访问和错误日志。

  • 实例安全组 - 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。通过此资源,HTTP 流量可以从负载均衡器到达运行您的 Web 应用程序的 EC2 实例。默认情况下,其他端口不允许流量进入。

  • 负载均衡器 - 配置为向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。

  • 负载均衡器安全组 - 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。利用此资源,HTTP 流量可从 Internet 到达负载均衡器。默认情况下,其他端口不允许流量进入。

  • Auto Scaling 组 - 配置为在实例终止或不可用时替换实例的 Auto Scaling 组。

  • Amazon S3 存储桶 - 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。

  • Amazon CloudWatch 警报 - 用于监控环境中的实例负载的两个 CloudWatch 警报,它们将在负载过高或过低时触发。警报触发后,您的 Auto Scaling 组会扩展或收缩以进行响应。

  • AWS CloudFormation 堆栈 - Elastic Beanstalk 使用 AWS CloudFormation 启动环境中的资源并传播配置更改。这些资源在您可在 AWS CloudFormation 控制台中查看的模板中定义。

  • 域名 - 一个域名,它以下面的形式路由到您的 Web 应用程序:subdomain.region.elasticbeanstalk.com

Elastic Beanstalk 管理所有这些资源。当您终止环境时,Elastic Beanstalk 会终止其包含的所有资源。

注意

Elastic Beanstalk 创建的 Amazon S3 存储桶将在多个环境之间共享,并且在您终止环境时不会被删除。有关更多信息,请参阅将 Elastic Beanstalk 和 Amazon S3 结合使用

清除

Elastic Beanstalk 使用完毕时,您可以终止您的环境。Elastic Beanstalk 会终止与环境关联的所有 AWS 资源,例如 Amazon EC2 实例数据库实例负载均衡器、安全组和警报

终止 Elastic Beanstalk 环境

  1. 打开 Elastic Beanstalk 控制台,然后在 Regions (区域) 列表中选择您的 AWS 区域。

  2. 在导航窗格中,选择 Environments (环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 选择 Environment actions (环境操作),然后选择 Terminate environment (终止环境)

  4. 使用屏幕上的对话框确认环境终止。

利用 Elastic Beanstalk,可以随时为您的应用程序轻松创建新环境。

后续步骤

当您继续开发应用程序时,您可能希望管理环境和部署应用程序,而无需手动创建 .zip 文件并将该文件上传到 Elastic Beanstalk 控制台。Elastic Beanstalk 命令行界面 (EB CLI) 提供了易于使用的命令,这些命令可用于从命令行界面创建、配置应用程序并将应用程序部署到 Elastic Beanstalk 环境。

如果您使用 Visual Studio 开发应用程序,则还可以使用 AWS Toolkit for Visual Studio 来部署代码中的更改、管理 Elastic Beanstalk 环境以及管理其他 AWS 资源。有关更多信息,请参阅AWS Toolkit for Visual Studio

出于开发和测试目的,您可以考虑利用 Elastic Beanstalk 的部署功能将托管数据库实例直接添加到环境中。有关在环境内设置数据库的信息,请参阅将数据库添加到 Elastic Beanstalk 环境

最后,如果您计划在生产环境中使用应用程序,我们建议您为环境配置自定义域名启用 HTTPS 以实现安全连接。