

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

# **eb migrate**
<a name="eb3-migrate"></a>

## 说明
<a name="eb3-migratedescription"></a>

将 Internet Information Services（IIS）网站和应用程序从 Windows 服务器迁移到 Elastic Beanstalk。该命令会打包您的应用程序，保留其配置，并将它们部署到新的 Elastic Beanstalk 环境中。

有关迁移您的 IIS 站点和应用程序的更多信息，请参阅[将 IIS 应用程序迁移到 Elastic Beanstalk](dotnet-migrating-applications.md)。

**注意**  
在使用此命令之前，请确保您的系统满足以下要求：  
Internet Information Services（IIS）7.0 或更高版本
安装了 Web 部署 3.6 或更高版本
Windows 服务器上的管理权限
AWS 配置了适当权限的凭证
您的源服务器对 AWS 服务具有出站互联网访问权限。

迁移过程涉及到以下步骤：

1. 发现 IIS 站点及其配置。

1. 打包应用程序内容和配置。

1. 创建 Elastic Beanstalk 环境和应用程序。

1. 使用保留的设置部署应用程序。

该命令会在结构化目录中创建迁移构件，如以下列表所示：

```
C:\migration_workspace\
└── .\migrations\latest\
    ├── upload_target.zip
    └── upload_target\
        ├── [SiteName].zip                      # One ZIP per default application of IIS site
        ├── [SiteName-ApplicationName].zip      # One ZIP per additional application
        ├── aws-windows-deployment-manifest.json
        └── ebmigrateScripts\
            ├── site_installer.ps1              # Site installation scripts
            ├── permission_handler.ps1          # Permission management
            └── other helper scripts
```

**eb migrate cleanup** 用于管理这些构件。

## 语法
<a name="eb3-migratesyntax"></a>

**eb migrate *[options]***

**eb migrate explore *[options]***

**eb migrate cleanup *[options]***

在无引数的情况下运行时，**eb migrate** 以非交互模式运行。若要在交互模式下执行它，请运行 **eb migrate --interactive**。

交互模式命令会提示输入以下信息：
+ 选择要迁移的 IIS 站点
+ 环境和应用程序名称
+ 平台版本选择
+ 实例类型和其他配置选项

## 子命令
<a name="eb3-migratesubcommands"></a>

### explore
<a name="eb3-migrateexplore"></a>

**eb migrate explore** 子命令会检查您的 IIS 服务器并列出可用站点。

使用此命令可显示以下信息：
+ 查看服务器上的所有 IIS 站点
+ 使用 `--verbose` 可检查详细配置，包括：
  + 网站绑定和端口
  + 应用程序池
  + 虚拟目录及其物理路径
  + 身份验证设置

```
PS C:\migrations_workspace >  eb migrate explore
Default Web Site
Site2
site3
router
```

```
PS C:\migrations_workspace >  eb migrate explore --verbose
1: Default Web Site:
  - Bindings:
    - *:8083:
  - Application '/':
    - Application Pool: DefaultAppPool
    - Enabled Protocols: http
    - Virtual Directories:
      - /:
        - Physical Path: C:\inetpub\wwwroot
        - Logon Method: ClearText
  - Application '/dotnet-6-0':
    - Application Pool: DefaultAppPool
    - Enabled Protocols: http
    - Virtual Directories:
      - /:
        - Physical Path: C:\inetpub\AspNetCoreWebApps\CoreWebApp-6-0
        - Logon Method: ClearText
  - Application '/dotnet-8-0':
    - Application Pool: DefaultAppPool
    - Enabled Protocols: http
    - Virtual Directories:
      - /:
        - Physical Path: C:\inetpub\AspNetCoreWebApps\CoreWebApp-8-0
        - Logon Method: ClearText
2: Site2:
  - Bindings:
    - *:8081:
...
```

### 清理
<a name="eb3-migratecleanup"></a>

