

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

# 将 .NET 应用程序从 Microsoft Azure 应用服务迁移到 AWS Elastic Beanstalk
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk"></a>

*Raghavender Madamshitti，Amazon Web Services*

## Summary
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-summary"></a>

此模式介绍如何将 Microsoft Azure 应用服务上托管的 .NET Web 应用程序迁移到 AWS Elastic Beanstalk。有两种方法可以将应用程序迁移到 Elastic Beanstalk：
+ 使用 AWS Toolkit for Visual Studio - 此插件适用于 Microsoft Visual Studio IDE，提供了将自定义 .NET 应用程序部署到 AWS 的最简单、最直接的方法。您可以使用此方法将 .NET 代码直接部署到 AWS，并直接从 Visual Studio 创建支持资源，例如 Amazon Relational Database Service（Amazon RDS）for SQL Server 数据库。
+ 上传并部署到 Elastic Beanstalk - 每个 Azure 应用服务都包含一个名为 Kudu 的后台服务，该服务可用于捕获内存转储和部署日志、查看配置参数以及访问部署包。您可以使用 Kudu 控制台访问 Azure 应用服务内容，提取部署包，然后使用 Elastic Beanstalk 控制台中的上传和部署选项将程序包上传到 Elastic Beanstalk。

此模式介绍了第二种方法（通过 Kudu 将应用程序上传到 Elastic Beanstalk）。该模式还使用以下 AWS 服务：AWS Elastic Beanstalk、亚马逊虚拟私有云（亚马逊 VPC）、亚马逊、亚马逊弹性计算云（ CloudWatch亚马逊 EC2）Auto Scaling、亚马逊简单存储服务（亚马逊 S3）Service 和 Amazon Route 53。 

.NET Web 应用程序将部署到 AWS Elastic Beanstalk，后者在 Amazon EC2 Auto Scaling 组中运行。您可以基于 Amazon CloudWatch 指标（例如 CPU 利用率）设置扩展策略。对于数据库，您可以在 Multi-AZ 环境中使用 Amazon RDS，也可以使用 Amazon DynamoDB，具体取决于您的应用程序和业务需求。

## 先决条件和限制
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 在 Azure 应用服务中运行的 .NET Web 应用程序
+ 使用 Azure 应用服务 Kudu 控制台的权限

**产品版本**
+ .NET Core (x64) 1.0.1、2.0.0 或更高版本，或 .NET Framework 4.x、3.5（请参阅 Windows Server 平台上的 [.NET 历史记录](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-dotnet.html)）
+ Internet Information Services（IIS）版本 8.0 或更高版本，在 Windows Server 2012 或更高版本上运行
+ .NET 2.0 或 4.0 运行时系统。

## 架构
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-architecture"></a>

**源技术堆栈**
+  使用 .NET Framework 3.5 或更高版本或 .NET Core 1.0.1、2.0.0 或更高版本开发并托管在 Azure 应用服务（Web 应用或 API 应用）上的应用程序

**目标技术堆栈**
+ 在 Amazon EC2 Auto Scaling 组中运行的 AWS Elastic Beanstalk

**迁移架构**

![Kudu 访问 Azure 应用服务内容，获取部署包，然后将其上传到 Elastic Beanstalk。](https://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/df606a2d-b0a8-4035-b377-0a760e7300c9/images/dd15f97b-9cf2-4bcc-af45-44df1c4ca4a5.png)


 

**部署工作流**

![部署工作流用于创建应用程序、将其发布到启动环境，然后管理环境。](https://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/df606a2d-b0a8-4035-b377-0a760e7300c9/images/accec77d-c753-4166-8f27-bd4932b3d884.png)


## 工具
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-tools"></a>

**工具**
+ .NET Core 或 .NET Framework
+ C\#
+ IIS
+ Kudu 控制台

**Amazon Web Services 和特征**
+ [AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html) – Elastic Beanstalk 是一项易于使用的服务，用于部署和扩展 .NET Web 应用程序。Elastic Beanstalk 可自动管理容量预置、负载均衡和自动扩缩。
+ [Amazon EC2 Auto Scaling 组](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroup.html) – Elastic Beanstalk 包括一个自动扩缩组，用于管理环境中的 Amazon EC2 实例。在单实例环境中，自动扩缩组可确保始终有一个正在运行的实例。在负载均衡的环境中，您可以为组配置一系列要运行的实例，Amazon EC2 Auto Scaling 将根据负载按需添加或删除实例。
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) – 当您在 AWS Elastic Beanstalk 中启用负载均衡时，它会创建一个负载均衡器，用于在环境中的 EC2 实例之间分配流量。
+ [亚马逊 CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) — Elastic Beanstalk 自动 CloudWatch 使用亚马逊来提供有关您的应用程序和环境资源的信息。Amazon CloudWatch 支持标准指标、自定义指标和警报。
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) - Amazon Route 53 是一项高度可用且可扩展的云域名系统（DNS）Web 服务。您可以使用 Route 53 别名记录将自定义域名映射到 AWS Elastic Beanstalk 环境。

