

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

# 了解 IIS 到 Elastic Beanstalk 的迁移映射
<a name="dotnet-migrating-applications-mapping"></a>

从 IIS 迁移到 Elastic Beanstalk 涉及将您的本地 Windows 服务器配置映射到云资源。 Amazon 了解此映射对于成功迁移和迁移后管理至关重要。

## Elastic Beanstalk 中的 IIS 站点和应用程序
<a name="dotnet-migrating-applications-mapping-sites"></a>

在 IIS 中，网站代表一组拥有自身配置和内容的 Web 应用程序和虚拟目录。迁移到 Elastic Beanstalk 时，这些组件将按如下方式进行转换：

**IIS 网站**  
IIS 网站将转换成 Elastic Beanstalk 中的应用程序。每个网站的配置，包括其绑定、应用程序池和身份验证设置，都通过 Elastic Beanstalk 的部署清单 (`aws-windows-deployment-manifest.json`) 保留。  
例如，如果您有多个站点，例如*默认网站*和 *IntranetSite*，则会将每个网站的内容和配置**eb migrate**打包，同时保持其隔离。  
该命令会创建相应的应用程序负载均衡器（ALB）侦听器规则，以处理对应用程序的路由请求。它还会配置安全组，以确保根据原始 IIS 绑定进行适当的端口访问。

**应用程序池**  
IIS 应用程序池为应用程序提供工作线程隔离、运行时管理和回收功能。在 Elastic Beanstalk 中，它们映射到通过命名空间定义并`aws:elasticbeanstalk:environment:process`通过 IIS 在实例上配置的环境进程。 EC2   
迁移会保留关键的应用程序池设置，包括以下设置：  
+ 流程模型配置-身份（ApplicationPoolIdentity NetworkService、或自定义帐户）、空闲超时设置和进程回收间隔
+ .NET CLR 版本设置：维护指定的 .NET Framework 版本（v2.0、v4.0 或无托管代码）以确保应用程序兼容性
+ 托管管道模式：保留集成或经典管道模式设置，以维护 HTTP 请求处理架构
+ 高级设置：队列长度、CPU 限制、快速故障保护阈值和启动时间限制
在迁移到 Elastic Beanstalk 环境期间，**eb migrate** 命令会保留站点和应用程序池之间的映射。  
如果您的应用程序池使用自定义回收计划（特定时间或内存阈值），则这些计划是通过部署包中的 PowerShell 脚本实现的，这些脚本在 EC2 实例上配置相应的 IIS 设置。

**网站绑定**  
用于定义客户端如何访问应用程序的 IIS 网站绑定会转换为以下应用程序负载均衡器（ALB）配置：  
+ 端口绑定映射到相应的 ALB 侦听器规则
+ 主机标头配置转换为 ALB 路由规则
+ 启用 SSL 的网站使用 Certifice Manager (ACM) 进行 Amazon 证书管理

## 虚拟目录和应用程序路径管理
<a name="dotnet-migrating-applications-mapping-virtual-dirs"></a>

IIS 虚拟目录和应用程序提供到物理目录的 URL 路径映射。Elastic Beanstalk 通过以下构造来维护这些关系：

**虚拟目录**  
迁移过程会将虚拟目录的物理路径保留在部署包中。  
路径映射是在 EC2 实例上的 IIS 配置中配置的，可确保迁移后您的 URL 结构保持不变。

**非系统驱动器物理路径**  
默认情况下，Elastic Beanstalk Windows 环境仅预置 C:\$1 驱动器（根卷）。在当前版本中，不支持迁移在非系统驱动器（D:\$1、E:\$1 等）中存储了内容的应用程序。
**eb migrate** 命令会自动检测位于非系统驱动器中的物理路径，并警告您可能出现的问题，如以下示例所示：  

```
ERROR: Detected physical paths on drive D:\ which are not supported in the current version:
  - D:\websites\intranet
  - D:\shared\images

Migration of content from non-system drives is not supported. Please relocate this content to the C:\ drive before migration. Otherwise, select only those sites that are on C:\.
```
如果您的应用程序依赖于非系统驱动器，则在迁移之前，您需要修改应用程序，将所有内容存储在 C:\$1 驱动器中。

**嵌套应用程序**  
嵌套在网站下的应用程序将根据正确的路径配置和适当的应用程序池分配进行部署。迁移过程会保留所有 ` web.config` 设置，从而确保特定于应用程序的配置在云环境中继续按预期运行。

## URL 重写和应用程序请求路由（ARR）
<a name="dotnet-migrating-applications-mapping-url-rewrite"></a>

如果您的 IIS 部署使用 URL 重写或应用程序请求路由（ARR），**eb migrate** 会通过以下规则和配置来处理这些配置：

**URL 重写规则**  
如果可能，`web.config` 文件中的 URL 重写规则会转换为 ALB 路由规则。例如，以下条目将转换为 ALB 侦听器规则，根据主机标头和路径模式引导流量：  

```
<!-- Original IIS URL Rewrite Rule -->
<rule name="Redirect to WWW" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="^example.com$" />
    </conditions>
    <action type="Redirect" url="http://www.example.com/{R:1}" />
</rule>
```


**应用程序请求路由**  
通过在 EC2实例上安装 ARR 功能来保留 ARR 配置。迁移过程会完成以下任务：  
+ 配置代理设置以匹配源环境
+ 维护与 ARR 关联的 URL 重写规则

## 迁移构件结构
<a name="dotnet-migrating-applications-mapping-artifacts"></a>

运行 **eb migrate** 时，该命令会创建一个结构化目录，其中包含所有必需的部署组件。下方列表描述了目录结构：

```
C:\migration_workspace\
└── .\migrations\latest\
    └── upload_target\
        ├── [SiteName].zip                 # One ZIP per IIS site
        ├── aws-windows-deployment-manifest.json
        └── ebmigrateScripts\
            ├── site_installer.ps1         # Site installation scripts
            ├── arr_configuration.ps1      # ARR configuration scripts
            ├── permission_handler.ps1     # Permission management
            └── firewall_config.ps1        # Windows Firewall rules
```

`aws-windows-deployment-manifest.json` 文件是核心配置文件，用于指示 Elastic Beanstalk 如何部署应用程序。请参阅以下示例结构：

```
{
    "manifestVersion": 1,
    "deployments": {
        "msDeploy": [
            {
                "name": "Primary Site",
                "parameters": {
                    "appBundle": "DefaultWebSite.zip",
                    "iisPath": "/",
                    "iisWebSite": "Default Web Site"
                }
            }
        ],
        "custom": [
            {
                "name": "ConfigureARR",
                "scripts": {
                    "install": {
                        "file": "ebmigrateScripts\\arr_configuration.ps1"
                    },
                    "uninstall": {
                        "file": "ebmigrateScripts\\noop.ps1"
                    },
                    "restart": {
                        "file": "ebmigrateScripts\\noop.ps1"
                    }
                }
            }
        ]
    }
}
```

此清单可确保迁移结果如下：
+ 部署应用程序，以更正 IIS 路径
+ 应用自定义配置
+ 保留特定于站点的设置
+ 维持部署顺序