本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:使用 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 3.1 或更高版本
安装 .NET Core 开发工具包
-
从 microsoft.com/net/core
下载安装程序。选择您的开发平台。选择下载 .NET Core 开发工具包。 -
运行安装程序并按说明操作。
注意
尽管本教程中的示例是 Windows 命令行中的列表,但 .NET Core 开发工具包在多个操作系统上支持开发平台。本教程中显示的 dotnet
命令在不同的开发平台之间是一致的。
本教程使用命令行 ZIP 实用工具创建一个源包,您可以将该源包部署到 Elastic Beanstalk。要在 Windows 中使用 zip
命令,您可以安装 UnxUtils
。(UnxUtils 是有用的命令行实用程序的轻量级集合zip
,例如和ls
。) 或者,可以使用 Windows 资源管理器或任何其他 ZIP 实用工具创建源包存档。
要安装 UnxUtils
-
下载
UnxUtils
。 -
将存档提取到本地目录。例如:
C:\Program Files (x86)
。 -
将二进制的路径添加到 Windows PATH 用户变量。例如:
C:\Program Files (x86)\UnxUtils\usr\local\wbin
。-
按下 Windows 键,然后键入
environment variables
。 -
选择 Edit environment variables for your account(编辑您账户的环境变量)。
-
选择 PATH,然后选择 Edit(编辑)。
-
向 Variable value 字段添加路径,中间用分号隔开。例如:
C:\item1\path
;
C:\item2\path
-
选择 OK 两次以应用新设置。
-
关闭任何正在运行的命令提示符窗口,然后重新打开命令提示符窗口。
-
-
打开一个新的命令提示符窗口并运行
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 项目
-
打开一个新的命令提示窗口并导航至您的用户文件夹。
>
cd %USERPROFILE%
-
使用
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.
在本地运行网站
-
使用
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. -
使用
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 -
打开 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 -r ../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
启动环境并部署代码(控制台)
-
对于 Platform(平台),选择 .NET Core on Linux。
-
选择 Local file(本地文件),再选择 Choose file(选择文件),然后打开源包。
-
选择复查并启动。
-
查看可用设置并选择 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 组会扩展或收缩以进行响应。
-
Amazon CloudFormation 堆栈 — Elastic Amazon CloudFormation Beanstalk 用于在您的环境中启动资源并传播配置更改。这些资源在您可通过 Amazon CloudFormation 控制台
查看的模板中定义。 -
域名 – 一个域名,它以下面的形式路由到您的 Web 应用程序:
subdomain
.region
.elasticbeanstalk.com。注意
为了增强您的 Elastic Beanstalk 应用程序的安全性,eb.amazonaws.com.cn 域名已在公共后缀列表 (PSL) 中注册。
为进一步增强安全性,如果您需要在 Elastic Beanstalk 应用程序的默认域名中设置敏感 Cookie,我们建议您使用带 __Host-
前缀的 Cookie。这将有助于保护您的域,防范跨站点请求伪造(CSRF)攻击。要了解更多信息,请参阅 Mozilla 开发者网络中的 Set-Cookie页面。
Elastic Beanstalk 管理所有这些资源。当您终止环境时,Elastic Beanstalk 会终止其包含的所有资源。
注意
Elastic Beanstalk 创建的 Amazon S3 存储桶将在多个环境之间共享,并且在您终止环境时不会被删除。有关更多信息,请参阅将 Elastic Beanstalk 和 Amazon S3 结合使用。
清除
Elastic Beanstalk 使用完毕时,您可以终止您的环境。Elastic Beanstalk Amazon 会终止与您的环境关联的所有资源,例如 Amazon EC2 实例、数据库实例、负载均衡器、安全组和警报。
终止 Elastic Beanstalk 环境
打开 Elastic Beanstalk
控制台,然后在 “区域” 列表中,选择您的。 Amazon Web Services 区域 -
在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。
注意
如果您有多个环境,请使用搜索栏筛选环境列表。
-
选择 Actions(操作),然后选择 Terminate environment(终止环境)。
-
使用屏幕上的对话框确认环境终止。
利用 Elastic Beanstalk,可以随时为您的应用程序轻松创建新环境。
后续步骤
当您继续开发应用程序时,您可能希望管理环境和部署应用程序,而无需手动创建 .zip 文件并将该文件上传到 Elastic Beanstalk 控制台。Elastic Beanstalk 命令行界面 (EB CLI easy-to-use ) 提供命令,用于通过命令行界面创建、配置应用程序并将其部署到 Elastic Beanstalk 环境中。
如果您使用 Visual Studio 开发应用程序,则还可以使用 Amazon Toolkit for Visual Studio 来部署代码中的更改、管理 Elastic Beanstalk 环境以及管理其他资源。 Amazon 请参阅这些区域有: Amazon Toolkit for Visual Studio了解更多信息。
出于开发和测试目的,您可以考虑利用 Elastic Beanstalk 的部署功能将托管数据库实例直接添加到环境中。有关在环境内设置数据库的信息,请参阅将数据库添加到 Elastic Beanstalk 环境。
最后,如果您计划在生产环境中使用应用程序,我们建议您为环境配置自定义域名并启用 HTTPS 以实现安全连接。