

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

# 使用 Elastic Beanstalk 部署 .NET Windows 应用程序
<a name="create_deploy_NET"></a>

**在*AWS 开发者中心查看.NET***  
  
您是否访问过我们的 *.Net 开发人员中心*？ 这是我们提供.NET 上所有内容的一站式商店 AWS。  
有关更多信息，请参阅[AWS 开发人员中心上的.NET](https://aws.amazon.com/developer/language/net)。

本章提供有关配置和部署你的 ASP.NET 和.NET Core Windows Web 应用程序的 AWS Elastic Beanstalk说明。Elastic Beanstalk 让您能够使用 Amazon Web Services 轻松部署、管理和扩展您的 .NET（Windows）Web 应用程序。

您可以使用 Elastic Beanstalk 命令行界面（EB CLI）或 Elastic Beanstalk 控制台在几分钟内部署您的应用程序。部署 Elastic Beanstalk 应用程序后，您可以继续使用 EB CLI 来管理您的应用程序和环境，也可以使用 Elastic Beanstalk 控制台或。 AWS CLI APIs

本章提供以下教程：
+ [QuickStart 适用于 Windows 上的.NET 核心版](dotnet-quickstart.md)— 使用 EB CLI 创建和部署 *Hello* World .NET Core Windows 应用程序的 Step-by-step说明。
+ [QuickStart 适用于ASP.NET](aspnet-quickstart.md)— 使用创建和部署 *Hello World* ASP.NET 应用程序的 Step-by-step AWS Toolkit for Visual Studio说明。

如果您需要 Windows .NET Core 应用程序开发的帮助，则可以访问以下几个资源：
+  [.NET 开发论坛](https://forums.aws.amazon.com/forum.jspa?forumID=61) — 发布您的问题并获取反馈。
+ [.NET 开发人员中心](https://aws.amazon.com/net/) —示例代码、文档、工具和其他资源的一站式商店。
+ [AWS 适用于.NET 的 SDK 文档](https://aws.amazon.com/documentation/sdk-for-net/) — 阅读有关设置 SDK 和运行代码示例、SDK 功能以及有关 SDK 的 API 操作的详细信息。

**注意**  
此平台不支持工作线程环境。有关详细信息，请参阅[Elastic Beanstalk 工作线程环境](using-features-managing-env-tiers.md)。

**Topics**
+ [QuickStart: 在 Windows 应用程序上部署.NET 核心到 Elastic Beanstalk](dotnet-quickstart.md)
+ [QuickStart: 将 ASP.NET 应用程序部署到 Elastic Beanstalk](aspnet-quickstart.md)
+ [设置 .NET 开发环境](dotnet-devenv.md)
+ [使用 Elastic Beanstalk .NET Windows 平台](create_deploy_NET.container.console.md)
+ [向 .NET 应用程序环境中添加 Amazon RDS 数据库实例](create_deploy_NET.rds.md)
+ [的 AWS Toolkit for Visual Studio](dotnet-toolkit.md)
+ [将本地 .NET 应用程序迁移到 Elastic Beanstalk](dotnet-onpremmigration.md)
+ [针对 Elastic Beanstalk 上 Windows Server 已停用组件的建议](dotnet-deprecation-recommendations.md)

# QuickStart: 在 Windows 应用程序上部署.NET 核心到 Elastic Beanstalk
<a name="dotnet-quickstart"></a>

本 QuickStart 教程将引导你完成在 Windows 应用程序上创建.NET Core 并将其部署到 AWS Elastic Beanstalk 环境的过程。

**不用于生产用途**  
示例仅用于演示。请勿在生产环境中使用示例应用程序。

**Topics**
+ [你的 AWS 账户](#dotnet-quickstart-aws-account)
+ [先决条件](#dotnet-quickstart-prereq)
+ [步骤 1：创建 .NET Core on Windows 应用程序](#dotnet-quickstart-create-app)
+ [步骤 2：在本地运行应用程序](#dotnet-quickstart-run-local)
+ [步骤 3：使用 EB CLI 部署 .NET Core on Windows 应用程序](#dotnet-quickstart-deploy)
+ [步骤 4：在 Elastic Beanstalk 上运行应用程序](#dotnet-quickstart-run-eb-ap)
+ [第 5 步：清理](#go-tutorial-cleanup)
+ [AWS 您的应用程序的资源](#dotnet-quickstart-eb-resources)
+ [后续步骤](#dotnet-quickstart-next-steps)
+ [使用 Elastic Beanstalk 控制台进行部署](#dotnet-quickstart-console)

## 你的 AWS 账户
<a name="dotnet-quickstart-aws-account"></a>

如果您还不是 AWS 客户，则需要创建一个 AWS 帐户。注册后，您就可以访问 Elastic Beanstalk AWS 和其他所需的服务。

如果您已经有一个 AWS 帐户，则可以继续前进[先决条件](#dotnet-quickstart-prereq)。

### 创建一个 AWS 账户
<a name="dotnet-quickstart-aws-account-procedure"></a>

#### 注册获取 AWS 账户
<a name="sign-up-for-aws"></a>

如果您没有 AWS 账户，请完成以下步骤来创建一个。

**报名参加 AWS 账户**

1. 打开[https://portal.aws.amazon.com/billing/注册。](https://portal.aws.amazon.com/billing/signup)

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册时 AWS 账户，就会创建*AWS 账户根用户*一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 [https://aws.amazon.com/](https://aws.amazon.com/)并选择 “**我的账户”，查看您当前的账户活动并管理您的账户**。

#### 创建具有管理访问权限的用户
<a name="create-an-admin"></a>

注册后，请保护您的安全 AWS 账户 AWS 账户根用户 AWS IAM Identity Center，启用并创建管理用户，这样您就不会使用 root 用户执行日常任务。

**保护你的 AWS 账户根用户**

1.  选择 **Root 用户**并输入您的 AWS 账户 电子邮件地址，以账户所有者的身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

   要获取使用根用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in as the root user](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 为您的根用户启用多重身份验证（MFA）。

   有关说明，请参阅 I [A *M* 用户指南中的为 AWS 账户 根用户启用虚拟 MFA 设备（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**创建具有管理访问权限的用户**

1. 启用 IAM Identity Center。

   有关说明，请参阅**《AWS IAM Identity Center 用户指南》中的[启用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，为用户授予管理访问权限。

   有关使用 IAM Identity Center 目录 作为身份源的教程，请参阅《[用户*指南》 IAM Identity Center 目录中的使用默认设置配置AWS IAM Identity Center 用户*访问权限](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理访问权限的用户身份登录**
+ 要使用您的 IAM Identity Center 用户身份登录，请使用您在创建 IAM Identity Center 用户时发送到您的电子邮件地址的登录 URL。

  有关使用 IAM Identity Center 用户[登录的帮助，请参阅*AWS 登录 用户指南*中的登录 AWS 访问门户](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**将访问权限分配给其他用户**

1. 在 IAM Identity Center 中，创建一个权限集，该权限集遵循应用最低权限的最佳做法。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 将用户分配到一个组，然后为该组分配单点登录访问权限。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

## 先决条件
<a name="dotnet-quickstart-prereq"></a>

为了遵循本指南中的步骤，您需要命令行终端或 Shell，以便运行命令。命令显示在列表中，前面带有提示符（>）和当前目录的名称（如果适用）。

```
C:\eb-project> this is a command
this is output
```

### EB CLI
<a name="dotnet-quickstart-prereq.ebcli"></a>

本教程使用 Elastic Beanstalk 命令行界面 (EB CLI)。有关安装和配置 EB CLI 的详细信息，请参阅 [使用设置脚本安装 EB CLI（推荐）](eb-cli3.md#eb-cli3-install) 和 [配置 EB CLI](eb-cli3-configuration.md)。

### .NET Core on Windows
<a name="dotnet-quickstart-prereq.runtime"></a>

如果您的本地计算机上尚未安装 .NET SDK，则可以按照 [.NET 文档](https://learn.microsoft.com/en-us/dotnet/)网站上的[下载 .NET](https://dotnet.microsoft.com/en-us/download) 链接进行安装。

通过运行以下命令来验证您的 .NET SDK 安装。

```
C:\> dotnet --info
```

## 步骤 1：创建 .NET Core on Windows 应用程序
<a name="dotnet-quickstart-create-app"></a>

创建项目目录。

```
C:\> mkdir eb-dotnetcore
C:\> cd eb-dotnetcore
```

接下来，通过运行以下命令创建一个示例 Hello RESTful World Web 服务应用程序。

```
C:\eb-dotnetcore> dotnet new web --name HelloElasticBeanstalk
C:\eb-dotnetcore> cd HelloElasticBeanstalk
```

## 步骤 2：在本地运行应用程序
<a name="dotnet-quickstart-run-local"></a>

运行以下命令以在本地运行您的应用程序。

```
C:\eb-dotnetcore\HelloElasticBeasntalk> dotnet run
```

输出应类似于以下文本。

```
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://localhost:7222
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5228
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\Administrator\eb-dotnetcore\HelloElasticBeanstalk
```

**注意**  
在本地运行应用程序时，`dotnet` 命令会随机选择一个端口。在此示例中，端口为 5228。当您将应用程序部署到 Elastic Beanstalk 环境时，该应用程序将在端口 5000 上运行。

在您的网络浏览器中输入 URL 地址 `http://localhost:port`。对于这个具体的示例，命令是 `http://localhost:5228`。Web 浏览器应显示“Hello World\$1”。

## 步骤 3：使用 EB CLI 部署 .NET Core on Windows 应用程序
<a name="dotnet-quickstart-deploy"></a>

运行以下命令为此应用程序创建 Elastic Beanstalk 环境。

 

**创建环境并部署 .NET Core on Windows 应用程序**

1. 在 `HelloElasticBeanstalk` 目录中运行以下命令来发布和压缩应用程序。

   ```
   C:\eb-dotnetcore\HelloElasticBeasntalk> dotnet publish -o site
   C:\eb-dotnetcore\HelloElasticBeasntalk> cd site
   C:\eb-dotnetcore\HelloElasticBeasntalk\site> Compress-Archive -Path * -DestinationPath ../site.zip
   C:\eb-dotnetcore\HelloElasticBeasntalk\site> cd ..
   ```

1. 在 `HelloElasticBeanstalk` 中创建一个名为 `aws-windows-deployment-manifest.json` 包含以下内容的新文件：

   ```
   {
       "manifestVersion": 1,
       "deployments": {
           "aspNetCoreWeb": [
           {
               "name": "test-dotnet-core",
               "parameters": {
                   "appBundle": "site.zip",
                   "iisPath": "/",
                   "iisWebSite": "Default Web Site"
               }
           }
           ]
       }
   }
   ```

1. 使用 **eb init** 命令，初始化 EB CLI 存储库。

   ```
   C:\eb-dotnetcore\HelloElasticBeasntalk> eb init -p iis dotnet-windows-server-tutorial --region us-east-2
   ```

   此命令将创建名为 `dotnet-windows-server-tutorial` 的应用程序，并配置本地存储库，以创建具有最新 Windows Server 平台版本的环境。

1. 创建环境并使用 **eb create** 将应用程序部署到此环境中。Elastic Beanstalk 会自动为您的应用程序生成一个 zip 文件，并在端口 5000 上启动该文件。

   ```
   C:\eb-dotnetcore\HelloElasticBeasntalk> eb create dotnet-windows-server-env
   ```

   Elastic Beanstalk 大约需要五分钟来创建您的环境。

## 步骤 4：在 Elastic Beanstalk 上运行应用程序
<a name="dotnet-quickstart-run-eb-ap"></a>

当创建环境的过程完成后，使用 **eb open** 打开您的网站。

```
C:\eb-dotnetcore\HelloElasticBeasntalk> eb open
```

恭喜您！您已使用 Elastic Beanstalk 部署了 .NET Core on Windows 应用程序！这将使用为应用程序创建的域名打开一个浏览器窗口。

## 第 5 步：清理
<a name="go-tutorial-cleanup"></a>

应用程序使用完毕时，您可以终止您的环境。Elastic Beanstalk AWS 会终止与您的环境关联的所有资源。

要使用 EB CLI 终止您的 Elastic Beanstalk 环境，请运行以下命令。

```
C:\eb-dotnetcore\HelloElasticBeasntalk> eb terminate
```

## AWS 您的应用程序的资源
<a name="dotnet-quickstart-eb-resources"></a>

您刚刚创建了一个单实例应用程序。它可用作带有单个 EC2 实例的简单示例应用程序，因此不需要负载平衡或自动扩缩。对于单实例应用程序，Elastic Beanstalk 会创建以下资源： AWS 
+ **EC2 实例** - 配置来在您选择的平台上运行 Web 应用程序的 Amazon EC2 虚拟机。

  各平台运行一组不同的软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 nginx 作为在 Web 应用程序前处理 Web 流量的反向代理，向其转发请求、提供静态资产以及生成访问和错误日志。
+ **实例安全组** - 配置为允许端口 80 上的传入流量的 Amazon EC2 安全组。通过此资源，HTTP 流量可以从负载均衡器到达运行您的 Web 应用程序的 EC2 实例。默认情况下，其他端口不允许流量进入。
+ **Amazon S3 存储桶** – 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。
+ **Amazon CloudWatch CloudWatch 警**报 — 两个警报，用于监控您环境中实例的负载，并在负载过高或过低时触发。警报触发后，您的 Auto Scaling 组会扩展或收缩以进行响应。
+ **CloudFormation 堆栈** — Elastic CloudFormation Beanstalk 用于在您的环境中启动资源并传播配置更改。这些资源在您可通过 [CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)查看的模板中定义。
+  **域名**-以表单形式路由到您的 Web 应用程序的域名**subdomain*。 *region*.elasticbeanstalk.com。*

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

## 后续步骤
<a name="dotnet-quickstart-next-steps"></a>

有了运行应用程序的环境以后，您随时可以部署新的应用程序版本或不同的应用程序。部署新应用程序版本非常快，因为不需要配置或重新启动 EC2 实例。您还可以使用 Elastic Beanstalk 控制台探索新环境。有关详细步骤，请参阅本指南*入门*一章中的[探索您的环境](GettingStarted.md#GettingStarted.Explore)。

**尝试更多教程**  
如果您想尝试包含不同示例应用程序的其他教程，请参阅 [QuickStart 适用于ASP.NET](aspnet-quickstart.md)。

部署一到两个示例应用程序并准备好开始在本地开发和运行 .NET Core on Windows 应用程序后，请参阅 [设置 .NET 开发环境](dotnet-devenv.md) 

## 使用 Elastic Beanstalk 控制台进行部署
<a name="dotnet-quickstart-console"></a>

您还可以使用 Elastic Beanstalk 控制台来启动示例应用程序。有关详细步骤，请参阅本指南*入门*一章中的[创建示例应用程序](GettingStarted.md#GettingStarted.CreateApp)。

# QuickStart: 将 ASP.NET 应用程序部署到 Elastic Beanstalk
<a name="aspnet-quickstart"></a>

本 QuickStart 教程将引导您完成创建 ASP.NET 应用程序并将其部署到 AWS Elastic Beanstalk 环境的过程。

**不用于生产用途**  
示例仅用于演示。请勿在生产环境中使用示例应用程序。

**Topics**
+ [你的 AWS 账户](#aspnet-quickstart-aws-account)
+ [先决条件](#aspnet-quickstart-prereq)
+ [步骤 1：创建 ASP.NET 应用程序](#aspnet-quickstart-create-app)
+ [步骤 2：在本地运行应用程序](#aspnet-quickstart-run-local)
+ [步骤 3：使用部署您的 ASP.NET 应用程序 AWS Toolkit for Visual Studio](#aspnet-quickstart-deploy)
+ [步骤 4：在 Elastic Beanstalk 上运行应用程序](#aspnet-quickstart-run-eb-ap)
+ [第 5 步：清理](#aspnet-quickstart-cleanup)
+ [AWS 您的应用程序的资源](#aspnet-quickstart-eb-resources)
+ [后续步骤](#aspnet-quickstart-next-steps)
+ [使用 Elastic Beanstalk 控制台进行部署](#aspnet-quickstart-console)

## 你的 AWS 账户
<a name="aspnet-quickstart-aws-account"></a>

如果您还不是 AWS 客户，则需要创建一个 AWS 帐户。注册后，您就可以访问 Elastic Beanstalk AWS 和其他所需的服务。

如果您已经有一个 AWS 帐户，则可以继续前进[先决条件](#aspnet-quickstart-prereq)。

### 创建一个 AWS 账户
<a name="aspnet-quickstart-aws-account-procedure"></a>

#### 注册获取 AWS 账户
<a name="sign-up-for-aws"></a>

如果您没有 AWS 账户，请完成以下步骤来创建一个。

**要注册 AWS 账户**

1. 打开[https://portal.aws.amazon.com/billing/注册。](https://portal.aws.amazon.com/billing/signup)

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册时 AWS 账户，就会创建*AWS 账户根用户*一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 [https://aws.amazon.com/](https://aws.amazon.com/)并选择 “**我的账户”，查看您当前的账户活动并管理您的账户**。

#### 创建具有管理访问权限的用户
<a name="create-an-admin"></a>

注册后，请保护您的安全 AWS 账户 AWS 账户根用户 AWS IAM Identity Center，启用并创建管理用户，这样您就不会使用 root 用户执行日常任务。

**保护你的 AWS 账户根用户**

1.  选择 **Root 用户**并输入您的 AWS 账户 电子邮件地址，以账户所有者的身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

   要获取使用根用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in as the root user](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 为您的根用户启用多重身份验证（MFA）。

   有关说明，请参阅 I [A *M* 用户指南中的为 AWS 账户 根用户（控制台）启用虚拟 MFA 设备](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**创建具有管理访问权限的用户**

1. 启用 IAM Identity Center。

   有关说明，请参阅**《AWS IAM Identity Center 用户指南》中的[启用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，为用户授予管理访问权限。

   有关使用 IAM Identity Center 目录 作为身份源的教程，请参阅《[用户*指南》 IAM Identity Center 目录中的使用默认设置配置AWS IAM Identity Center 用户*访问权限](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理访问权限的用户身份登录**
+ 要使用您的 IAM Identity Center 用户身份登录，请使用您在创建 IAM Identity Center 用户时发送到您的电子邮件地址的登录 URL。

  有关使用 IAM Identity Center 用户[登录的帮助，请参阅*AWS 登录 用户指南*中的登录 AWS 访问门户](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**将访问权限分配给其他用户**

1. 在 IAM Identity Center 中，创建一个权限集，该权限集遵循应用最低权限的最佳做法。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 将用户分配到一个组，然后为该组分配单点登录访问权限。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

## 先决条件
<a name="aspnet-quickstart-prereq"></a>

本 QuickStart 教程将引导你使用 Visual Studio 创建 “Hello World” 应用程序并将其部署到 Elastic Beanstalk 环境中。 AWS Toolkit for Visual Studio

### Visual Studio
<a name="aspnet-quickstart-prereq.vs"></a>

要下载和安装 Visual Studio，请按照 Visual Studio [下载页面](https://visualstudio.microsoft.com/downloads/)上的说明进行操作。此示例使用 Visual Studio 2022。在 Visual Studio 安装过程中，选择以下特定项：
+ 在**工作负载**选项卡上 — 选择 **ASP.NET 和 Web 开发**。
+ 在**单个组件**选项卡上 — 选择 **.NET Framework 4.8 开发工具**和 **.NET Framework 项目和项模板**。

### AWS Toolkit for Visual Studio
<a name="aspnet-quickstart-prereq.aws-vs-tk"></a>

要下载和设置， AWS Toolkit for Visual Studio 请按照《 AWS Toolkit for Visual Studio 用户指南》的 “[入门](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/getting-set-up.html)” 主题中的说明进行操作。

## 步骤 1：创建 ASP.NET 应用程序
<a name="aspnet-quickstart-create-app"></a>

接下来，创建一个将部署到 Elastic Beanstalk 环境的应用程序。我们将创建一个“Hello World”ASP.NET Web 应用程序。

**创建 ASP.NET 应用程序**

1. 启动 Visual Studio。在**文件**菜单中，选择**新建**，然后选择**项目**。

1. 将显示**创建新项目**对话框。选择 **ASP.NET Web 应用程序（.NET Framework）**，然后选择**下一步**。

1. 在**配置您的新项目**对话框中，输入 `eb-aspnet` 作为您的**项目名称**。从**框架**下拉菜单中，选择 **.NET Framework 4.8**，然后选择**创建**。

   记下项目目录。在此示例中，项目目录为 `C:\Users\Administrator\source\repos\eb-aspnet\eb-aspnet`。

1. 此时将显示**创建新的 ASP.NET Web 应用程序**对话框。选择**空**模板。接下来，选择**创建**。

   此时，您已使用 Visual Studio 创建了一个空的 ASP.NET Web 应用程序项目。接下来，我们将创建一个 Web 表单作为 ASP.NET Web 应用程序的入口点。

1. 从**项目**菜单中，选择**添加新项目**。在**添加新项目**页面上，选择 **Web 表单**并将其命名为 `Default.aspx`。接下来选择**添加**。

1. 将以下内容添加到 `Default.aspx:`

   ```
   <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="eb_aspnet.Default" %>
   
   <!DOCTYPE html>
   
   <html xmlns="https://www.w3.org/1999/xhtml">
   <head runat="server">
       <title>Hello Elastic Beanstalk!</title>
   </head>
   <body>
       <form id="body" runat="server">
           <div>
               Hello Elastic Beanstalk! This is an ASP.NET on Windows Server application.
           </div>
       </form>
   </body>
   </html>
   ```

## 步骤 2：在本地运行应用程序
<a name="aspnet-quickstart-run-local"></a>

在 Visual Studio 中，从**调试**菜单中选择**开始调试**，以在本地运行应用程序。页面应显示“Hello Elastic Beanstalk\$1 This is an ASP.NET on Windows Server application.”

## 步骤 3：使用部署您的 ASP.NET 应用程序 AWS Toolkit for Visual Studio
<a name="aspnet-quickstart-deploy"></a>

按照以下步骤创建 Elastic Beanstalk 环境并将新应用程序部署到其中。

**创建环境和部署 ASP.NET 应用程序**

1. 在**解决方案资源管理器**中，右键单击您的应用程序，然后选择**发布到 AWS Elastic Beanstalk**。

1. 为新的 Elastic Beanstalk 应用程序和环境选择一个名称。

1. 除此之外，您可以继续使用 Elastic Beanstalk 提供的默认设置，或根据您的喜好修改任何选项和设置。

1. 在**检查**页上，选择**部署**。这将打包您的 ASP.NET Web 应用程序并将其部署到 Elastic Beanstalk。

   Elastic Beanstalk 大约需要五分钟来创建您的环境。Elastic Beanstalk 部署功能将监控您的环境，直到部署了新代码的环境变得可用为止。在 **Env:<**environment name**>** 选项卡上，您将看到环境的状态。

## 步骤 4：在 Elastic Beanstalk 上运行应用程序
<a name="aspnet-quickstart-run-eb-ap"></a>

当创建环境的过程完成时，**Env:<**environment name**>** 选项卡将显示有关您的环境和应用程序的信息，包括启动应用程序的域 URL。在此选项卡上选择此 URL 或将其复制并粘贴到您的 Web 浏览器中。

恭喜您！您已使用 Elastic Beanstalk 部署了 ASP.NET 应用程序！

## 第 5 步：清理
<a name="aspnet-quickstart-cleanup"></a>

应用程序使用完毕时，您可以在 AWS Toolkit for Visual Studio中终止您的环境。

**终止环境**

1. 在 **AWS Explorer** 中，展开 Elastic Beanstalk 节点和应用程序节点。右键单击应用程序环境，选择 **Terminate Environment**（终止环境）。

1. 当系统提示时，选择**是**以确认要终止该环境。Elastic Beanstalk 需要几分钟才能 AWS 终止在环境中运行的资源。

## AWS 您的应用程序的资源
<a name="aspnet-quickstart-eb-resources"></a>

您刚刚创建了一个单实例应用程序。它可用作带有单个 EC2 实例的简单示例应用程序，因此不需要负载平衡或自动扩缩。对于单实例应用程序，Elastic Beanstalk 会创建以下资源： AWS 
+ **EC2 实例** - 配置来在您选择的平台上运行 Web 应用程序的 Amazon EC2 虚拟机。

  各平台运行一组不同的软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 nginx 作为在 Web 应用程序前处理 Web 流量的反向代理，向其转发请求、提供静态资产以及生成访问和错误日志。
+ **实例安全组** - 配置为允许端口 80 上的传入流量的 Amazon EC2 安全组。通过此资源，HTTP 流量可以从负载均衡器到达运行您的 Web 应用程序的 EC2 实例。默认情况下，其他端口不允许流量进入。
+ **Amazon S3 存储桶** – 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。
+ **Amazon CloudWatch CloudWatch 警**报 — 两个警报，用于监控您环境中实例的负载，并在负载过高或过低时触发。警报触发后，您的 Auto Scaling 组会扩展或收缩以进行响应。
+ **CloudFormation 堆栈** — Elastic CloudFormation Beanstalk 用于在您的环境中启动资源并传播配置更改。这些资源在您可通过 [CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)查看的模板中定义。
+  **域名**-以表单形式路由到您的 Web 应用程序的域名**subdomain*。 *region*.elasticbeanstalk.com。*

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

## 后续步骤
<a name="aspnet-quickstart-next-steps"></a>

有了运行应用程序的环境以后，您随时可以部署新的应用程序版本或不同的应用程序。部署新应用程序版本非常快，因为不需要配置或重新启动 EC2 实例。您还可以使用 Elastic Beanstalk 控制台探索新环境。有关详细步骤，请参阅本指南*入门*一章中的[探索您的环境](GettingStarted.md#GettingStarted.Explore)。

**尝试更多教程**  
如果您想尝试包含不同示例应用程序的其他教程，请参阅 [QuickStart 适用于 Windows 上的.NET 核心版](dotnet-quickstart.md)。

部署一到两个示例应用程序并准备好开始在本地开发和运行 ASP.NET 应用程序后，请参阅 [设置 .NET 开发环境](dotnet-devenv.md) 

## 使用 Elastic Beanstalk 控制台进行部署
<a name="aspnet-quickstart-console"></a>

您还可以使用 Elastic Beanstalk 控制台来启动示例应用程序。有关详细步骤，请参阅本指南*入门*一章中的[创建示例应用程序](GettingStarted.md#GettingStarted.CreateApp)。

# 设置 .NET 开发环境
<a name="dotnet-devenv"></a>

本主题提供了设置 .NET Windows 开发环境以便在将应用程序部署到 AWS Elastic Beanstalk之前在本地对其进行测试的说明。它还引用了提供有用工具安装说明的网站。

**Topics**
+ [安装 IDE](#dotnet-devenv-ide)
+ [正在安装 AWS Toolkit for Visual Studio](#dotnet-devenv-toolkit)

如果您需要从应用程序内部管理 AWS 资源，请安装适用于.NET 的 AWS SDK。例如，您可以使用 Amazon S3 存储和检索数据。

使用适用于.NET 的 AWS SDK，您可以在几分钟内开始使用一个可下载的软件包，其中包含 Visual Studio 项目模板、 AWS .NET 库、C\$1 代码示例和文档。对于如何使用库构建应用程序，C\$1 也提供了很多实用的示例。我们提供了在线视频教程和参考文档，以帮助您了解如何使用库和代码示例。

请访问 [AWS SDK for .NET 主页](https://aws.amazon.com/sdk-for-net/)以了解更多信息和安装说明。

## 安装 IDE
<a name="dotnet-devenv-ide"></a>

集成开发环境 (IDEs) 提供了多种便于应用程序开发的功能。如果您尚未使用 IDE 进行 .NET 开发，请尝试 Visual Studio Community 来开始操作。

请访问 [Visual Studio Community](https://www.visualstudio.com/vs/community/) 页以下载并安装 Visual Studio Community。

## 正在安装 AWS Toolkit for Visual Studio
<a name="dotnet-devenv-toolkit"></a>

[AWS Toolkit for Visual Studio](dotnet-toolkit.md)是 Visual Studio IDE 的开源插件，它使开发人员可以更轻松地使用它开发、调试和部署.NET 应用程序 AWS。有关安装说明，请访问 [Toolkit for Visual Studio 主页](https://aws.amazon.com/visualstudio/)。

# 使用 Elastic Beanstalk .NET Windows 平台
<a name="create_deploy_NET.container.console"></a>

本主题介绍如何在 Elastic Beanstalk 上配置、构建和运行 ASP.NET 和 .NET Core Windows Web 应用程序。

AWS Elastic Beanstalk 支持适用于不同版本的.NET 编程框架和 Windows 服务器的多种平台。有关完整列表，请参阅 *AWS Elastic Beanstalk 平台*文档中的[使用 IIS 的 Windows Server 上的 .NET](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.net)。

Elastic [Beanstalk 提供了](command-options.md)配置选项，您可以使用这些选项来自定义在 Elastic Beanstalk 环境中的实例 EC2 上运行的软件。您可以配置应用程序所需的环境变量，启用到 Amazon S3 的日志轮换，并设定 .NET Framework 设置。

Elastic Beanstalk 控制台中提供了配置选项，可用于[修改运行环境的配置](environment-configuration-methods-after.md)。要避免在终止环境时丢失环境配置，可以使用[保存的配置](environment-configuration-savedconfig.md)来保存您的设置，并在以后将这些设置应用到其他环境。

要保存源代码中的设置，您可以包含[配置文件](ebextensions.md)。在您每次创建环境或部署应用程序时，会应用配置文件中的设置。您还可在部署期间使用配置文件来安装程序包、运行脚本以及执行其他实例自定义操作。

在 Elastic Beanstalk 控制台中应用的设置会覆盖配置文件中的相同设置（如果存在）。这让您可以在配置文件中包含默认设置，并使用控制台中的特定环境设置加以覆盖。有关优先顺序和其他设置更改方法的更多信息，请参阅[配置选项](command-options.md)。

## 在 Elastic Beanstalk 控制台中配置 .NET 环境
<a name="dotnet-console"></a>

您可以使用 Elastic Beanstalk 控制台启用到 Amazon S3 的日志轮换，配置应用程序可以从环境中读取的变量以及更改 .NET Framework 设置。

**在 Elastic Beanstalk 控制台中配置 .NET 环境**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

### 容器选项
<a name="dotnet-console-framework"></a>
+ **Target .NET runtime**（目标 .NET 运行时）– 设置为 `2.0` 以运行 CLR v2。
+ **Enable 32-bit applications**（启用 32 位应用程序）– 设置为 `True` 可运行 32 位应用程序。

### 日志选项
<a name="dotnet-console-logs"></a>

“日志选项”部分有两个设置：
+ **Instance profile**（实例配置文件）– 指定有权访问与应用程序关联的 Amazon S3 存储桶的实例配置文件。
+ **启用向 Amazon S3 的日志文件轮换-指定是否将**应用程序的 Amazon EC2 实例的日志文件复制到与您的应用程序关联的 Amazon S3 存储桶中。

### 环境属性
<a name="dotnet-console-properties"></a>

**环境属性**部分允许您在运行您的应用程序的 Amazon EC2 实例上指定环境配置设置。这些设置会以密钥值对的方式传递到应用程序。使用 `System.GetEnvironmentVariable` 可读取它们。相同的密钥可以存在于 `web.config` 中，也可以作为环境属性存在。使用 `System.Configuration` 命名空间可读取 `web.config` 中的值。

```
NameValueCollection appConfig = ConfigurationManager.AppSettings;
string endpoint = appConfig["API_ENDPOINT"];
```

参阅 [环境变量和其他软件设置](environments-cfg-softwaresettings.md) 了解更多信息。

## aws:elasticbeanstalk:container:dotnet:apppool 命名空间
<a name="dotnet-namespaces"></a>

您可以使用[配置文件](ebextensions.md)设置配置选项并在部署期间执行其他实例配置。配置选项可以[特定于平台](command-options-specific.md)，也可以应用于整个 Elastic Beanstalk 服务中的[所有平台](command-options-general.md)。配置选项被组织到*命名空间*中。

.NET 平台在 `aws:elasticbeanstalk:container:dotnet:apppool` 命名空间中定义可用来配置 .NET 运行时的选项。

以下示例配置文件显示这个命名空间中可用的每个选项的设置：

**Example .ebextensions/dotnet-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:container:dotnet:apppool:
    Target Runtime: 2.0
    Enable 32-bit Applications: True
```

Elastic Beanstalk 提供了许多用于自定义环境的配置选项。除了配置文件之外，您还可使用控制台、保存的配置、EB CLI 或 AWS CLI来配置选项。参阅 [配置选项](command-options.md) 了解更多信息。

# 跨 Elastic BeanstalkWindows Server 平台的主要版本迁移
<a name="dotnet-v2migration"></a>

AWS Elastic Beanstalk 其 Windows 服务器平台有多个主要版本。此页面介绍每个主要版本的主要改进以及在迁移到较新版本之前应考虑的事项。

Windows Server 平台当前处于版本 2 (v2)。如果应用程序使用 v2 之前的任何 Windows Server 平台版本，我们建议迁移到 v2。

## Windows Server 平台的主要版本中的新增功能
<a name="dotnet-v2migration.diffs"></a>

### Windows Server 平台 V2
<a name="dotnet-v2migration.diffs.v2"></a>

Elastic Beanstalk Windows Server 平台的版本 2 (v2) [已于 2019 年 2 月发布](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2019-02-21-windows-v2.html)。V2 使 Windows Server 平台的行为在多个重要方面更接近 Elastic Beanstalk 基于 Linux 的平台的行为。V2 完全向后兼容 v1，这使从 v1 迁移轻松。

Windows Server 平台现在支持以下功能：
+ *版本控制* - 每个版本将获取新的版本号，并且在创建和管理环境时可以引用先前的版本（仍可用的版本）。
+ *增强型运行状况* - 有关详细信息，请参阅[Elastic Beanstalk 中的增强型运行状况报告和监控](health-enhanced.md)。
+ *不可变* 和*附加批次滚动* 部署 - 有关部署策略的详细信息，请参阅[将应用程序部署到 Elastic Beanstalk 环境](using-features.deploy-existing-version.md)。
+ *不可变更新* - 有关更新类型的详细信息，请参阅[配置更改](environments-updating.md)。
+ *托管平台更新* - 有关详细信息，请参阅[托管平台更新](environment-platform-update-managed.md)。

**注意**  
新的部署和更新功能依赖于增强型运行状况。启用增强型运行状况以使用这些功能。有关详细信息，请参阅[启用 Elastic Beanstalk 增强型运行状况报告](health-enhanced-enable.md)。

### Windows Server 平台 V1
<a name="dotnet-v2migration.diffs.v1"></a>

Elastic Beanstalk Windows Server 平台的版本 1.0.0 (v1) 已于 2015 年 10 月发布。此版本改变了环境创建和更新期间 Elastic Beanstalk 处理[配置文件](ebextensions.md)中的命令的顺序。

之前的平台版本在解决方案堆栈名称中没有版本号：
+ 运行 IIS 8.5 的 64 位 Windows Server 2012 R2
+ 运行 IIS 8.5 的 64 位 Windows Server Core 2012 R2
+ 运行 IIS 8 的 64 位 Windows Server 2012
+ 运行 IIS 7.5 的 64 位 Windows Server 2008 R2

在之前的版本中，配置文件的处理顺序不一致。创建环境期间，`Container Commands` 在应用程序源部署到 IIS 后运行。在向正在运行的环境部署期间，容器命令在新版本部署前运行。在向上扩展期间，系统根本不处理配置文件。

此外，IIS 在容器命令运行前启动。此行为致使某些客户在容器命令中采取临时措施：在命令运行前暂停 IIS 服务器，命令完成后再次启动 IIS 服务器。

版本 1 修复了不一致问题，使 Windows Server 平台的行为与 Elastic Beanstalk 基于 Linux 的平台的行为更接近。在 v1 平台中，Elastic Beanstalk 始终在启动 IIS 服务器前运行容器命令。

v1 平台解决方案堆栈在 Windows Server 版本后带有 `v1`：
+ 运行 IIS 8.5 的 64 位 Windows Server 2012 R2 v1.1.0
+ 运行 IIS 8.5 的 64 位 Windows Server Core 2012 R2 v1.1.0
+ 运行 IIS 8 的 64 位 Windows Server 2012 v1.1.0
+ 运行 IIS 7.5 的 64 位 Windows Server 2008 R2 v1.1.0

此外，v1 平台将在运行容器命令前将应用程序源包的内容提取到 `C:\staging\`。容器命令完成后，此文件夹的内容会被压缩成 .zip 文件并部署到 IIS。此工作流程让您能够先使用命令或脚本修改应用程序源包的内容，然后再进行部署。

## 从 Windows Server 平台更早的主要版本迁移
<a name="dotnet-v2migration.migration"></a>

在更新环境之前，先阅读此部分中的迁移注意事项。要将环境的平台更新为较新版本，请参阅[更新 Elastic Beanstalk 环境的平台版本](using-features.platform.upgrade.md)。

### 从 V1 到 V2
<a name="dotnet-v2migration.migration.fromv1"></a>

Windows Server 平台 v2 不支持 .NET 内核 1.x 和 2.0。如果您正在将应用程序从 Windows Server v1 迁移到 v2，并且您的应用程序使用其中一个 .NET 内核版本，则将您的应用程序更新到 v2 支持的 .NET 内核版本。有关受支持版本的列表，请参阅中的 *AWS Elastic Beanstalk 平台*中的 [将 Windows Server 上的 .NET 与 IIS 结合使用](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.net)。

如果您的应用程序使用自定义 Amazon Machine Image (AMI)，请基于 Windows Server 平台 v2 AMI 创建新的自定义 AMI。要了解更多信息，请参阅“[在 Elastic Beanstalk 环境中使用自定义亚马逊机器映像（AMI）](using-features.customenv.md)”。

**注意**  
Windows Server v2 中新增的部署和更新功能依赖于增强型运行状况。当您将环境迁移到 v2 时，增强型运行状况处于禁用状态。启用它以使用这些功能。有关详细信息，请参阅[启用 Elastic Beanstalk 增强型运行状况报告](health-enhanced-enable.md)。

### 从 V1 之前的版本
<a name="dotnet-v2migration.migration.fromv0"></a>

除了从 v1 进行迁移的注意事项之外，如果要将应用程序从早于 v1 的 Windows Server 解决方案堆栈进行迁移，并且当前使用容器命令，请删除已添加的任何命令以解决迁移到更新版本时的处理不一致问题。从 v1 开始，容器命令确保在部署的应用程序源代码之前且在 IIS 启动之前运行完毕。这样，您就可以对 `C:\staging` 中的源代码进行任何更改，并在此步骤中修改 IIS 配置文件而不致出现问题。

例如，您可以使用从 Amazon S3 将 DLL 文件下载到您的应用程序源中： AWS CLI 

`.ebextensions\copy-dll.config`

```
container_commands:
  copy-dll:
    command: aws s3 cp s3://amzn-s3-demo-bucket/dlls/large-dll.dll .\lib\
```

有关使用配置文件的更多信息，请参阅[使用配置文件 (`.ebextensions`) 进行高级环境自定义](ebextensions.md)。

# 使用部署清单运行多个应用程序和 ASP.NET 内核应用程序。
<a name="dotnet-manifest"></a>

您可以使用部署清单告知 Elastic Beanstalk 如何部署您的应用程序。通过使用此方法，您无需使用 `MSDeploy` 为在网站根路径上运行的单个 ASP.NET 应用程序生成源包。相反，您可以使用清单文件在不同路径上运行多个应用程序。或者，您也可以告诉 Elastic Beanstalk 使用 ASP.NET Core 部署和运行应用程序。您也可以使用部署清单配置一个应用程序池，在其中运行您的应用程序。

部署清单向 Elastic Beanstalk 添加了对 [.NET Core 应用程序](#dotnet-manifest-dotnetcore)的支持。您可以在不使用部署清单的情况下部署 .NET Framework 应用程序。但是，.NET Core 应用程序需要在 Elastic Beanstalk 上运行部署清单。使用部署清单时，请为每个应用程序创建一个站点存档，然后将该站点存档捆绑在包含部署清单的另一个 ZIP 存档中。

部署清单还增加了[在不同路径上运行多个应用程序](#dotnet-manifest-multiapp)的能力。一个部署清单定义了一组部署目标，每个部署目标有一个站点存档和一个 IIS 应在其上运行部署清单的路径。例如，您可以在 `/api` 路径上运行 Web API，以服务异步请求，以及使用 API 的根路径上的 Web 应用程序。

您可以使用部署清单来[配置使用自定义绑定和物理路径的 IIS 网站](#dotnet-manifest-websites)。这样，您便可在部署应用程序之前设置用于侦听特定端口或主机名的网站。

您也可以使用部署清单[通过在 IIS 或 Kestrel 中的应用程序池运行多个应用程序](#dotnet-manifest-apppool)。您可以将应用程序池配置为定期重启应用程序、运行 32 位应用程序或使用特定版本的 .NET 框架运行时。

要进行完全自定义，您可以在 Windows 中[编写自己的部署脚本](#dotnet-manifest-custom)， PowerShell 然后告诉 Elastic Beanstalk 要运行哪些脚本来安装、卸载和重启应用程序。

部署清单和相关功能需要 Windows Server 平台[版本 1.2.0 或更新版本](dotnet-v2migration.md)。

有关所有可用配置选项、属性和高级功能（例如跳过 IIS 重置）的详细信息，请参阅[部署清单架构参考](dotnet-manifest-schema.md)。

**Topics**
+ [.NET Core 应用程序](#dotnet-manifest-dotnetcore)
+ [运行多个应用程序](#dotnet-manifest-multiapp)
+ [配置 IIS 网站](#dotnet-manifest-websites)
+ [使用应用程序请求路由（ARR）](#dotnet-manifest-arr)
+ [配置应用程序池](#dotnet-manifest-apppool)
+ [定义自定义部署](#dotnet-manifest-custom)
+ [部署清单架构参考](dotnet-manifest-schema.md)

## .NET Core 应用程序
<a name="dotnet-manifest-dotnetcore"></a>

您可以使用部署清单在 Elastic Beanstalk 上运行 .NET Core 应用程序。.NET Core 是 .NET 的跨平台版本，它附带一个命令行工具 (`dotnet`)。您可以使用它生成一个应用程序、在本地运行该应用程序并做好发布该应用程序的准备。

要在 Elastic Beanstalk 上运行 .NET Core 应用程序，您可以运行 `dotnet publish` 并将 ZIP 存档中的输出打包，而不包括任何包含的目录。将具有部署清单的源包中的站点存档与类型为 `aspNetCoreWeb` 的部署目标放在一起。

以下部署清单将在根路径上运行一个来自名为 `dotnet-core-app.zip` 的站点存档的 .NET 内核应用程序。

**Example aws-windows-deployment-manifest.json-.NET 核心**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "my-dotnet-core-app",
        "parameters": {
          "archive": "dotnet-core-app.zip",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

将清单和站点存档捆绑在一个 ZIP 文档中，以创建源包。

**Example dotnet-core-bundle.zip**  

```
.
|-- aws-windows-deployment-manifest.json
`-- dotnet-core-app.zip
```

该站点存档包含已编译的应用程序代码、依赖项和 `web.config` 文件。

**Example dotnet-core-app.zip**  

```
.
|-- Microsoft.AspNetCore.Hosting.Abstractions.dll
|-- Microsoft.AspNetCore.Hosting.Server.Abstractions.dll
|-- Microsoft.AspNetCore.Hosting.dll
|-- Microsoft.AspNetCore.Http.Abstractions.dll
|-- Microsoft.AspNetCore.Http.Extensions.dll
|-- Microsoft.AspNetCore.Http.Features.dll
|-- Microsoft.AspNetCore.Http.dll
|-- Microsoft.AspNetCore.HttpOverrides.dll
|-- Microsoft.AspNetCore.Server.IISIntegration.dll
|-- Microsoft.AspNetCore.Server.Kestrel.dll
|-- Microsoft.AspNetCore.WebUtilities.dll
|-- Microsoft.Extensions.Configuration.Abstractions.dll
|-- Microsoft.Extensions.Configuration.EnvironmentVariables.dll
|-- Microsoft.Extensions.Configuration.dll
|-- Microsoft.Extensions.DependencyInjection.Abstractions.dll
|-- Microsoft.Extensions.DependencyInjection.dll
|-- Microsoft.Extensions.FileProviders.Abstractions.dll
|-- Microsoft.Extensions.FileProviders.Physical.dll
|-- Microsoft.Extensions.FileSystemGlobbing.dll
|-- Microsoft.Extensions.Logging.Abstractions.dll
|-- Microsoft.Extensions.Logging.dll
|-- Microsoft.Extensions.ObjectPool.dll
|-- Microsoft.Extensions.Options.dll
|-- Microsoft.Extensions.PlatformAbstractions.dll
|-- Microsoft.Extensions.Primitives.dll
|-- Microsoft.Net.Http.Headers.dll
|-- System.Diagnostics.Contracts.dll
|-- System.Net.WebSockets.dll
|-- System.Text.Encodings.Web.dll
|-- dotnet-core-app.deps.json
|-- dotnet-core-app.dll
|-- dotnet-core-app.pdb
|-- dotnet-core-app.runtimeconfig.json
`-- web.config
```

## 运行多个应用程序
<a name="dotnet-manifest-multiapp"></a>

您可以定义多个部署目标，从而使用一个部署清单运行多个应用程序。

以下部署清单配置两个 .NET Core 应用程序。`WebApiSampleApp` 应用程序实现一个简单的 Web API 并在 `/api` 路径提供异步请求。`DotNetSampleApp` 应用程序是在根路径上服务请求的 Web 应用程序。

**Example aws-windows-deployment-manifest.json-多个应用程序**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "WebAPISample",
        "parameters": {
          "appBundle": "WebApiSampleApp.zip",
          "iisPath": "/api"
        }
      },
      {
        "name": "DotNetSample",
        "parameters": {
          "appBundle": "DotNetSampleApp.zip",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

此处提供了一个具有多个应用场合的示例应用程序：
+ **可部署的源代码包** [--v2.zip dotnet-multiapp-sample-bundle](samples/dotnet-multiapp-sample-bundle-v2.zip)
+ **源代码**-[dotnet-multiapp-sample-source-v2.zip](samples/dotnet-multiapp-sample-source-v2.zip)

## 配置 IIS 网站
<a name="dotnet-manifest-websites"></a>

您可以使用部署清单来配置使用自定义绑定和物理路径的 IIS 网站。当您需要设置用于侦听特定端口、使用自定义主机名或提供来自特定目录内容的网站时，这很有用。

以下部署清单配置了使用特定端口号和自定义物理路径来侦听 HTTP 的自定义 IIS 网站：

**Example aws-windows-deployment-manifest.json-IIS 网站配置**  

```
{
  "manifestVersion": 1,
  "iisConfig": {
    "websites": [
      {
        "name": "MyCustomSite",
        "physicalPath": "C:\inetpub\wwwroot\mysite",
        "bindings": [
          {
            "protocol": "http",
            "port": 8080,
            "hostName": "mysite.local"
          }
        ]
      }
    ]
  },
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "my-dotnet-core-app",
        "parameters": {
          "appBundle": "dotnet-core-app.zip",
          "iisWebSite": "MyCustomSite",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

在本示例中：
+ 使用自定义物理路径创建名为 MyCustomSite “” 的网站
+ 该网站在端口 8080 上具有 HTTP 绑定，并具有特定的主机名
+ ASP.NET Core 应用程序使用 `iisWebSite` 参数部署到此自定义网站

## 使用应用程序请求路由（ARR）
<a name="dotnet-manifest-arr"></a>

应用程序请求路由 (ARR) 和 URL 重写模块已预先安装并在 Elastic Beanstalk Windows 中可用。 AMIs这些模块使用 ebextensions 或应用程序配置，通过 IIS 配置实现高级路由场景和 URL 操作。

以下示例显示了简单的部署清单，该清单使用自定义端口，并结合用于设置基本 ARR 路由的 ebextensions 配置，对网站进行了配置：

**Example aws-windows-deployment-manifest.json-简单的 ARR 设置**  

```
{
  "manifestVersion": 1,
  "iisConfig": {
    "websites": [
      {
        "name": "ARRSite",
        "physicalPath": "C:\\inetpub\\wwwroot\\arrsite",
        "bindings": [
          {
            "protocol": "http",
            "port": 8080,
            "hostName": "localhost"
          }
        ]
      }
    ]
  },
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "BackendApp",
        "parameters": {
          "appBundle": "backend-app.zip",
          "iisWebSite": "ARRSite",
          "iisPath": "/backend"
        }
      }
    ]
  }
}
```

ARR 配置通过 ebextensions 完成。以下配置对基本 ARR 路由规则进行了设置：

**Example .ebextensions/arr-config.config – 基本 ARR 配置**  

```
files:
  "C:\\temp\\configure-arr.ps1":
    content: |
      # Enable ARR proxy at server level
      Set-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/proxy' -Name 'enabled' -Value 'True'
      
      # Clear any existing global rules to avoid conflicts
      Clear-WebConfiguration -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/rewrite/globalRules'

      # Add global rule to route all requests to backend
      Add-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' `
        -Filter 'system.webServer/rewrite/globalRules' `
        -Name '.' `
        -Value @{
          name = 'Route_to_Backend'
          stopProcessing = 'True'
          match = @{ url = '^(?!backend/)(.*)' }
          action = @{
            type = 'Rewrite'
            url = 'http://localhost:8080/backend/{R:1}'
          }
        }

container_commands:
  01_configure_arr:
    command: powershell -ExecutionPolicy Bypass -File "C:\\temp\\configure-arr.ps1"
    waitAfterCompletion: 0
```

此配置在端口 8080 上创建网站，并将 ARR 设置为将所有传入请求路由到在该站点上运行的后端应用程序。

## 配置应用程序池
<a name="dotnet-manifest-apppool"></a>

您可以在 Windows 环境中支持多个应用程序。有两种方法可供选择：
+ 您可以将 out-of-process托管模式与 Kestrel 网络服务器配合使用。使用此模型，您可以配置多个应用程序以在一个应用程序池中运行。
+ 您可以使用进程内托管模式。使用此模型，您可以使用多个应用程序池运行多个应用程序，每个池中只有一个应用程序。如果您使用的是 IIS 服务器并且需要运行多个应用程序，则必须使用此方法。

要将 Kesttrel 配置为在一个应用程序池中运行多个应用程序，请在 `hostingModel="OutofProcess"` 文件中添加 `web.config`。考虑以下示例。

**Example web.config-适用于 Ke out-of-process strel 托管模型**  

```
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add 
    name="aspNetCore" 
    path="*" verb="*" 
    modules="AspNetCoreModuleV2" 
    resourceType="Unspecified" />
</handlers>
<aspNetCore 
    processPath="dotnet" 
    arguments=".\CoreWebApp-5-0.dll" 
    stdoutLogEnabled="false" 
    stdoutLogFile=".\logs\stdout" 
    hostingModel="OutofProcess" />
</system.webServer>
</location>
</configuration>
```

**Example aws-windows-deployment-manifest.json-多个应用程序**  

```
{
"manifestVersion": 1,
  "deployments": {"msDeploy": [
      {"name": "Web-app1",
        "parameters": {"archive": "site1.zip",
          "iisPath": "/"
        }
      },
      {"name": "Web-app2",
        "parameters": {"archive": "site2.zip",
          "iisPath": "/app2"
        }
      }
    ]
  }
}
```

IIS 不支持一个应用程序池中的多个应用程序，因为它使用进程内托管模型。因此，您需要通过将每个应用程序分配到一个应用程序池来配置多个应用程序。换句话说，只将一个应用程序分配到一个应用程序池。

您可以将 IIS 配置为在 `aws-windows-deployment-manifest.json` 文件中使用不同的应用程序池。在参考下一个示例文件时进行以下更新：
+ 添加 `iisConfig` 部分，该部分包含称为 `appPools` 的子部分。
+ 在 `appPools` 数据块中，列出应用程序池。
+ 在 `deployments` 部分中，为每个应用程序定义 `parameters` 部分。
+ 对于每个应用程序，`parameters` 部分都将指定一个存档、一个运行该存档的路径以及要在其中运行的 `appPool` 。

以下部署清单配置了两个应用程序池，它们每 10 分钟重新启动一次应用程序。他们还将应用程序附加到以指定路径运行的 .NET Framework Web 应用程序。

**Example aws-windows-deployment-manifest.json-每个应用程序池一个应用程序**  

```
{
"manifestVersion": 1,
  "iisConfig": {"appPools": [
      {"name": "MyFirstPool",
       "recycling": {"regularTimeInterval": 10}
      },
      {"name": "MySecondPool",
       "recycling": {"regularTimeInterval": 10}
      }
     ]
    },
  "deployments": {"msDeploy": [
      {"name": "Web-app1",
        "parameters": {
           "archive": "site1.zip",
           "iisPath": "/",
           "appPool": "MyFirstPool"
           }
      },
      {"name": "Web-app2",
        "parameters": {
           "archive": "site2.zip",
           "iisPath": "/app2",
           "appPool": "MySecondPool"
          }
      }
     ]
    }
}
```

## 定义自定义部署
<a name="dotnet-manifest-custom"></a>

为了实现更多控制，您可以通过定义*自定义部署* 来完全自定义应用程序部署。

此部署清单指示 Elastic Beanstalk 在 32 位模式下执行脚 PowerShell 本。它指定了三个脚本：一个`install`在实例启动和部署期间运行的`uninstall`脚本 (`siteUninstall.ps1`)，一个在部署期间安装新版本之前执行的`restart`脚本 (`siteRestart.ps1`)，以及在 AWS 管理控制台中选择 “[重新启动应用服务器](environments-dashboard-actions.md)” 时运行的脚本 ()。`siteInstall.ps1`

**Example aws-windows-deployment-manifest.json-自定义部署**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "custom": [
      {
        "name": "Custom site",
        "architecture" : 32,
        "scripts": {
          "install": {
            "file": "siteInstall.ps1"
          },
          "restart": {
            "file": "siteRestart.ps1"
          },
          "uninstall": {
            "file": "siteUninstall.ps1"
          }
        }
      }
    ]
  }
}
```

包括使用清单和脚本运行源包中的应用程序所需的任何项目。

**Example C ustom-site-bundle .zip**  

```
.
|-- aws-windows-deployment-manifest.json
|-- siteInstall.ps1
|-- siteRestart.ps1
|-- siteUninstall.ps1
`-- site-contents.zip
```

# 部署清单架构参考
<a name="dotnet-manifest-schema"></a>

部署清单是一个 JSON 文件，用于定义 Elastic Beanstalk 应如何部署和配置您的 Windows 应用程序。本节为清单架构中所有支持的属性和配置选项提供全面的参考。

## 清单结构
<a name="dotnet-manifest-schema-structure"></a>

部署清单遵循具有以下顶级结构的特定 JSON 架构：

**Example 基本清单结构**  

```
{
  "manifestVersion": 1,
  "skipIISReset": false,
  "iisConfig": {
    "websites": [...],
    "appPools": [...]
  },
  "deployments": {
    "msDeploy": [...],
    "aspNetCoreWeb": [...],
    "custom": [...]
  }
}
```

### 顶级属性
<a name="dotnet-manifest-schema-top-level"></a>

`manifestVersion`（必需）  
*类型*：数字  
*默认值*：1  
*有效值：*1  
指定清单架构的版本。目前仅支持版本 1。

`skipIISReset`（可选）  
*类型*：布尔值  
*原定设置值：*false  
控制是否在应用程序部署期间重置 IIS。此标志同时影响 `msDeploy` 和 `aspNetCoreWeb` 部署类型。  
*行为：*  
+ *未指定或 `false`（默认）：*在安装、卸载和更新操作期间执行 IIS 重置。这是传统行为。
+ *`true`：*部署操作期间跳过 IIS 重置。
*优点：*  
+ *减少停机时间*：可减少部署期间应用程序的服务中断时间。
+ *加快部署*：省去了完全重启 IIS 并进行重新初始化所需的时间。
使用时`skipIISReset`，无论此标志设置如何，该[RestartAppServer](https://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_RestartAppServer.html)操作都会执行 IIS 重置。
*示例*：  

```
{
  "manifestVersion": 1,
  "skipIISReset": true,
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "my-dotnet-core-app",
        "parameters": {
          "archive": "dotnet-core-app.zip",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

`deployments`（必需）  
*类型：*对象  
包含应用程序的部署配置。此对象可包括 `msDeploy`、`aspNetCoreWeb` 和 `custom` 部署类型。

`iisConfig`（可选）  
*类型：*对象  
定义要在部署应用程序之前应用的 IIS 配置设置。同时支持网站和应用程序池配置。

## IIS 配置
<a name="dotnet-manifest-schema-iis-config"></a>

`iisConfig` 部分可让您在部署应用程序之前配置 IIS 设置。这包括使用特定配置设置应用程序池，以及使用自定义绑定配置 IIS 网站。

### IIS 网站
<a name="dotnet-manifest-schema-websites"></a>

您可以通过 IIS 网站，在部署应用程序之前配置自定义网站设置，包括物理路径和网络绑定。

**有关创建不同 IIS 网站的重要注意事项**  
*网站设置顺序：*网站按照其在 `websites` 数组中出现的顺序进行配置。平台按顺序处理每个网站配置，因此，如果网站之间存在依赖关系，请确保排序正确。
*防火墙和端口访问：*仅端口 80 会通过默认 Elastic Beanstalk Windows 防火墙配置自动公开。如果将网站配置为使用非标准端口，则必须通过 ebextensions 或自定义部署脚本来定义自定义防火墙规则，从而允许这些端口的外部访问。

**Example 网站配置**  

```
{
  "iisConfig": {
    "websites": [
      {
        "name": "MyCustomSite",
        "physicalPath": "C:\inetpub\wwwroot\mysite",
        "bindings": [
          {
            "protocol": "http",
            "port": 8080,
            "hostName": "mysite.local"
          },
          {
            "protocol": "https",
            "port": 8443
          }
        ]
      }
    ]
  }
}
```网站属性

`name`（必需）  
*类型*：字符串  
IIS 网站的名称。此名称用于在 IIS 管理器中标识网站，并且在 IIS 配置中必须是唯一名称。

`physicalPath`（必需）  
*类型*：字符串  
存储网站文件的服务器上的物理路径。此路径必须可供 IIS 工作线程访问。

`bindings`（必需）  
*类型*：数组  
*最少物品数量:*1  
一系列绑定配置，用于定义网站如何响应网络请求。每个绑定都会指定协议、端口和可选的主机名。

#### 网站绑定
<a name="dotnet-manifest-schema-bindings"></a>

网站绑定用于定义 IIS 网站将在其中侦听传入请求的网络端点。

`protocol`（必需）  
*类型*：字符串  
*有效值：*“http”、“https”  
用于绑定的协议。

`port`（必需）  
*类型*：整数  
*有效范围：*1-65535  
网站用于侦听请求的端口号。

`hostName`（可选）  
*类型*：字符串  
绑定的主机名（域名）。

### 应用程序池
<a name="dotnet-manifest-schema-app-pools"></a>

应用程序池可在应用程序之间提供隔离，并允许您为应用程序组配置运行时设置。

**Example 应用程序池配置**  

```
{
  "iisConfig": {
    "appPools": [
      {
        "name": "MyAppPool",
        "enable32Bit": false,
        "managedPipelineMode": "Integrated",
        "managedRuntimeVersion": "v4.0",
        "queueLength": 1000,
        "cpu": {
          "limitPercentage": 80,
          "limitAction": "Throttle",
          "limitMonitoringInterval": 5
        },
        "recycling": {
          "regularTimeInterval": 1440,
          "requestLimit": 10000,
          "memory": 1048576,
          "privateMemory": 524288
        }
      }
    ]
  }
}
```应用程序池属性

`name`（必需）  
*类型*：字符串  
应用程序池名称。此名称用于在部署配置中引用池。

`enable32Bit`（可选）  
*类型*：布尔值  
允许 32 位应用程序在 64 位版本的 Windows 上运行。对于需要 32 位兼容性的旧版应用程序，请将其设置为 `true`。

`managedPipelineMode`（可选）  
*类型*：字符串  
*有效值：*“Integrated”、“Classic”  
指定应用程序池的请求处理模式。

`managedRuntimeVersion`（可选）  
*类型*：字符串  
*有效值：*“No Managed Code”、“v2.0”、“v4.0”  
指定应用程序池适用的 .NET Framework 版本。

`queueLength`（可选）  
*类型*：整数  
HTTP.sys 在拒绝其他请求之前，为应用程序池列出队列的最大请求数。

#### CPU 配置
<a name="dotnet-manifest-schema-cpu-config"></a>

`cpu` 对象为应用程序池配置 CPU 用量限制和监控。

`limitPercentage`（可选）  
*类型*：数字  
应用程序池中工作线程可以消耗的 CPU 时间的最大百分比。

`limitAction`（可选）  
*类型*：字符串  
*有效值：*“”、NoAction “killw3wP”、“Throttle”、“” ThrottleUnderLoad  
达到 CPU 限制时采取的操作。

`limitMonitoringInterval`（可选）  
*类型*：数字  
CPU 监控和节流限制的重置周期（以分钟为单位）。

#### 回收配置
<a name="dotnet-manifest-schema-recycling-config"></a>

`recycling` 对象配置何时以及如何回收应用程序池工作线程。

`regularTimeInterval`（可选）  
*类型*：整数  
应用程序池进行回收的时间间隔（以分钟为单位）。设置为 0 可禁用基于时间的回收功能。

`requestLimit`（可选）  
*类型*：整数  
应用程序池在回收之前处理的最大请求数。

`memory`（可选）  
*类型*：整数  
触发工作线程回收的虚拟内存量（以千字节为单位）。

`privateMemory`（可选）  
*类型*：整数  
触发工作线程回收的私有内存量（以千字节为单位）。

## 部署类型
<a name="dotnet-manifest-schema-deployments"></a>

`deployments` 对象包含适用于不同应用程序类型的部署配置数组。每种部署类型都有特定的属性和使用案例。

### MSDeploy 部署
<a name="dotnet-manifest-schema-msdeploy"></a>

MSDeploy 部署用于可使用 Web Deploy (MSDeploy) 部署的传统.NET 框架应用程序。

**Example MSDeploy 部署配置**  

```
{
  "deployments": {
    "msDeploy": [
      {
        "name": "WebApp",
        "description": "Main web application",
        "parameters": {
          "appBundle": "webapp.zip",
          "iisPath": "/",
          "appPool": "DefaultAppPool"
        }
      }
    ]
  }
}
```MSDeploy 部署属性

`name`（必需）  
*类型*：字符串  
部署的唯一名称。此名称在清单中的所有部署中必须是唯一的。

`description`（可选）  
*类型*：字符串  
人类可读的部署描述。

`parameters`（必需）  
*类型：*对象  
 MSDeploy 操作的配置参数。

`scripts`（可选）  
*类型：*对象  
PowerShell 在部署生命周期的各个阶段运行的脚本。

#### MSDeploy 参数
<a name="dotnet-manifest-schema-msdeploy-parameters"></a>

`appBundle`（必需）  
*类型*：字符串  
应用程序捆绑包（ZIP 文件）相对于清单文件的路径。此捆绑包内含要部署的应用程序文件。

`iisWebSite`（可选）  
*类型*：字符串  
*默认：*“Default Web Site”  
要在其中部署应用程序的 IIS 网站。默认情况下，应用程序部署到“Default Web Site”。或者，您可以指定不同的网站名称，例如在 `iisConfig.websites` 部分中配置的网站名称。

`iisPath`（可选）  
*类型*：字符串  
*默认：*“/”  
将在其中部署应用程序的 IIS 中的虚拟目录路径。使用“/”用于根路径，使用“/api”用于子目录。

`appPool`（可选）  
*类型*：字符串  
运行此应用程序的应用程序池名称。

### ASP.NET Core 部署
<a name="dotnet-manifest-schema-aspnetcore"></a>

ASP.NET Core 部署专为 .NET Core 和.NET 5\$1 应用程序而设计。

**Example ASP.NET Core 部署配置**  

```
{
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "CoreAPI",
        "description": "ASP.NET Core Web API",
        "parameters": {
          "appBundle": "coreapi.zip",
          "iisPath": "/api",
          "appPool": "CoreAppPool"
        }
      }
    ]
  }
}
```

ASP.NET Core 部署使用与 MSDeploy 部署相同的属性结构，主要区别在于应用程序使用的运行时环境和托管模型。ASP.NET Core 部署参数

`appBundle`（必需）  
*类型*：字符串  
应用程序捆绑包相对于清单文件的路径。这可以是 ZIP 存档，也可以是包含已发布 ASP.NET Core 应用程序的目录路径。

`iisWebSite`（可选）  
*类型*：字符串  
*默认：*“Default Web Site”  
要在其中部署 ASP.NET Core 应用程序的 IIS 网站。默认情况下，应用程序部署到“Default Web Site”。或者，您可以指定不同的网站名称，例如在 `iisConfig.websites` 部分中配置的网站名称。

`iisPath`（可选）  
*类型*：字符串  
*默认：*“/”  
ASP.NET Core 应用程序在 IIS 中的虚拟目录路径。

`appPool`（可选）  
*类型*：字符串  
ASP.NET Core 应用程序的应用程序池。系统将针对 ASP.NET Core 托管对池进行适当配置。

### 自定义部署
<a name="dotnet-manifest-schema-custom"></a>

自定义部署通过 PowerShell 脚本提供对部署过程的完全控制。此部署类型对于需要自定义安装、配置或部署逻辑的复杂场景而言，非常有用。

**Example 自定义部署配置**  

```
{
  "deployments": {
    "custom": [
      {
        "name": "CustomService",
        "description": "Custom Windows service deployment",
        "architecture": 32,
        "scripts": {
          "install": {
            "file": "install-service.ps1"
          },
          "restart": {
            "file": "restart-service.ps1"
          },
          "uninstall": {
            "file": "uninstall-service.ps1",
            "ignoreErrors": true
          }
        }
      }
    ]
  }
}
```自定义部署属性

`name`（必需）  
*类型*：字符串  
自定义部署的唯一名称。

`description`（可选）  
*类型*：字符串  
自定义部署的描述。

`architecture`（可选）  
*类型*：整数  
*默认值：*32  
*有效值：*32、64  
Powershell 脚本执行模式的架构规范

`scripts`（必需）  
*类型：*对象  
PowerShell 定义部署行为的脚本。与其他部署类型相比，自定义部署支持其他脚本类型。

## 部署脚本
<a name="dotnet-manifest-schema-scripts"></a>

部署脚本是在部署生命周期的特定时刻运行的 PowerShell 脚本。不同的部署类型支持不同的脚本事件集。

### 脚本事件
<a name="dotnet-manifest-schema-script-events"></a>

可根据部署类型，使用以下脚本事件：标准部署脚本（msDeploy 和 aspNetCore Web）

`preInstall`  
在安装或更新应用程序前运行。

`postInstall`  
在安装或更新应用程序后运行。

`preRestart`  
在应用程序重新启动前运行。

`postRestart`  
在应用程序重新启动后运行。

`preUninstall`  
在卸载应用程序前运行。

`postUninstall`  
在卸载应用程序后运行。自定义部署脚本（仅限自定义部署）

`install`  
自定义部署的主安装脚本。此脚本负责安装应用程序或服务。

`restart`  
用于重新启动应用程序或服务的脚本。在重新启动环境时调用。

`uninstall`  
用于卸载应用程序或服务的脚本。在环境终止或删除应用程序期间调用。

### 脚本属性
<a name="dotnet-manifest-schema-script-properties"></a>

每个脚本都定义为具有以下属性的对象：

`file`（必需）  
*类型*：字符串  
 PowerShell 脚本文件相对于清单文件的路径。脚本扩展名应是 `.ps1`。

`ignoreErrors`（可选）  
*类型*：布尔值  
*原定设置值：*false  
如果设置为 `true`，即使脚本失败，部署也会继续进行。可将其用于非关键脚本或清理操作。

**Example 脚本配置示例**  

```
{
  "scripts": {
    "preInstall": {
      "file": "backup-config.ps1",
      "ignoreErrors": true
    },
    "postInstall": {
      "file": "configure-app.ps1"
    }
  }
}
```

# 在 Windows 平台分支中使用 EC2 快速启动
<a name="dotnet-ec2fastlaunch"></a>

 EC2 快速启动功能可缩短您的 Elastic Beanstalk 环境中的 Windows 实例启动时间。本主题旨在引导您在 Elastic Beanstalk 环境中使用此功能。从 [2025 年 1 月 22 日发布的 Windows 平台版本 2.16.2 开始，](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-01-22-windows.html)Elastic Beanstalk 平台版本包括启用快速启动的基础版本。 AMIs EC2 

## 默认 EC2 快速启动可用性
<a name="dotnet-ec2fastlaunch-default"></a>

最新的 Elastic Beanstalk Windows 平台版本 AMIs 包括自动启用快速启动 EC2 的基本版本，无需支付额外费用。但是，当较新的平台版本发布时， EC2 Fast Launch 可能不会在旧平台版本的基础 AMIs 上自动启用。

我们建议升级到最新的 Windows 平台版本，以便在自动启用 EC2 快速启动的情况下 AMIs 使用基本版本。但是，如果您需要继续使用现有平台版本，则可以在环境的基础 AMI 上手动启用 EC2 Fast Launch。有关说明，请参阅[手动配置 EC2 快速启动](#dotnet-ec2fastlaunch-manual)。

## 手动配置 EC2 快速启动
<a name="dotnet-ec2fastlaunch-manual"></a>

**注意**  
与使用自动启用 EC2 快速启动的平台版本相比，手动启用 EC2 快速启动可能会产生额外费用。有关 EC2 快速启动成本的更多信息，请参阅 *Amazon EC2 用户指南*中的[管理 EC2 快速启动底层资源的成](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/win-fast-launch-manage-costs.html)本页面。

按照以下步骤在你的 Elastic Beanstalk 环境使用的基于 Windows 的 AMI 上启用 EC2 快速启动：

**为您的 Elastic Beanstalk 环境手动启用 EC2 快速启动**

1. 确定环境的基础 AMI：

   按照[创建自定义 AMI](using-features.customenv.md) 中的步骤来确定环境的基础 AMI ID。请注意，您无需创建自定义 AMI，只需按照步骤查找当前的基础 AMI ID 即可。

1. 在 AMI 上启用 EC2 快速启动：

   使用 *Amazon EC2 用户指南*中的[启用 EC2 快速启动](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/win-fast-launch-configure.html)中的说明为您的 AMI 配置 EC2 快速启动。

# 向 .NET 应用程序环境中添加 Amazon RDS 数据库实例
<a name="create_deploy_NET.rds"></a>

本主题提供使用 Elastic Beanstalk 控制台创建 Amazon RDS 的说明。您可以使用 Amazon Relational Database Service（Amazon RDS）数据库实例来存储由应用程序收集和修改的数据。数据库可以耦合到您的环境并由 Elastic Beanstalk 进行管理，也可以被创建为解耦数据库并由另一项服务进行外部管理。在这些说明中，数据库与您的环境耦合并由 Elastic Beanstalk 管理。有关将 Amazon RDS 与 Elastic Beanstalk 集成的更多信息，请参阅 [将数据库添加到 Elastic Beanstalk 环境](using-features.managing.db.md)。

**Topics**
+ [向环境中添加数据库实例](#dotnet-rds-create)
+ [下载驱动程序](#dotnet-rds-drivers)
+ [连接到数据库](#dotnet-rds-connect)

## 向环境中添加数据库实例
<a name="dotnet-rds-create"></a>

**向环境添加数据库实例**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration (配置)**。

1. 在 **Database**（数据库）配置类别中，选择 **Edit**（编辑）。

1. 选择数据库引擎，然后输入用户名和密码。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

添加一个数据库实例大约需要 10 分钟。环境更新完成后，您的应用程序就可以通过以下环境属性访问数据库实例的主机名和其他连接信息：


| 属性名称 | 描述 | 属性值 | 
| --- | --- | --- | 
|  `RDS_HOSTNAME`  |  数据库实例的主机名。  |  在 Amazon RDS 控制台的 **Connectivity & security**（连接和安全）选项卡上：**Endpoint**（端点）。  | 
|  `RDS_PORT`  |  数据库实例接受连接的端口。默认值因数据库引擎而异。  |  在 Amazon RDS 控制台的 **Connectivity & security**（连接和安全）选项卡上：**Port**（端口）。  | 
|  `RDS_DB_NAME`  |  数据库名称 **ebdb**。  |  在 Amazon RDS 控制台的 **Configuration**（配置）选项卡上：**DB Name**（数据库名称）。  | 
|  `RDS_USERNAME`  |  您为数据库配置的用户名。  |  在 Amazon RDS 控制台的 **Configuration**（配置）选项卡上：**Master username**（主用户名）。  | 
|  `RDS_PASSWORD`  |  您为数据库配置的密码。  |  在 Amazon RDS 控制台中不可供参考。  | 

有关与 Elastic Beanstalk 环境耦合的数据库实例配置的更多信息，请参阅 [将数据库添加到 Elastic Beanstalk 环境](using-features.managing.db.md)。

## 下载驱动程序
<a name="dotnet-rds-drivers"></a>

使用 `EntityFramework` 下载并安装 `NuGet` 程序包以及适合您开发环境的数据库驱动程序。

**.NET 的常见实体框架数据库提供程序**
+ **SQL Server** – `Microsoft.EntityFrameworkCore.SqlServer`
+ **MySQL** – `Pomelo.EntityFrameworkCore.MySql`
+ **PostgreSQL** – `Npgsql.EntityFrameworkCore.PostgreSQL`

## 连接到数据库
<a name="dotnet-rds-connect"></a>

Elastic Beanstalk 在环境属性中提供所连数据库实例的连接信息。使用 `ConfigurationManager.AppSettings` 可读取这些属性并配置数据库连接。

**Example Helpers.cs - 连接字符串方法**  

```
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;

namespace MVC5App.Models
{
  public class Helpers
  {
    public static string GetRDSConnectionString()
    {
      var appConfig = ConfigurationManager.AppSettings;

      string dbname = appConfig["RDS_DB_NAME"];

      if (string.IsNullOrEmpty(dbname)) return null;

      string username = appConfig["RDS_USERNAME"];
      string password = appConfig["RDS_PASSWORD"];
      string hostname = appConfig["RDS_HOSTNAME"];
      string port = appConfig["RDS_PORT"];

      return "Data Source=" + hostname + ";Initial Catalog=" + dbname + ";User ID=" + username + ";Password=" + password + ";";
    }
  }
}
```

使用连接字符串初始化您的数据库环境。

**Example DBContext.cs**  

```
using System.Data.Entity;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;

namespace MVC5App.Models
{
  public class RDSContext : DbContext
  { 
    public RDSContext()
      : base(GetRDSConnectionString())
    {
    }

    public static RDSContext Create()
    {
      return new RDSContext();
    }
  }
}
```

# 的 AWS Toolkit for Visual Studio
<a name="dotnet-toolkit"></a>

Visual Studio 提供了适用于不同编程语言和应用程序类型的模板。开始时，您可以使用其中任何一个模板。Visual Studio 的 AWS Toolkit for Visual Studio 还提供了三个项目模板，用于引导应用程序的开发： AWS 控制台项目、 AWS Web 项目和 AWS 空项目。在此示例中，您将创建一个新的 ASP.NET Web 应用程序。

**创建一个新的 ASP.NET Web 应用程序项目**

1. 在 Visual Studio 的 **File**（文件）菜单中，单击 **New**（新建），然后单击 **Project**（项目）。

1. 在 **New Project**（新建项目）对话框中，单击 **Installed Templates**（已安装的模板），单击 **Visual C\$1**，然后单击 **Web**。单击 **ASP.NET Empty Web Application**（ASP.NET 空 Web 应用程序），键入项目名，然后单击 **OK**（确定）。

**运行项目**

请执行下列操作之一：

1. 按 **F5**。

1. 从 **Debug**（调试）菜单选择 **Start Debugging**（开始调试）。

## 本地测试
<a name="create_deploy_NET.sdlc.testlocal"></a>

Visual Studio 可让您轻松地在本地测试应用程序。要测试或者运行 ASP.NET Web 应用程序，您需要拥有 Web 服务器。Visual Studio 提供多个选项，如 Internet Information Services (IIS)、IIS Express 或者内置的 Visual Studio 开发服务器。要了解有关其中每个选项的详情以及确定最适合的选项，请参阅 [Visual Studio for ASP.NET Web 项目中的 Web 服务器](http://msdn.microsoft.com/en-us/library/58wxa9w5.aspx)。

## 创建 Elastic Beanstalk 环境
<a name="create_deploy_NET.sdlc.deploy"></a>

在测试应用程序后，可随时将其部署到 Elastic Beanstalk。

**注意**  
[配置文件](ebextensions.md)需为存档中要包含的项目的一部分。或者，您也可以不将配置文件包含在项目中，而是使用 Visual Studio 将所有文件部署到项目文件夹中。在 **Solution Explorer**（解决方案资源管理器）中，右键单击项目名称，然后单击 **Properties**（属性）。单击 **Package/Publish Web**（程序包/发布 Web）选项卡。在 **Items to deploy**（要部署的项）部分中，选择下拉列表中的 **All Files in the Project Folder**（项目文件夹中的所有文件）。

**使用适用于 Visual Studio 的工具包将应用程序部署到 Elastic Beanstalk AWS**

1. 在**解决方案资源管理器**中，右键单击您的应用程序，然后选择**发布到 AWS**。

1. 在 **Publish to AWS(发布到亚马逊云科技)** 向导中，输入您的账户信息。

   1. 对于 **AWS account to use for deployment**（要用于部署的亚马逊云科技账户），选择您的账户或选择 **Other**（其他）以输入新账户信息。

   1. 对于 **Region**（区域），选择要在其中部署应用程序的区域。有关可用 AWS 区域的信息，请参阅中的[AWS Elastic Beanstalk 终端节点和配额*AWS 一般参考*](https://docs.aws.amazon.com/general/latest/gr/elasticbeanstalk.html)。如果您选择了一个 Elastic Beanstalk 不支持的区域，则部署到 Elastic Beanstalk 的选项将变为不可用。

   1.  单击 **Deploy new application with template**（使用模板部署新应用程序）并选择 **Elastic Beanstalk**。然后单击 **Next**（下一步）。  
![\[发布到 AWS 向导 1\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-create-newapp-template.png)

1. 在 **Application**（应用程序）页面上，输入应用程序详细信息。

   1. 对于 **Name**（名称），键入应用程序的名称。

   1. 对于 **Description**，键入应用程序的描述。此为可选步骤。

   1. 应用程序的版本标签将自动显示在 **Deployment version label**（部署版本标签）中。

   1. 选择 **Deploy application incrementally**（以递增方式部署应用程序），可仅部署已更改的文件。因为只需更新已更改的文件而不是所有文件，所以，增量部署的速度更快。如果您选择此选项，则系统会从 Git commit ID 设置应用程序版本。如果您选择不以增量的方式部署应用程序，那么，可以更新 **Deployment version label**（部署版本标签）框中的版本标签。  
![\[发布到 Beanstalk 向导 2\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-publish-beanstalk1.png)

   1. 单击 **Next**（下一步）。

1. 在 **Environment**（环境）页面上，描述环境详细信息。

   1. 选择 **Create a new environment for this application**（为此应用程序创建新环境）。

   1. 对于 **Name**（名称），键入环境的名称。

   1. 对于 **Description**（描述），描述您的环境的特征。此为可选步骤。

   1. 选择需要的环境 **Type**（类型）。

      可以选择 **Load balanced（负载均衡）、auto scaled**（自动扩展）或 **Single instance**（单一实例）环境。有关更多信息，请参阅[环境类型](using-features-managing-env-types.md)。

       
**注意**  
对于单实例环境，负载均衡、自动扩展和运行状况检查 URL 设置不适用。

   1. 将光标移到 **Environment URL**（环境 URL）框中后，环境 URL 会自动显示在该框中。

   1. 单击 **Check availability**（检查可用性）按钮，确保环境 URL 处于可用状态。  
![\[发布到 Beanstalk 向导 3\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-publish-beanstalk2.png)

   1. 单击 **Next (下一步)**。

1. 在 **AWS Options**（亚马逊云科技选项）页面上，为部署配置额外的选项和安全信息。

   1.  对于 **Container Type**（容器类型），选择 **64bit Windows Server 2012 running IIS 8**（运行 IIS 8 的 64 位 Windows Server 2012）或 **64bit Windows Server 2008 running IIS 7.5**（运行 IIS 7.5 的 64 位 Windows Server 2008）。

   1. 对于 **Instance Type**（实例类型），选择 **Micro**（微型）。

   1. 对于 **Key pair (密钥对)**，选择 **Create new key pair (创建新密钥对)**。键入新密钥对的名称（在本示例中，我们使用 **myuswestkeypair**），然后单击 **OK**（确定）。key pair 允许远程桌面访问您的 Ama EC2 zon 实例。有关亚马逊 EC2 密钥对的更多信息，请参阅*亚马逊弹性计算云用户指南*中的[使用凭证](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-credentials.html)。

   1. 选择实例配置文件。

      如果您没有实例配置文件，请选择 **Create a default instance profile**（创建默认实例配置文件）。有关将实例配置文件与 Elastic Beanstalk 结合使用的信息，请参阅[管理 Elastic Beanstalk 实例配置文件](iam-instanceprofile.md)。

   1. 如果您有要用于您环境中的自定义 VPC，请单击 **Launch into VPC**（在 VPC 中启动）。您可以在下一页上配置 VPC 信息。有关 Amazon VPC 的更多信息，请转到 [Amazon Virtual Private Cloud (Amazon VPC)](https://aws.amazon.com/vpc/)。有关支持的非旧式容器类型的列表，请参阅[为什么某些平台版本标记为传统版本？](using-features.migration.md#using-features.migration.why)。  
![\[发布到 Beanstalk 向导 4\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-publish-beanstalk3b_iam.png)

   1.  单击 **Next (下一步)**。

1. 如果您选择在 VPC 内启动环境，则会显示 **VPC Options**（VPC 选项）页面；否则会显示 **Additional Options**（额外选项）页面。在这里可配置您的 VPC 选项。  
![\[适用于负载平衡、可扩展环境的 VPC 选项\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-publish-beanstalk3b_vpc.png)  
![\[适用于单一实例环境的 VPC 选项\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-publish-beanstalk3b_vpc-single.png)

   1. 选择您要在其中启动环境的 VPC 的 VPC ID。

   1. 对于负载均衡、可扩展的环境，如果您不希望弹性负载均衡器对 Internet 可用，请为 **ELB 模式**选择**私有**。

      对于单一实例环境，因为环境没有负载均衡器，所以此选项并不适用。有关更多信息，请参阅 [环境类型](using-features-managing-env-types.md)。

   1. 对于负载均衡、可扩展的环境，请为弹性负载均衡器和实例选择子网。 EC2 如果您创建了公有子网和私有子网，请确保弹性负载均衡器和 EC2 实例与正确的子网关联。默认情况下，Amazon VPC 会使用 10.0.0.0/24 创建默认的公有子网，并使用 10.0.1.0/24 创建私有子网。您可以在 Amazon VPC 控制台中查看您的现有子网，网址为[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)。

      对于单一实例环境，您的 VPC 实例只需要一个公有子网供实例使用。因为环境没有负载均衡器，所以为负载均衡器选择子网并不适用。有关更多信息，请参阅[环境类型](using-features-managing-env-types.md)。

   1. 对于负载均衡、可扩展的环境，请选择您已为实例创建的安全组（如果适用）。

      对于单一实例环境，您无需 NAT 设备。选择默认安全组。Elastic Beanstalk 为实例分配一个弹性 IP 地址，允许实例访问 Internet。

   1. 单击 **Next (下一步)**。

1. 在 **Application Options**（应用程序选项）页上，配置您的应用程序选项。

   1. 对于目标框架，选择 **.NET Framework 4.0**。

   1. Elastic Load Balancing 使用运行状况检查来确定运行您的应用程序的 Amazon EC2 实例是否运行正常。运行状况检查会按设置的时间间隔探测指定的 URL，从而确定该实例的状态。您可以通过在 **Application health check URL**（应用程序运行状况检查 URL）框中输入 URL（例如 `/myapp/index.aspx`）以覆盖默认 URL，使之对应于您的应用程序中的现有资源。有关应用程序运行状况检查的更多信息，请参阅“[健康检查](environments-cfg-clb.md#using-features.managing.elb.healthchecks)”。

   1. 如果要接收 Amazon Simple Notification Service (Amazon SNS) 通知，请键入电子邮件地址，这种通知会提醒您可能会影响应用程序的各种重大事件。

   1. **应用程序环境**部分允许您在运行您的应用程序的 Amazon EC2 实例上指定环境变量。由于不再需要在环境中移动时重新编译资源代码，此设置可实现更高的可移植性。

   1. 选择您希望用于部署应用程序的应用程序凭证选项。  
![\[发布到 Beanstalk 向导 6\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-publish-beanstalk3a.png)

   1. 单击 **Next (下一步)**。

1. 如果之前设置了 Amazon RDS 数据库，则会显示 **Amazon RDS DB Security Group**（Amazon RDS 数据库安全组）页面。如果要将 Elastic Beanstalk 环境连接到 Amazon RDS 数据库实例，请选择一个或多个安全组。否则，请继续执行下一步。准备就绪时，单击 **Next**（下一步）。  
![\[发布到 Beanstalk 向导 7\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-publish-beanstalk6b.png)

1.  查看您的部署选项。如果所有内容都准确无误，请单击 **Deploy (部署)**。  
![\[发布到 Beanstalk 向导 8\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-publish-beanstalk4.png)

   您的 ASP.NET 项目会导出为 Web 部署文件，上传到 Amazon S3，并通过 Elastic Beanstalk 注册为新的应用程序版本。Elastic Beanstalk 部署功能将监控您的环境，直到部署了新代码的环境变得可用为止。在“env:<environment name>”（环境: <环境名称>）选项卡上，您将看到环境的状态。  
![\[环境状态\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-env-status.png)

## 终止环境
<a name="create_deploy_NET.terminating"></a>

为了避免因未使用的 AWS 资源而产生费用，您可以使用适用于 Visual Studio 的 AWS Toolkit 来终止正在运行的环境。

**注意**  
 稍后，您始终都可以使用相同的版本启动新的环境。

**终止环境**

1.  在 **AWS Explorer** 中，展开 Elastic Beanstalk 节点和应用程序节点。右键单击应用程序环境，选择 **Terminate Environment**（终止环境）。

1. 当系统提示时，单击 **Yes**（是）以确认要终止该环境。Elastic Beanstalk 需要几分钟才能 AWS 终止在环境中运行的资源。  
![\[Elastic Beanstalk 的“终止环境”对话框\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-terminate-confirm.png)
**注意**  
终止环境时，与已终止环境相关联的别名记录可供任何人使用。

# 部署到您的环境
<a name="create_deploy_NET.sdlc.create.edit"></a>

在您的应用程序测试完毕后，就可以很轻松地编辑和重新部署您的应用程序，并在稍后查看相关结果。

 **编辑和重新部署您的 ASP.NET Web 应用程序** 

1.  在 “**解决方案资源管理器**” 中，右键单击您的应用程序，然后单击 “**重新发布到环境” < *your environment name* >**。此时，会打开 **Re-publish to AWS Elastic Beanstalk**（重新发布到 Amazon Elastic Beanstalk）向导。  
![\[发布到 Beanstalk 向导 1\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-republish-beanstalk-sameenv.png)

1.  查看您的部署详细信息，然后单击 **Deploy**（部署）。
**注意**  
如果要更改任何设置，可以单击 **Cancel**（取消），并改为使用 **Publish to AWS**（发布到亚马逊云科技）向导。有关说明，请参阅[创建 Elastic Beanstalk 环境](dotnet-toolkit.md#create_deploy_NET.sdlc.deploy)。

   您的更新 ASP.NET Web 项目会导出为 Web 部署文件 (其中带有新的版本标签)，上传到 Amazon S3，然后在 Elastic Beanstalk 中注册为新的应用程序版本。Elastic Beanstalk 部署功能会监控您的现有环境，直到该环境具有最新部署的代码并且变为可用状态为止。在 **env: < *environment name* >** 选项卡上，您将看到环境的状态。

例如，如果您需要回滚到以前的应用程序版本，也可以将现有的应用程序部署到现有的环境中。

**将应用程序版本部署到现有的环境中**

1. 通过在 **AWS Explorer** 中展开 Elastic Beanstalk 节点来右键单击您的 Elastic Beanstalk 应用程序。选择 **View Status**（查看状态）。

1. 在 “**应用程序:< *application name* >**” 选项卡中，单击 “**版本**”。  
![\[应用程序版本\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-publish-app-version.png)

1. 单击您希望部署的应用程序版本，然后单击 **Publish Version**（发布版本）。

1.  在 **Publish Application Version**（发布应用程序版本）向导中，单击 **Next**（下一步）。  
![\[发布应用程序版本向导 1\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-republish-beanstalk2a.png)

1.  查看您的部署选项，然后单击 **Deploy**（部署）。  
![\[发布应用程序版本向导 2\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-publish-app-version-wizard3.png)

   您的 ASP.NET 项目将导出为 Web 部署文件，并上传到 Amazon S3。Elastic Beanstalk 部署功能将监控您的环境，直到部署了新代码的环境变得可用为止。在 **env: < *environment name* >** 选项卡上，您将看到环境的状态。

# 管理 Elastic Beanstalk 应用程序环境
<a name="create_deploy_NET.managing"></a>

借助 Visual Studio 的 AWS Toolkit for Visual Studio AWS 和管理控制台，您可以更改应用程序环境所用 AWS 资源的配置和配置。有关如何使用管理控制台 AWS 管理应用程序环境的信息，请参阅[管理 Elastic Beanstalk 环境](using-features.managing.md)。本部分介绍可在 AWS Toolkit for Visual Studio 中编辑的特定服务设置，它也是应用程序环境配置的一部分。

## 更改环境配置设置
<a name="create_deploy_NET.managing.env"></a>

在部署应用程序时，Elastic Beanstalk 会配置许多云计算服务。 AWS 您可以使用适用于 Visual Studio 的 AWS Toolkit 来控制如何配置这些单独的服务。

**编辑应用程序的环境设置**
+ 展开 Elastic Beanstalk 节点和应用程序节点。然后在 **AWS Explorer** 中右键单击您的 Elastic Beanstalk 环境。选择 **View Status (查看状态)**。

  您现在可以配置以下各项的设置：
  + 服务器
  + 负载均衡
  + AutoScaling
  + 通知
  + 环境属性

# 使用 Visual Studio AWS 工具包配置 EC2 服务器实例
<a name="create_deploy_NET.managing.ec2"></a>

亚马逊弹性计算云 (Amazon EC2) 是一项网络服务，用于启动和管理亚马逊数据中心的服务器实例。您可以根据需要随时使用 Amazon EC2 服务器实例，并且可以用于任何合法目的。实例可以按照不同的规模和配置进行提供。欲了解更多信息，请访问 [Amazon EC2](https://aws.amazon.com/ec2/)。

你可以使用 Visual Studio Toolkit for Visual Studio EC2 的应用程序环境选项卡中的服务器选项卡来编辑 Elastic Beanstalk 环境 AWS 的亚马逊实例**配置**。

![\[Elastic Beanstalk 服务器配置面板\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-server.png)


## 亚马逊 EC2 实例类型
<a name="create_deploy_NET.managing.ec2.instancetypes"></a>

**Instance type**（实例类型）显示可用于您的 Elastic Beanstalk 应用程序的实例类型。请更改实例类型以选择特征（包括内存大小和 CPU 处理能力）最适合您的应用程序的服务器。例如，具有大量操作和长时间运行的操作的应用程序可能需要更多 CPU 或内存。

有关可用于 Elastic Beanstalk 应用程序的亚马逊 EC2 实例类型的更多信息[，请参阅*亚马逊弹性计算云用户指南中的*实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)类型。

## 亚马逊 EC2 安全组
<a name="create_deploy_NET.managing.ec2.securitygroups"></a>

您可以使用亚马逊安全组控制对您的 Elastic Beanstalk *应用程序 EC2 *的访问权限。安全组会定义实例的防火墙规则。这些规则会指定应将哪些进入 (即传入) 网络流量提交给实例。将丢弃所有其他进入流量。您可以随时针对不同的组修改这些规则。新的规则会自动在所有现在运行的和将来启动的实例上强制实施。

您可以使用 AWS 管理控制台或使用适用于 Visual Studio 的 AWS Toolkit for Visual Studio 来设置您的亚马逊 EC2 安全组。**您可以通过在 EC2 安全组文本框中输入一个或多个亚马逊安全组名称（以逗号分隔）来指定哪些 EC2 亚马逊安全组控制对您的 Elastic Beanstalk 应用程序的访问权限。EC2 **

**注意**  
如果要启用应用程序的运行状况检查，请确保可以从源 CIDR 范围 0.0.0.0/0 访问端口 80 (HTTP)。有关运行状况检查的详细信息，请参阅 [运行状况检查](create_deploy_NET.managing.elb.md#create_deploy_NET.managing.elb.healthchecks)。

**使用适用于 Visual Studio 的 AWS 工具包创建安全组**

1.  在 Visual Studio 中，在**AWS 资源管理器**中，展开 **Amazon EC2** 节点，然后双击 “**安全组**”。

1.  单击 **Create Security Group**（创建安全组），并输入安全组的名称和描述。

1.  单击 **OK (确定)**。

有关亚马逊 EC2 安全组的更多信息，请参阅*亚马逊弹性计算云用户指南*中的[使用安全组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html)。

## 亚马逊 EC2 密钥对
<a name="create_deploy_NET.managing.ec2.keypair"></a>

您可以使用亚马逊密钥对安全地登录为您的 Elastic Beanstalk 应用程序预配置的亚马逊 EC2 实例。 EC2 

**重要**  
您必须创建亚马逊 EC2 密钥对并将您的 Elastic Beanstalk（预配置的亚马逊 EC2 实例）配置为使用亚马逊密钥 EC2 对，然后才能访问已配置的 Elastic BeanStalk 的亚马逊实例。 EC2 将应用程序部署到 Elastic Beanstalk 时，可以使用 Visual Studio AWS 工具包中的 “**发布**到 AWS” 向导创建密钥对。如果要使用该 Toolkit 创建额外的密钥对，请按照以下步骤操作。或者，您可以使用[AWS 管理控制台](https://console.aws.amazon.com/)设置您的 Amazon EC2 密钥对。有关为亚马逊创建密钥对的说明 EC2，请参阅[亚马逊弹性计算云入门指南](https://docs.aws.amazon.com/AWSEC2/latest/GettingStartedGuide/)。

 **现有密钥对**文本框允许您指定亚马逊密钥对的名称，该 EC2 密钥对可用于安全登录运行 Elastic Beanstalk 应用程序的亚马逊 EC2 实例。

**指定 Amazon EC2 密钥对的名称**

1. 展开 **Amazon EC2** 节点并双击 “**密钥对**”。

1.  单击 **Create Key Pair**（创建密钥对），输入密钥对名称。

1.  单击 **OK**（确定）。

有关亚马逊 EC2 密钥对的更多信息，请前往[亚马逊*弹性计算云用户指南中的使用亚马逊 EC2*凭证](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-credentials.html)。有关连接到 Amazon EC2 实例的更多信息，请参阅[列出和连接到服务器实例](create_deploy_NET.ec2connect.md)。

## 监控间隔
<a name="create_deploy_NET.managing.monitoring"></a>

 默认情况下，仅启用基本的 Amazon CloudWatch 指标。这些指标会以五分钟为周期返回数据。您可以启用更精细的一分钟 CloudWatch指标，方法是为环境的 “**配置**” 选项卡的 “**服务器**” 部分的 “**监控间隔**” 选择 **1 分钟**。 AWS Toolkit for Eclipse

**注意**  
一分钟间隔指标可能会收取 Amazon CloudWatch 服务费。有关更多信息 CloudWatch，请参阅 [Amazon](https://aws.amazon.com/cloudwatch/)。

## 自定义 AMI ID
<a name="create_deploy_NET.managing.customami"></a>

 您可以用自己的自定义 AMI 覆盖用于您的 Amazon EC2 实例的默认 AMI，方法是在环境的 “**配置**” 选项卡的 “**服务器**” 部分的 “**自定义 AMI ID**” 框中输入自定义 AMI 的标识符 AWS Toolkit for Eclipse。

**重要**  
使用您自己的 AMI 是一项高级任务，应小心谨慎地执行。如果需要自定义 AMI，则建议您先使用默认 Elastic Beanstalk AMI，然后修改它。为了被认为是健康的，Elastic Beanstalk EC2 希望亚马逊实例满足一系列要求，包括运行主机管理器。如果未满足这些要求，您的环境可能无法正常运行。

# 使用 Visual Studio 的 AWS 工具包配置弹性负载平衡
<a name="create_deploy_NET.managing.elb"></a>

Elastic Load Balancing 是一种 Amazon Web 服务，可帮助您提高应用程序的可用性和可扩展性。该服务使您可以轻松地在两个或多个 Amazon EC2 实例之间分配应用程序负载。Elastic Load Balancing 通过冗余实现可用性，并支持应用程序的流量增长。

 Elastic Load Balancing 可让您自动在运行的所有实例之间分配和平衡传入的应用程序流量。在您需要增加应用程序容量时，该服务还可让您轻松地添加新的实例。

 Elastic Beanstalk 会在您部署应用程序时自动地预配置 Elastic Load Balancing。你可以使用 Visual Studio Toolkit for Visual Studio EC2 的应用程序环境选项卡中的 “**负载**均衡器” 选项卡来编辑 Elastic Beanstalk AWS 环境的亚马逊实例配置。

![\[Elastic Beanstalk Elastic Load Balancing 配置面板\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-loadbalancer.png)


 以下部分介绍了可为应用程序配置的 Elastic Load Balancing 参数。

## 端口
<a name="create_deploy_NET.managing.elb.ports"></a>

为处理您的 Elastic Beanstalk 应用程序的请求而配置的负载均衡器会向运行您的应用程序的 EC2 亚马逊实例发送请求。预配置的负载均衡器可以监听 HTTP 和 HTTPS 端口上的请求，并将请求路由到 AWS Elastic Beanstalk 应用程序中的 Amazon EC2 实例。默认情况下，负载均衡器将处理 HTTP 端口上的请求。必须至少打开其中一个端口，要么是 HTTP 要么是 HTTPS。

![\[Elastic Beanstalk Elastic Load Balancing 配置 - 端口\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-loadbalancer-ports.png)


**重要**  
确保您指定的端口没有锁定；否则，用户将无法连接到 Elastic Beanstalk 应用程序。

### 控制 HTTP 端口
<a name="create_deploy_NET.managing.elb.ports.http"></a>

若要关闭 HTTP 端口，请为 **HTTP Listener Port**（HTTP 侦听器端口）选择 **OFF**（关）。若要打开 HTTP 端口，需从列表中选择一个 HTTP 端口（例如，**80**）。

**注意**  
要使用默认端口 80 (如端口 8080) 以外的端口来访问您的环境，请将侦听器添加到现有负载均衡器并配置新侦听器来侦听该端口。  
例如，[AWS CLI 对于经典负载均衡器](https://docs.aws.amazon.com/cli/latest/reference/elb/create-load-balancer-listeners.html)，键入以下命令，替换*LOAD\$1BALANCER\$1NAME*为 Elastic Beanstalk 的负载均衡器的名称。  

```
aws elb create-load-balancer-listeners --load-balancer-name LOAD_BALANCER_NAME --listeners "Protocol=HTTP, LoadBalancerPort=8080, InstanceProtocol=HTTP, InstancePort=80"
```
例如，[AWS CLI 对于应用程序负载均衡器](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-listener.html)，键入以下命令，替换*LOAD\$1BALANCER\$1ARN*为 Elastic Beanstalk 的负载均衡器的 ARN。  

```
aws elbv2 create-listener --load-balancer-arn LOAD_BALANCER_ARN --protocol HTTP --port 8080
```
如果希望 Elastic Beanstalk 监控您的环境，请勿删除端口 80 上的侦听器。

### 控制 HTTPS 端口
<a name="create_deploy_NET.managing.elb.ports.https"></a>

Elastic Load Balancing 支持为客户端与负载均衡器的连接启用流量加密的 HTTPS/TLS 协议。从负载均衡器到 EC2 实例的连接使用纯文本加密。默认情况下，HTTPS 端口是关闭的。

**打开 HTTPS 端口**

1. 使用 AWS Certificate Manager (ACM) 创建新证书或将证书和密钥上传到 AWS Identity and Access Management (IAM)。有关请求 ACM 证书的更多信息，请参阅 *AWS Certificate Manager 用户指南*中的[请求证书](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request.html)。有关将第三方证书导入 ACM 中的更多信息，请参阅 *AWS Certificate Manager 用户指南*中的[导入证书](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)。如果您所在的[地区没有](https://docs.aws.amazon.com/general/latest/gr/acm.html) ACM，请使用 AWS Identity and Access Management (IAM) 上传第三方证书。ACM 和 IAM 服务存储证书并为 SSL 证书提供 Amazon Resource Name (ARN)。有关创建证书并将证书上传到 IAM 的更多信息，请参阅 *IAM 用户指南* 中的[使用服务器证书](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingServerCerts.html)。

1. 通过为 **HTTPS Listener Port**（HTTP 侦听器端口）选择端口来指定 HTTPS 端口。  
![\[Elastic Beanstalk Elastic Load Balancing 配置 – SSL\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-elb-ssl.png)

1. 对于 **SSL Certificate ID**（SSL 证书 ID），输入 SSL 证书的 Amazon Resource Name（ARN）。例如，**arn:aws:iam::123456789012:server-certificate/abc/certs/build** 或 **arn:aws:acm:us-east-2:123456789012:certificate/12345678-12ab-34cd-56ef-12345678**。使用您在步骤 1 中创建或上传的 SSL 证书。

若要关闭 HTTPS 端口，请为 **HTTPS Listener Port**（HTTPS 侦听器端口）选择 **OFF**（关）。

## 运行状况检查
<a name="create_deploy_NET.managing.elb.healthchecks"></a>

运行状况检查定义包括一个要用来查询实例运行状况的 URL。默认情况下，对于非早期容器，Elastic Beanstalk 使用 TCP:80，而对于早期容器，则使用 HTTP:80。您可以通过在 **Application Health Check URL**（应用程序运行状况检查 URL）框中输入 URL（例如 `/myapp/default.aspx`）来覆盖默认 URL，使之对应于您的应用程序中的现有资源。如果您覆盖默认 URL，则 Elastic Beanstalk 将使用 HTTP 来查询资源。要检查您使用的是否是早期容器类型，请参阅[为什么某些平台版本标记为传统版本？](using-features.migration.md#using-features.migration.why)。

 您可以使用**负载平衡**面板的**EC2 实例运行状况检查**部分来控制运行状况检查的设置。

![\[Elastic Beanstalk Elastic Load Balancing 配置 – 运行状况检查\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-loadbalancer-healthcheck.png)


运行状况检查定义包括一个要用来查询实例运行状况的 URL。通过在 **Application Health Check URL**（应用程序运行状况检查 URL）框中输入 URL（例如 `/myapp/index.jsp`）来覆盖默认 URL，使之对应于您的应用程序中的现有资源。

下表介绍了可为您的应用程序设置的运行状况检查参数。
+ 在**运行状况检查间隔（秒）**中，输入 Elastic Load Balancing 在两次运行状况检查之间等待应用程序的 Amazon EC2 实例的秒数。
+  对于 **Health Check Timeout (seconds)**（运行状况检查超时(秒)），指定 Elastic Load Balancing 在将实例视为无响应之前等待响应的秒数。
+ 对于 **Healthy Check Count Threshold (良好运行状况检查计数阈值)** 和 **Unhealthy Check Count Threshold (不佳运行状况检查计数阈值)**，指定 Elastic Load Balancing 更改实例的运行状况状态之前连续的成功或失败 URL 探测的次数。例如，为 **Unhealthy Check Count Threshold**（不佳运行状况检查计数阈值）指定 **5**，即表示必须在该 URL 连续 5 次返回错误消息或超时后，Elastic Load Balancing 才将运行状况检查视为失败。

## 会话
<a name="create_deploy_NET.managing.elb.sessions"></a>

默认情况下，负载均衡器会以最小的负载将每个请求独立地传送给该服务器实例。比较起来，粘性 (VPC) 会将用户的会话绑定到具体的服务器实例，以便该用户在会话期间发出的所有请求都会发送到同一个服务器实例中。

 在为应用程序启用粘性会话后，Elastic Beanstalk 会使用负载均衡器生成的 HTTP Cookie。负载均衡器会使用负载均衡器生成的特别 Cookie 来跟踪每个请求的应用程序实例。在负载均衡器收到请求时，它首先会检查并查看请求中是否存在这个 Cookie。如果是这样的话，该请求会发送到 Cookie 中指定的应用程序实例。如果没有 Cookie，负载均衡器会根据现有的负载均衡算法选择一个应用程序实例。响应中会插入 Cookie，从而将同一用户发出的后续请求绑定到该应用程序实例中。策略配置会定义 Cookie 的到期时间，从而确定每个 Cookie 的有效持续时间。

您可以使用 **Load Balancer**（负载均衡器）选项卡上的 **Sessions**（会话）部分指定是否让应用程序的负载均衡器支持会话粘性。

![\[Elastic Beanstalk Elastic Load Balancing 配置 - 会话\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-loadbalancer-sessions.png)


 有关 Elastic Load Balancing 的更多信息，请转到 [Elastic Load Balancing 开发人员指南](https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/)。

# 使用 Visual Studio 的 AWS 工具包配置 Auto Scaling
<a name="create_deploy_NET.managing.as"></a>

Amazon A EC2 uto Scaling 是一项亚马逊网络服务，旨在根据用户定义的触发器自动启动或终止亚马逊 EC2 实例。用户可以设置 *Auto Scaling 组* 并将 *触发器* 与这些组关联，以根据带宽使用量或 CPU 利用率等指标自动扩展计算资源。Amazon A EC2 uto Scaling 与亚马逊 CloudWatch 合作，检索运行您的应用程序的服务器实例的指标。

Amazon A EC2 uto Scaling 允许您选择一组亚马逊 EC2 实例并设置各种参数，以使该组的数量自动增加或减少。Amazon A EC2 uto Scaling 可以在该组中添加或移除亚马逊 EC2 实例，以帮助您无缝处理应用程序的流量变化。

 Amazon A EC2 uto Scaling 还会监控其启动的每个亚马逊 EC2 实例的运行状况。如果有任何实例意外终止，Amazon A EC2 uto Scaling 会检测到终止情况并启动替代实例。此功能使您能够自动维护固定的、所需数量的 Amazon EC2 实例。

Elastic Beanstalk 为您的应用程序配置 A EC2 mazon Auto Scaling。你可以使用 Visual Studio 工具包中应用程序环境选项卡中的 “**自动**缩放” 选项卡来编辑 Elastic Be EC2 anstalk 环境的亚马逊实例 AWS 配置。

![\[Elastic Beanstalk Auto Scaling 配置面板\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-autoscaling.png)


以下部分介绍了如何配置您的应用程序的 Auto Scaling 参数。

## 启动配置
<a name="create_deploy_NET.managing.as.launchconfig"></a>

您可以编辑启动配置以控制您的 Elastic Beanstalk 应用程序如何配置 A EC2 mazon Auto Scaling 资源。

**Minimum Instance Count**（最小实例计数）和 **Maximum Instance Count**（最大实例计数）框可让您指定 Elastic Beanstalk 应用程序使用的 Auto Scaling 组的最小大小和最大大小。

![\[Elastic Beanstalk Auto Scaling 启动配置的配置窗口\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-autoscaling-launchconfig.png)


**注意**  
要保持固定数量的 Amazon EC2 实例，请将**最小实例数**和**最大实例数**设置为相同的值。

**可用区域**框允许您指定希望您的 Amazon EC2 实例所在的可用区域数量。如果要构建容错的应用程序，则设置这个数字是十分重要的。如果一个可用区域出现故障，您的实例仍然会在其他可用区域上运行。

**注意**  
目前，您无法指定您的实例将放入哪些可用区域。

## 触发器
<a name="create_deploy_NET.managing.as.trigger"></a>

*触发器*是一种 Amazon A EC2 uto Scaling 机制，您可以将其设置为告知系统何时要增加（*扩展*）实例数量，以及何时要减少（*缩*小）实例数量。您可以将*触*发器配置为根据发布到 Amazon CloudWatch 的任何指标（例如 CPU 利用率）触发，并确定是否满足了您指定的条件。当在指定的时间期限内超过为该指标指定的条件上限或者下限时，该触发会启动名为*扩展活动* 的长期运行流程。

你可以使用 Visual Studio 的 Toolkit for AWS Visual Studio 为 Elastic Beanstalk 应用程序定义扩展触发器。

![\[Elastic Beanstalk Auto Scaling 触发器\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-autoscaling-triggers.png)


Amazon A EC2 uto Scaling 触发器的工作原理是监视实例的特定亚马逊 CloudWatch 指标。触发包括 CPU 使用率、网络流量和磁盘活动。使用 **Trigger Measurement (触发测量标准)** 设置选择触发的指标。

以下列表描述了您可以使用 AWS 管理控制台配置的触发器参数。
+ 您可以指定该触发应该使用的统计数据。可以为 **Trigger Statistic**（触发统计数据）选择 **Minimum**（最小值）、**Maximum**（最大值）、**Sum**（总计）或 **Average**（平均值）。
+ 对于 **Unit of Measurement**（测量单位），指定触发测量单位。
+ “**衡量周期**” 框中的值指定 Amazon CloudWatch 衡量触发指标的频率。**Breach Duration**（违例持续时间）是激活触发器之前，指标可以超出所定义限制范围 [通过 **Upper Threshold**（上限）和 **Lower Threshold**（下限）指定] 的时长。
+ 对于**较高的漏洞规模增量**和**较低的漏洞规模增量**，请指定在执行扩展活动时要添加或删除多少 EC2个 Amazon 实例。

有关 Amazon A EC2 uto Scaling 的更多信息，请参阅*亚马逊[弹性计算云文档中的 Amazon A](https://aws.amazon.com/documentation/ec2/) ut EC2 o Scaling* 部分。

# 使用 Visual Studio 的 AWS 工具包配置通知
<a name="create_deploy_NET.container.sns"></a>

Elastic Beanstalk 使用 Amazon Simple Notification Service (Amazon SNS) 向您通知影响应用程序的重要事件。要启用 Amazon SNS 通知，只需在 **Email Address**（电子邮件地址）框中输入您的电子邮件地址。若要禁用这些通知，请从框中删除您的电子邮件地址。

![\[Elastic Beanstalk 通知窗口\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-notifications.png)


# 使用 Visual Studio AWS 工具包配置.NET 容器
<a name="create_deploy_NET.container"></a>

 **容器/.NET 选项**面板允许您微调 Amazon EC2 实例的行为并启用或禁用 Amazon S3 日志轮换。你可以使用 Visual Studio 的 AWS Toolkit for Visual Studio 来配置你的容器信息。

**注意**  
您可以通过切换环境别名记录的方法将配置设置修改为零故障时间。有关更多信息，请参阅[使用 Elastic Beanstalk 进行蓝/绿部署](using-features.CNAMESwap.md)。

如果需要，则可以扩展参数数量。有关扩展参数的信息，请参阅[选项设置](ebextensions-optionsettings.md)。

**访问 Elastic Beanstalk 应用程序的“容器/.NET 选项”面板**

1. 在 Visual Studio 的 AWS Toolkit for Visual Studio 中，展开 Elastic Beanstalk 节点和你的应用程序节点。

1. 在 **AWS Explorer** 中，双击您的 Elastic Beanstalk 环境。

1. 在 **Overview**（概述）窗格底部，单击 **Configuration**（配置）选项卡。

1. 在 **Container**（容器）下，您可以配置容器的选项。  
![\[Elastic Beanstalk 容器面板\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-container.png)

## .NET 容器选项
<a name="create_deploy_NET.container.vs.options"></a>

您可以选择应用程序的 .NET Framework 版本。为 **Target runtime**（目标运行时）选择 2.0 或 4.0。如果要启用 32 位应用程序，请选择 **Enable 32–bit Applications**（启用 32 位应用程序）。

## 应用程序设置
<a name="create_deploy_NET.container.vs.options.envprop"></a>

**Application Settings**（应用程序设置）部分可让您指定您可从应用程序代码中读取的环境变量。

![\[Elastic Beanstalk 容器面板\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-container-envproperties.png)


# 管理账户
<a name="create_deploy_NET.accounts"></a>

## 
<a name="create_deploy_NET.accounts.details"></a>

如果要设置不同的 AWS 帐户来执行不同的任务，例如测试、暂存和生产，则可以使用适用于 Visual Studio 的 AWS Toolkit 来添加、编辑和删除帐户。

**管理多个账户**

1.  在 Visual Studio 的 **View**（视图）菜单中，单击 **AWS Explorer**。

1.  在**账户**列表旁边，单击**添加账户**按钮。  
![\[AWS 资源管理器选项卡\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-aws-explorer-tab.png)

    此时显示**添加账户**对话框。  
![\[Add account（添加账户）对话框\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-add-account.png)

1. 填写所需的信息。

1.  现在，您的账户信息会显示在 **AWS Explorer** 选项卡中。在向 Elastic Beanstalk 发布时，您可以选择希望使用的账户。

# 列出和连接到服务器实例
<a name="create_deploy_NET.ec2connect"></a>

您可以通过 Visual Studio 的 Toolkit for AWS Visual Studio 或管理控制台查看运行 Elastic Beanstalk 应用程序环境的亚马逊 EC2 实例列表。 AWS 您可以使用远程桌面连接到这些实例。有关使用 AWS 管理控制台列出和连接服务器实例的信息，请参阅[列出和连接到服务器实例](using-features.ec2connect.md)。以下部分将指导您使用适用于 Visual Studio 的 AWS Toolkit 查看服务器实例并将其连接到服务器实例。

**查看和连接环境的 Amazon EC2 实例**

1.  在 Visual Studio 的**AWS 资源管理器**中，展开 **Amazon EC2** 节点，然后双击 “**实例**”。

1.  在实例列中右键单击在应用程序负载均衡器中运行的 Amazon EC2 **实例的实例** ID，然后从快捷菜单中选择**打开远程桌面**。  
![\[Open Remote Desktop 对话框\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-rdp-login.png)

1.  选择**使用 EC2 密钥对登录**并将用于部署应用程序的私钥文件的内容粘贴到**私钥**框中。另一种方法是，在 **User name**（用户名）和 **Password**（密码）文本框中，输入您的用户名和密码。
**注意**  
如果密钥对保存在工具包内，那么不会显示该文本框。

1. 单击 **OK (确定)**。

# 监控应用程序运行状况
<a name="create_deploy_NET.healthstatus"></a>

当您运行生产网站时，了解您的应用程序是否可用以及能否对请求做出响应非常重要。为了帮助监控应用程序的响应能力，Elastic Beanstalk 提供了一些功能，您可以在其中监控有关应用程序的统计数据并创建在超过阈值时触发的警报。

有关 Elastic Beanstalk 提供的运行状况监控的信息，请参阅[基本运行状况报告](using-features.healthstatus.md)。

您可以使用 Visual Studio 的 AWS Toolkit for Visual Studio 或 AWS 管理控制台来访问有关应用程序的操作信息。

该工具包会在**状态**字段中显示您环境的状态和应用程序运行状况。

![\[Elastic Beanstalk 运行状况状态\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-env-status.png)


**监控应用程序运行状况**

1. 在 Visual Studio 的 AWS Toolkit for Visual Studio 中，在**AWS 资源管理器**中，展开 Elastic Beanstalk 节点，然后展开您的应用程序节点。

1. 右键单击您的 Elastic Beanstalk 环境，然后单击 **View Status**（查看状态）。

1. 在应用程序环境选项卡上，单击**监控**。

   **监控**面板包含一组图表，用于显示您特定应用程序环境的资源使用情况。  
![\[Elastic Beanstalk 监控面板\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-monitoring.png)
**注意**  
默认情况下，时间范围设置为最近一个小时。要修改这个设置，请在**时间范围**列表中，单击另一个时间范围。

您可以使用 Visual Studio 的 AWS Toolkit for Visual Studio 或 AWS 管理控制台来查看与您的应用程序关联的事件。

**查看应用程序事件**

1. 在 Visual Studio 的 AWS Toolkit 中，在**AWS 资源管理器**中，展开 Elastic Beanstalk 节点和您的应用程序节点。

1. 在 **AWS Explorer** 中，右键单击 Elastic Beanstalk 环境，然后单击 **View Status**（查看状态）。

1. 在应用程序环境选项卡上，单击**事件**。  
![\[Elastic Beanstalk 事件面板\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-vs-events.png)

# 使用部署工具在.NET 中部署 Elastic Beanstalk 应用程序 AWS
<a name="deploy_NET_standalone_tool"></a>

AWS 提供了两个命令行工具，用于将.NET Core 和 ASP.NET Core 应用程序部署到 Elastic Beanstalk：
+ **AWS .NET 部署工具** — 一种现代命令行工具，可简化将.NET 应用程序部署到 AWS 服务（包括 Elastic Beanstalk）的过程。该工具提供交互式体验，可以自动检测最适合您的应用程序的 AWS 服务。有关更多信息，请参阅 [AWS .NET deployment tool](https://github.com/aws/aws-dotnet-deploy?tab=readme-ov-file#aws-net-deployment-tool)。
+ **AWS .NET CLI 扩展** — 一组.NET CLI 扩展，提供将.NET 核心应用程序部署到 Elastic Beanstalk 和其他服务的 AWS 命令。这些扩展程序与标准 .NET CLI 工作流程集成。有关更多信息，请参阅 [AWS Extensions for .NET CLI](https://github.com/aws/aws-extensions-for-dotnet-cli?tab=readme-ov-file#aws-elastic-beanstalk-amazonelasticbeanstalktools)。

# 将本地 .NET 应用程序迁移到 Elastic Beanstalk
<a name="dotnet-onpremmigration"></a>

AWS Elastic Beanstalk 通过 Elastic Beanstalk 命令行界面 (EB CLI) 为在互联网信息服务 (IIS) 上运行的 Windows 应用程序提供了简化的迁移路径。该**eb migrate**命令会自动发现您的 IIS 站点、应用程序和虚拟目录，保留其配置，然后将其部署到云端。 AWS 

这种内置的迁移功能提供更简单的方法，可以减少通常与云迁移相关的复杂性和时间。迁移过程有助于在过渡到期间维护应用程序的功能和配置的完整性 AWS。

有关将 IIS 应用程序迁移到的完整详细说明 AWS Elastic Beanstalk，请参阅本指南中的[将 IIS 应用程序迁移到 Elastic Beanstalk](dotnet-migrating-applications.md)章节。

# 针对 Elastic Beanstalk 上 Windows Server 已停用组件的建议
<a name="dotnet-deprecation-recommendations"></a>

如果您的应用程序当前正在已停用的 Windows Server 2012 R2 平台分支上运行，本主题提供了建议。它还解决了我们的 AWS 服务 API 端点和受影响的平台分支上已弃用的 TLS 1.0 和 1.1 协议版本支持。

## Windows Server 2012 R2 平台分支已停用
<a name="dotnet-retired-branches"></a>

Elastic Beanstalk 于 2023 年 12 月 4 日停用了 Windows Server 2012 R2 平台[分支，并 AMIs 于 2024 年 4 月 10 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2023-12-04-windows-2012-retire.html)将与这些平台关联的分支私有化。此操作可阻止在 Windows Server 2012 环境中启动使用默认 Beanstalk AMI 的实例。

如果您有任何环境在已停用的 Windows 平台分支上运行，我们建议您将它们迁移到以下 Windows Server 平台之一，这些平台是最新的且完全受支持：
+ 带有 IIS 10.0 版本 2.x 的 Windows Server 2022
+ Windows Server 2019 with IIS 10.0 版本 2.x

有关完整迁移注意事项，请参阅 [从 Windows Server 平台更早的主要版本迁移](dotnet-v2migration.md#dotnet-v2migration.migration)。

有关平台弃用的更多信息，请参阅 [Elastic Beanstalk 平台支持策略](platforms-support-policy.md)。

**注意**  
如果你无法迁移到这些完全支持的平台，我们建议你使用使用 Windows Server 2012 R2 或 Windows Server 2012 R2 Core AMIs 创建的自定义镜像 AMIs 作为基础映像（如果你还没有这样做）。有关详细说明，请参阅[保持能够访问适用于已停用平台的亚马逊机器映像（AMI）的方法](using-features.customenv-env-copy.md)。如果您在执行其中某个迁移步骤时需要临时访问 AMI，请联系 [AWS 支持中心](https://console.aws.amazon.com/support/home#/)。

## TLS 1.2 兼容性
<a name="tls-1-2-enforcement."></a>

自 2023 年 12 月 31 日 AWS 起，开始在所有 AWS API 端点上全面实施 TLS 1.2。此操作取消了在所有版本中使用 TLS 1.0 和 1.1 版本的功能 AWS APIs。此信息最初于 [2022 年 6 月 28 日](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/)公布。为避免影响可用性的风险，请尽快将运行此处确定的平台版本的所有环境升级到新版本（如果您尚未这样做）。

**潜在影响**  
运行 TLS v1.1 或者更早版本的 Elastic Beanstalk 平台版本受影响。此更改会影响环境操作，包括但不限于以下内容：配置部署、应用程序部署、自动扩缩、新环境启动、日志轮换、增强型运行状况报告以及将应用程序日志发布到与应用程序关联的 Amazon S3 存储桶。

**受影响的 Windows 平台版本**  
建议在以下平台版本上使用 Elastic Beanstalk 环境的客户将每个相应环境升级到 [2022 年 2 月 18 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-02-18-windows.html)发布的 Windows 平台版本 2.8.3 或更高版本。
+ Windows Server 2019：平台版本 2.8.2 或先前版本

建议在以下平台版本上使用 Elastic Beanstalk 环境的客户将其每个相应环境升级到 [2022 年 12 月 28 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-12-28-windows.html)发布的 Windows 平台版本 2.10.7 或更高版本。
+ Windows Server 2016 — 平台版本 2.10.6 或之前的版本
+ Windows Server 2012 — 所有平台版本；此平台已于 [2023 年 12 月 4 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2023-12-04-windows-2012-retire.html)停用 
+ Windows Server 2008 — 所有平台版本；该平台已于 [2019 年 10 月 28 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2019-10-28-windows.html)停用 

有关最新的受支持 Windows Server 平台版本列表，请参阅《AWS Elastic Beanstalk 平台指南》**中的[支持的平台](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.net)。

有关更新环境的详细信息和最佳实践，请参阅 [更新 Elastic Beanstalk 环境的平台版本](using-features.platform.upgrade.md)。