## 操作说明
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-epics"></a>

### 设置 VPC
<a name="set-up-a-vpc"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置虚拟私有云（VPC）。 | 在您的 Amazon Web Services account 中，使用所需信息创建一个 VPC。 | 系统管理员 | 
| 创建子网。 | 在您的 VPC 中创建两个或更多子网。 | 系统管理员 | 
| 创建路由表。 | 根据您的要求创建路由表。 | 系统管理员 | 

### 设置 Elastic Beanstalk
<a name="set-up-elastic-beanstalk"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 访问 Azure 应用服务 Kudu 控制台。 | 导航到应用服务控制面板，然后选择**高级工具**，然后**转到**，通过 Azure 门户访问 Kudu。或者，可以修改 Azure 应用服务 URL，如下所示：`https://<appservicename>.scm.azurewebsites.net`。 | 应用程序开发人员、系统管理员 | 
| 从 Kudu 下载部署包。 |  PowerShell 通过选择相应**DebugConsole**选项导航到 Windows。这将打开 Kudo 控制台。转到 `wwwroot` 文件夹并下载它。这会将 Azure 应用服务部署包下载为 zip 文件。有关示例，请参阅附件。 | 应用程序开发人员、系统管理员 | 
| 为 Elastic Beanstalk 创建程序包。 | 解压缩从 Azure 应用服务下载的部署包。创建名为 `aws-windows-deployment-manifest.json` 的 JSON 文件（只有 .NET Core 应用程序才需要此文件）。创建一个包含 `aws-windows-deployment-manifest.json` 和 Azure 应用服务部署包文件的 zip 文件。有关示例，请参阅附件。 | 应用程序开发人员、系统管理员 | 
| 创建新的 Elastic Beanstalk 应用程序。 | 打开 Elastic Beanstalk 控制台。选择现有应用程序或创建新应用程序。 | 应用程序开发人员、系统管理员 | 
| 创建环境。 | 在 Elastic Beanstalk 控制台**操作**菜单中，选择**创建环境**。选择 Web 服务器环境和。 NET/IIS 平台。对于应用程序代码，选择**上传**。上传您为 Elastic Beanstalk 准备的 zip 文件，然后选择**创建环境**。 | 应用程序开发人员、系统管理员 | 
| 配置亚马逊 CloudWatch。 | 默认情况下，基本 CloudWatch 监控处于启用状态。如果您想要更改配置，请在 Elastic Beanstalk 向导中选择已发布的应用程序，然后选择**监控**。 | 系统管理员 | 
| 验证部署包是否位于 Amazon S3 中。 | 创建应用程序环境后，您可以在 S3 存储桶中找到部署包。 | 应用程序开发人员、系统管理员 | 
| 测试应用程序。 | 创建环境后，使用 Elastic Beanstalk 控制台中提供的 URL 测试应用程序。 | 系统管理员 | 

## 相关资源
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-resources"></a>
+ [AWS Elastic Beanstack 概念](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.html) （Elastic Beanstalk 文档）
+ [Elastic Beanstalk 上的 .NET 入门](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/dotnet-getstarted.html)（Elastic Beanstalk 文档）
+ [Kudu 控制台](https://github.com/projectkudu/kudu/wiki/Kudu-console) () GitHub
+ [使用“Kudu”管理 Azure Web 应用程序](https://www.gslab.com/blogs/kudu-azure-web-app/)（GS 实验室文章）
+ [定制 ASP.NET 核心 Elastic Beanstalk 部署（适用](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/deployment-beanstalk-custom-netcore.html)于 Visual Studio 的 AWS 工具包 Visual Studio 用户指南）
+ [Elastic Load Balancing 文档](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)
+ [AWS Elastic Beanstalk 支持的平台](https://docs.amazonaws.cn/en_us/elasticbeanstalk/latest/platforms/platforms-supported.html)（Elastic Beanstalk 文档）
+ [将 Web 应用程序部署到 AWS](https://www.c-sharpcorner.com/article/deploying-a-web-application-to-aws/)（C\# Corner 文章）
+ [扩展自动扩缩组的大小](https://docs.aws.amazon.com/autoscaling/ec2/userguide/scaling_plan.html)（Amazon EC2 文档）
+ [亚马逊 RDS 的高可用性 (Multi-AZ)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html)（亚马逊 RDS 文档）

## 附加信息
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-additional"></a>

**备注**
+ 如果要将本地或 Azure SQL Server 数据库迁移到 Amazon RDS，还必须更新数据库连接详细信息。 
+ 出于测试目的，附加了一个示例演示应用程序。

## 附件
<a name="attachments-df606a2d-b0a8-4035-b377-0a760e7300c9"></a>

[要访问与此文档关联的其他内容，请下载并解压缩以下文件：attachment.zip](samples/p-attach/df606a2d-b0a8-4035-b377-0a760e7300c9/attachments/attachment.zip)