eb migrate - AWS Elastic Beanstalk

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

eb migrate

描述

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

有关迁移您的 IIS 站点和应用程序的更多信息,请参阅将 IIS 应用程序迁移到 Elastic Beanstalk

注意

在使用此命令之前,请确保您的系统满足以下要求:

  • Internet Information Services(IIS)7.0 或更高版本

  • 安装了 Web 部署 3.6 或更高版本

  • Windows 服务器上的管理权限

  • 配置了适当权限的 AWS 凭证

  • 源服务器具有 AWS 服务的出站互联网访问权限。

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

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

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

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

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

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

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 用于管理这些构件。

语法

eb migrate [options]

eb migrate explore [options]

eb migrate cleanup [options]

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

交互模式命令会提示输入以下信息:

  • 选择要迁移的 IIS 站点

  • 环境和应用程序名称

  • 平台版本选择

  • 实例类型和其他配置选项

子命令

explore

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: ...

清理

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

选项

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

名称

描述

-a application-name

--application-name application-name

新的 Elastic Beanstalk 应用程序的名称。

类型:字符串

默认:EBMigratedApp

--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 快照 ID 的逗号分隔列表。

示例:--ebs-snapshots snap-1234567890abcdef0, snap-0987654321fedcba1

--encrypt-ebs-volumes

对所有新 Amazon EBS 卷强制加密。

重要

这是一个全账户范围的设置,会影响未来所有 Amazon EBS 卷的创建。

-e environment-name

--environment-name environment-name

新 Elastic Beanstalk 环境的名称。

类型:字符串

默认:EBMigratedEnv

约束:长度必须在 4 到 40 个字符之间。只能包含字母、数字和连字符。不得以连字符开头或结尾。

--force

在操作期间跳过确认提示。

cleanup 子命令一起使用时,无需确认即可删除迁移构件。

-ip profile-name

--instance-profile profile-name

与环境的 Amazon EC2 实例关联的实例配置文件。

如果未指定,则会创建一个具有 Elastic Beanstalk 资源访问权限的默认实例配置文件。有关更多信息,请参阅 Elastic Beanstalk 实例配置文件

-i instance-type

--instance-type instance-type

您的 Elastic Beanstalk 环境的 Amazon EC2 实例类型。

类型:字符串

默认:c5.2xlarge

有关可用实例类型,请参阅《Amazon EC2 用户指南》中的 Amazon EC2 实例类型

-in

--interactive

迁移过程强制交互模式。

即使默认值可用,也会提示输入配置值。

-k key-name

--keyname key-name

启用 RDP 访问环境实例的 Amazon EC2 密钥对。

此方法对于调查日志中看不到的实例级问题很有用。

有效值:向 Amazon EC2 注册的现有密钥对名称

-p platform-version

--platform platform-version

环境的 Elastic Beanstalk 平台运行时。如果未指定,则自动从主机 Windows 服务器版本中检测。

示例:"64bit Windows Server 2016 v2.16.2 running IIS 10.0"

有关可用平台版本的列表,请使用 eb 平台列表

--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 用户名

用户配置文件的用户名,该用户配置文件用于访问包含要迁移的 IIS 服务器的远程 Windows 计算机。

使用 --remote 时为必填项。只能在使用 --remote 时指定。

--password 密码

用户配置文件的密码,该用户配置文件用于访问包含要迁移的 IIS 服务器的远程 Windows 计算机。

使用 --remote 时为必填项。只能在使用 --remote 时指定。

-sr role-name

--service-role role-name

Elastic Beanstalk 用于管理相关 AWS 服务的 IAM 服务角色。

如果未指定,则会创建具有必要权限的默认服务角色。有关更多信息,请参阅 Elastic Beanstalk 服务角色

注意

仅指定角色名称,而不是完整的 ARN。Elastic Beanstalk 会自动创建完整的 ARN。

-s site-names

--sites site-names

要迁移的 IIS 站点的逗号分隔列表。如果未指定,则会迁移服务器上的所有可用站点。

示例:--sites "Default Web Site,Intranet,API"

--ssl-certificates certificate-arn[,certificate-arn ...]

要与应用程序负载均衡器关联的 ACM SSL 证书 ARN 的逗号分隔列表。

迁移具有 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 对的逗号分隔列表。

有关更多信息,请参阅 标记环境

--verbose

在迁移过程中显示详细信息。

explore 子命令一起使用时,会显示全面的站点配置详细信息。

-vpc config-file-or-string

--vpc-config config-file-or-string

环境的 VPC 配置,可以指定为 JSON 文件路径或 JSON 字符串。

配置必须包括:

{ "id": "vpc-1234567890abcdef0", "publicip": "true|false", "elbscheme": "public|private", "ec2subnets": ["subnet-a1b2c3d4", "subnet-e5f6g7h8"], "securitygroups": "sg-123456,sg-789012", "elbsubnets": ["subnet-a1b2c3d4", "subnet-e5f6g7h8"] }
  • id:(必需)VPC 标识符

  • publicip:是否为实例分配公有 IP

  • elbscheme:负载均衡器方案(公共或私有)

  • ec2subnets:EC2 实例的子网 ID 列表

  • securitygroups:以逗号分隔的安全组 ID

  • elbsubnets:负载均衡器的子网 ID 列表

重要

当您指定 --vpc-config 参数时,迁移将忽略源环境中的任何现有 VPC 设置。使用此参数时,迁移将仅使用您传入的配置文件中指定的 VPC 设置。使用此参数会覆盖发现源实例 VPC 配置或使用默认 VPC 的默认行为。

常用选项

输出

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

  1. VPC 配置检测(在 EC2 实例上运行时)

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

  3. 环境创建状态

  4. 部署进度

如果迁移成功,则会显示新环境的详细信息,包括:

  • 环境名称和 ID

  • 应用程序名称

  • 区域

  • 平台版本

  • 环境 CNAME

对于迁移期间出现的问题,请使用 eb eventseb health 命令来获取详细信息。

示例

基本用法

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

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.

高级配置示例

使用 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

安全配置示例

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

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"

远程执行示例

从远程 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"