**eb migrate cleanup** 子命令可通过以下操作管理迁移构件：
+ 将最近一次成功的迁移保留在 `./migrations/latest` 中
+ 删除较旧的迁移目录
+ 维护关键配置文件

```
PS C:\migrations_workspace >   eb migrate cleanup
Are you sure you would like to cleanup older artifacts within `./migrations/`? (y/N):
```

使用 `--force` 在清理期间跳过确认提示。

```
PS C:\migrations_workspace >   eb migrate cleanup --force
```

## 选项
<a name="eb3-migrateoptions"></a>

这些选项都不是必需的。如果在运行 **eb migrate** 时不指定任何选项，EB CLI 将在非交互模式下执行。使用 **eb migrate --interactive** 时，EB CLI 会提示您为必需设置输入或选择值。


****  

|  Name  |  描述  | 
| --- | --- | 
|  `-a` *application-name* 或者 `--application-name` *application-name*  |  新的 Elastic Beanstalk 应用程序的名称。 类型：字符串 默认： EBMigrated应用程序  | 
|  `--archive` *directory-or-zip*  |  包含先前由 **eb migrate --archive-only** 生成的源代码的目录或 ZIP 文件。 使用此选项部署先前创建的迁移包。 示例：`--archive .\migrations\latest\upload_target` 或 `--archive .\migrations\latest\upload_target.zip`  | 
|  `-ao` 或者 `--archive-only`  |  仅创建目标存档目录，而不进行部署。 生成的目录可以使用带有 `archive` 选项的 **eb migrate** 进行手动部署，或使用 **eb deploy** 进行部署。  | 
|  `-c` *subdomain-name* 或者 `--cname` *subdomain-name*  |  要为迁移的应用程序的 CNAME DNS 条目添加前缀的子域名。 类型：字符串 默认值：环境名称  | 
|  `-cf` 或者 `--copy-firewall-config`  |  将针对所有具有活动绑定的 HTTP 端口的源服务器防火墙配置复制到目标服务器。 在中创建相应的安全组规则 AWS。  | 
|  `-es` *snapshot-id* [*snapshot-id* ...] 或者 `--ebs-snapshots` *snapshot-id* [*snapshot-id* ...]  |  要与环境关联的 Amazon EBS 快照列表 IDs ，以逗号分隔。 示例：`--ebs-snapshots snap-1234567890abcdef0, snap-0987654321fedcba1`  | 
|  `--encrypt-ebs-volumes`  |  对所有新 Amazon EBS 卷强制加密。  这是一个全账户范围的设置，会影响未来所有 Amazon EBS 卷的创建。   | 
|  `-e` *environment-name* 或者 `--environment-name` *environment-name*  |  新 Elastic Beanstalk 环境的名称。 类型：字符串 默认： EBMigrated环境 约束：长度必须在 4 到 40 个字符之间。只能包含字母、数字和连字符。不得以连字符开头或结尾。  | 
|  `--force`  |  在操作期间跳过确认提示。 与 **cleanup** 子命令一起使用时，无需确认即可删除迁移构件。  | 
|  `-ip` *profile-name* 或者 `--instance-profile` *profile-name*  |  要与环境的 Amazon EC2 实例关联的实例配置文件。 如果未指定，则会创建一个具有 Elastic Beanstalk 资源访问权限的默认实例配置文件。有关更多信息，请参阅 [Elastic Beanstalk 实例配置文件](concepts-roles-instance.md)。  | 
|  `-i` *instance-type* 或者 `--instance-type` *instance-type*  |  您的 Elastic Beanstalk 环境的亚马逊 EC2 实例类型。 类型：字符串 默认：c5.2xlarge 有关可用的实例类型，请参阅[亚马逊* EC2 用户指南中的亚马逊 EC2 *实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)。  | 
|  `-in` 或者 `--interactive`  |  迁移过程强制交互模式。 即使默认值可用，也会提示输入配置值。  | 
|  `-k` *key-name* 或者 `--keyname` *key-name*  |  Amazon EC2 key pair 用于启用 RDP 访问环境实例。 此方法对于调查日志中看不到的实例级问题很有用。 有效值：在 Amazon 注册的现有密钥对名称 EC2  | 
|  `-p` *platform-version* 或者 `--platform` *platform-version*  |  环境的 Elastic Beanstalk 平台运行时。如果未指定，则自动从主机 Windows 服务器版本中检测。 示例：`"64bit Windows Server 2016 v2.16.2 running IIS 10.0"` 有关可用平台版本的列表，请使用 [eb 平台列表](eb3-platform.md#eb3-platform-list)。  | 
|  `--remote`  |  表示在远程模式下执行迁移。此选项允许从堡垒主机执行，堡垒主机连接到包含要迁移到 Elastic Beanstalk 的应用程序和配置的目标服务器。在堡垒机服务器上运行时，`eb migrate` 会发现配置，在堡垒主机上暂存迁移逻辑，然后将您的应用程序部署到新的 Elastic Beanstalk 环境中。 使用此选项，您无需在需要迁移的 Windows 服务器上安装 EB CLI 和 Python。相反，您将改为在堡垒主机（在其中运行带有 `--remote` 选项的 **eb migrate** 命令）上安装 Python 和 EB CLI，使用 `--target-ip` 选项指定要迁移的包含 IIS 配置的主机。 必须与 `--target-ip`、`--username`、`--password` 和一起使用。  | 
|  `--target-ip` *ip-address*  |  包含要迁移的 IIS 服务器的远程 Windows 计算机的公有 IP 地址。 使用 `--remote` 时为必填项。只能在使用 `--remote` 时指定。  | 
|  `--username` *username*  |  用户配置文件的用户名，该用户配置文件用于访问包含要迁移的 IIS 服务器的远程 Windows 计算机。 使用 `--remote` 时为必填项。只能在使用 `--remote` 时指定。  | 
|  `--password` *password*  |  用户配置文件的密码，该用户配置文件用于访问包含要迁移的 IIS 服务器的远程 Windows 计算机。 使用 `--remote` 时为必填项。只能在使用 `--remote` 时指定。  | 
|  `-sr` *role-name* 或者 `--service-role` *role-name*  |  Elastic Beanstalk 的 IAM 服务角色用于管理相关服务。 AWS  如果未指定，则会创建具有必要权限的默认服务角色。有关更多信息，请参阅 [Elastic Beanstalk 服务角色](concepts-roles-service.md)。  仅指定角色名称，而不是完整的 ARN。Elastic Beanstalk 会自动创建完整的 ARN。   | 
|  `-s` *site-names* 或者 `--sites` *site-names*  |  要迁移的 IIS 站点的逗号分隔列表。如果未指定，则会迁移服务器上的所有可用站点。 示例：`--sites "Default Web Site,Intranet,API"`  | 
|  `--ssl-certificates` *certificate-arn*[,*certificate-arn* ...]  |  要与 Application Load Balancer 关联的 ACM SSL 证书列表 ARNs ，以逗号分隔。 迁移具有 HTTPS 绑定的网站时需要。 示例：`--ssl-certificates arn:aws:acm:region:account:certificate/certificate-id`  | 
|  `-t key1=value1[,key2=value2 ...]` 或者 `-﻿-﻿tags key1=value1[,key2=value2 ...]`  |  用于标记环境中的新资源（环境、Elastic Beanstalk 应用程序、应用程序版本）的 `key=value` 对的逗号分隔列表。 有关更多信息，请参阅 [为环境添加标签](using-features.tagging.md)。  | 
|  `--verbose`  |  在迁移过程中显示详细信息。 与 **explore** 子命令一起使用时，会显示全面的站点配置详细信息。  | 
|  `-vpc` *config-file-or-string* 或者 `--vpc-config` *config-file-or-string*  |  环境的 VPC 配置，可以指定为 JSON 文件路径或 JSON 字符串。 配置必须包括： <pre>{<br />    "id": "vpc-1234567890abcdef0",<br />    "publicip": "true|false",<br />    "elbscheme": "public|private",<br />    "ec2subnets": ["subnet-a1b2c3d4", "subnet-e5f6g7h8"],<br />    "securitygroups": "sg-123456,sg-789012",<br />    "elbsubnets": ["subnet-a1b2c3d4", "subnet-e5f6g7h8"]<br />}</pre> [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/eb3-migrate.html)  *当您指定* `--vpc-config` *参数时，迁移将忽略源环境中的任何现有 VPC 设置。*使用此参数时，迁移将仅使用您传入的配置文件中指定的 VPC 设置。使用此参数会覆盖发现源实例 VPC 配置或使用默认 VPC 的默认行为。   | 
|  [常用选项](eb3-cmd-options.md)  |  | 

## Output
<a name="eb3-migrateoutput"></a>

此命令在整个迁移过程中提供状态更新：

1. VPC 配置检测（在 EC2 实例上运行时）

1. 每个站点的源捆绑包生成进度

1. 环境创建状态

1. 部署进度

如果迁移成功，则会显示新环境的详细信息，包括：
+ 环境名称和 ID
+ 应用程序名称
+ Region
+ 平台版本
+ 环境 CNAME

对于迁移期间出现的问题，请使用 [**eb events**](eb3-events.md) 和 [**eb health**](eb3-health.md) 命令来获取详细信息。

## 示例
<a name="eb3-migrateexamples"></a>

### 基本用法
<a name="eb3-migrateexamples-basic"></a>

交互式模式下的基本迁移：

```
PS C:\migrations_workspace >  eb migrate
Identifying VPC configuration of this EC2 instance (i-0123456789abcdef0):
  id: vpc-1234567890abcdef0
  publicip: true
  elbscheme: public
  ec2subnets: subnet-123,subnet-456,subnet-789
  securitygroups: sg-123,sg-456
  elbsubnets: subnet-123,subnet-456,subnet-789

Using .\migrations\latest to contain artifacts for this migration run.
Generating source bundle for sites, applications, and virtual directories...
  Default Web Site/ -> .\migrations\latest\upload_target\DefaultWebSite.zip

Creating application version
Creating environment

Environment details for: EBMigratedEnv
  Application name: EBMigratedApp
  Region: us-west-2
  Deployed Version: app-230320_153045
  Environment ID: e-abcdef1234
  Platform: 64bit Windows Server 2019 v2.7.0 running IIS 10.0
  Tier: WebServer-Standard-1.0
  CNAME: ebmigratedenv.us-west-2.elasticbeanstalk.com
  Updated: 2023-03-20 15:30:45
```

迁移具有自定义配置的特定站点：

```
PS C:\migrations_workspace >  eb migrate `
    --sites "Default Web Site,InternalAPI" `
    --application-name "CorporateApp" `
    --environment-name "Production" `
    --instance-type "c5.xlarge" `
    --tags "Environment=Production,Team=WebOps" `
    --copy-firewall-config
```

创建迁移存档而不部署：

```
PS C:\migrations_workspace >  eb migrate --archive-only
Using .\migrations\latest to contain artifacts for this migration run.
Generating source bundle for sites, applications, and virtual directories...
  Default Web Site/ -> .\migrations\latest\upload_target\DefaultWebSite.zip

Generated destination archive directory at .\migrations\latest\upload_target
You can execute `eb init` and `eb create` from this directory to deploy to EB.
```

### 高级配置示例
<a name="eb3-migrateexamples-advanced"></a>

使用 JSON 文件迁移具有自定义 VPC 配置的站点：

```
PS C:\migrations_workspace >  cat vpc-config.json
{
    "id": "vpc-1234567890abcdef0",
    "publicip": "false",
    "elbscheme": "internal",
    "ec2subnets": [
        "subnet-private1",
        "subnet-private2"
    ],
    "securitygroups": [
        "sg-app",
        "sg-database",
        "sg-monitoring"
    ],
    "elbsubnets": [
        "subnet-private1",
        "subnet-private2"
    ]
}

PS C:\migrations_workspace eb migrate `
    --sites "InternalAPI" `
    --vpc-config vpc-config.json `
    --instance-type "r5.xlarge" `
    --tags "Environment=Internal,Security=High"
```

迁移具有 SSL 证书和主机标头的站点：

```
PS C:\migrations_workspace >  eb migrate `
    --sites "SecurePortal" `
    --ssl-certificates "arn:aws:acm:region:account:certificate/cert1,arn:aws:acm:region:account:certificate/cert2" `
    --verbose
INFO: Detected HTTPS bindings:
  - www.example.com:443
  - api.example.com:443

INFO: Configuring Application Load Balancer with SSL certificates
INFO: Creating host-based routing rules:
  - www.example.com -> target group 1
  - api.example.com -> target group 2
```

迁移具有 EBS 快照配置的站点：

```
PS C:\migrations_workspace >  eb migrate `
    --sites "Default Web Site" `
    --ebs-snapshots "snap-1234567890abcdef0" "snap-0987654321fedcba1" `
    --encrypt-ebs-volumes
Using .\migrations\latest to contain artifacts for this migration run.
INFO: Enabling EBS encryption for all new volumes in us-west-2
INFO: Configuring environment with specified EBS snapshots
```

### 安全配置示例
<a name="eb3-migrateexamples-security"></a>

处理具有复杂防火墙规则的站点：

```
PS C:\migrations_workspace >  eb migrate `
    --sites "Default Web Site,ReportingService" `
    --copy-firewall-config `
    --verbose
INFO: Detected the following Windows Firewall rules:
  - Allow Web Traffic (TCP 80, 443)
  - Allow Reporting Traffic (TCP 8081)
INFO: Creating corresponding security group rules
```

迁移包含自定义 IAM 角色的站点：

```
PS C:\migrations_workspace >  eb migrate `
    --sites "SecureApp" `
    --instance-profile "CustomInstanceProfile" `
    --service-role "CustomServiceRole"
```

### 远程执行示例
<a name="eb3-migrateexamples-remote"></a>

从远程 Windows 服务器迁移 IIS 应用程序：

```
PS C:\migrations_workspace >  eb migrate `
    --remote `
    --target-ip "192.0.2.10" `
    --username "administrator" `
    --password "YourPassword123" `
    --application-name "RemoteApp" `
    --environment-name "RemoteEnv"
INFO: Establishing SSH connection to remote host 192.0.2.10...
INFO: Connection established
INFO: Discovering IIS sites on remote host...
INFO: Found 2 sites: Default Web Site, API
INFO: Extracting site configurations...
INFO: Generating source bundle for sites, applications, and virtual directories...
  Default Web Site/ -> .\migrations\latest\upload_target\DefaultWebSite.zip
  API/ -> .\migrations\latest\upload_target\API.zip

Creating application version
Creating environment

Environment details for: RemoteEnv
  Application name: RemoteAppstage mi
  Region: us-west-2
  Deployed Version: app-230320_153045
  Environment ID: e-abcdef1234
  Platform: 64bit Windows Server 2019 v2.7.0 running IIS 10.0
  Tier: WebServer-Standard-1.0
  CNAME: remoteenv.us-west-2.elasticbeanstalk.com
  Updated: 2023-03-20 15:30:45
```

包含特定站点选择的远程迁移：

```
PS C:\migrations_workspace >  eb migrate `
    --remote `
    --target-ip "192.0.2.10" `
    --username "administrator" `
    --password "YourPassword123" `
    --sites "API" `
    --instance-type "c5.large"
```