本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
网络配置和端口设置
本节介绍了 IIS 迁移的网络配置选项,包括 VPC 设置、端口配置和多站点部署。
VPC 配置
该eb migrate命令为您的 Elastic Beanstalk 环境提供了灵活的 VPC 配置选项。该工具既可以检测源 EC2 实例中的 VPC 设置,也可以通过命令行参数接受自定义 VPC 配置。查看将 Elastic Beanstalk 和 Amazon VPC 结合使用以了解如何使用 VPC 配置 Elastic Beanstalk。
自动检测 VPC
在 EC2 实例上eb migrate运行时,它会自动发现并使用源环境 EC2 实例中的 VPC 配置。以下示例输出说明了它检测到的配置信息:
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
...
检测到的配置包括:
-
VPC 标识符
-
公有 IP 分配设置
-
负载均衡器方案(公共/私有)
-
EC2 实例子网分配
-
安全组关联
-
负载均衡器子网分配
本地或非Amazon 云主机
在本地服务器或非Amazon 云主机上eb migrate运行时,Elastic Beanstalk 服务将使用您账户中的默认 VPC。 Amazon 下表显示了一个示例命令和输出:
PS C:\migrations_worspace> eb migrate `
-k windows-test-pem `
--region us-east-1 `
-a EBMigratedEnv `
-e EBMigratedEnv-test2 `
--copy-firewall-config
Determining EB platform based on host machine properties
Using .\migrations\latest to contain artifacts for this migration run.
...
查看将 Elastic Beanstalk 和 Amazon VPC 结合使用以了解 Elastic Beanstalk 是如何为您的环境配置默认 VPC 的。
自定义 VPC 配置
对于需要特定 VPC 设置的任何源环境(EC2本地环境或非Amazon 云环境),请提供与以下示例类似的 VPC 配置文件:
{ "id": "vpc-12345678", "publicip": "true", "elbscheme": "public", "ec2subnets": ["subnet-a1b2c3d4", "subnet-e5f6g7h8"], "securitygroups": "sg-123456,sg-789012", "elbsubnets": ["subnet-a1b2c3d4", "subnet-e5f6g7h8"] }
使用以下命令应用此配置:
PS C:\migrations_workspace>
eb migrate --vpc-config vpc-config.json
注意
VPC 配置文件需要指定 VPC ID 的id
字段。所有其他字段均为可选字段,Elastic Beanstalk 将对您未指定的任何字段使用默认值。
重要
当您指定--vpc-config
参数时,迁移将忽略源环境中的任何现有 VPC 设置。使用此参数时,迁移将仅使用您在传入的配置文件中指定的 VPC 设置。使用此参数会覆盖发现源实例的 VPC 配置或使用默认 VPC 的默认行为。
在以下场景中使用该--vpc-config
参数:
-
当您迁移没有可发现的 VPC 设置的非EC2 环境时
-
当您迁移到与源环境所使用的 VPC 不同的 VPC 时
-
当您需要自定义子网选择或安全组配置时
-
当自动发现无法正确识别所需的 VPC 设置时
-
当您从本地迁移并且不想使用默认 VPC 时
网络安全配置
默认情况下,在目标实例上eb migrate打开端口 80,但不会从源计算机复制其他 Windows 防火墙规则。要包含所有防火墙配置,请使用以下命令:
PS C:\migrations_workspace>
eb migrate --copy-firewall-config
此命令执行以下操作:
-
识别 IIS 站点绑定使用的端口
-
检索相应的防火墙规则
-
生成 PowerShell 脚本以在目标实例上重新创建规则
-
保留源计算机端口 80 的所有拒绝规则(否则默认情况下允许端口 80)
考虑一个用例,其中您的源计算机具有以下示例中指定的防火墙规则:
# Source machine firewall configuration Get-NetFirewallRule | Where-Object {$_.Enabled -eq 'True'} | Get-NetFirewallPortFilter | Where-Object {$_.LocalPort -eq 80 -or $_.LocalPort -eq 443 -or $_.LocalPort -eq 8081} # Output shows rules for ports 80, 443, and 8081
迁移会创建包含以下配置的脚本 (modify_firewall_config.ps1
):
New-NetFirewallRule -DisplayName "Allow Web Traffic" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 80,443 New-NetFirewallRule -DisplayName "Allow API Traffic" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8081
迁移工具会自动执行以下操作:
-
从所有 IIS 站点绑定中提取 HTTP/HTTPS 端口
-
使用 Windows 防火墙 INetFwPolicy2
接口枚举防火墙规则 -
筛选规则,仅包括那些明确引用指定端口的规则
-
仅处理 HTTP 和 HTTPS 网站绑定及其关联的防火墙规则
-
保留规则属性,包括显示名称、操作、协议和启用状态
-
同时处理防火墙规则中的单个端口和端口范围
-
将防火墙配置脚本添加到部署清单
负载均衡器配置
您可以通过--vpc-config
参数指定 Load Balancer 配置。以下示例演示了这些参数。
- 方案选择
-
在公共负载均衡器和私有负载均衡器方案之间进行选择:
{ "id": "vpc-12345678", "elbscheme": "private", "elbsubnets": ["subnet-private1", "subnet-private2"] }
- 子网分布
-
为了获得高可用性,请在可用区之间分配负载均衡器子网:
{ "elbsubnets": [ "subnet-az1", // Availability Zone 1 "subnet-az2", // Availability Zone 2 "subnet-az3" // Availability Zone 3 ] }
注意
虽然 Elastic Beanstalk 支持使用应用程序负载均衡器、网络负载均衡器和经典负载均衡器创建环境,但该命令仅支持应用程序负载均衡器eb migrate。有关负载均衡器类型的更多信息,请参阅 Elastic Beanstalk 环境的负载均衡器。
使用端口配置进行多站点部署
该eb migrate命令处理复杂的多站点 IIS 部署,在这些部署中,应用程序可能共享依赖关系或使用非标准端口。考虑以下具有多个站点的典型企业设置示例:
<!-- IIS Configuration --> <sites> <site name="Default Web Site" id="1"> <bindings> <binding protocol="http" bindingInformation="*:80:www.example.com" /> </bindings> </site> <site name="InternalAPI" id="2"> <bindings> <binding protocol="http" bindingInformation="*:8081:api.internal" /> </bindings> </site> <site name="ReportingPortal" id="3"> <bindings> <binding protocol="http" bindingInformation="*:8082:reports.internal" /> </bindings> </site> </sites>
要迁移此配置,请使用以下示例命令和参数:
PS C:\migrations_workspace>
eb migrate ` --sites "Default Web Site,InternalAPI,ReportingPortal" ` --copy-firewall-config ` --instance-type "c5.large"
该eb migrate命令创建一个保留每个站点的身份和配置的部署包。该命令生成一个aws-windows-deployment-manifest.json
,用于定义应如何部署这些站点。以下示例演示生成的 json 文件:
{ "manifestVersion": 1, "deployments": { "msDeploy": [ { "name": "DefaultWebSite", "parameters": { "appBundle": "DefaultWebSite.zip", "iisPath": "/", "iisWebSite": "Default Web Site" } } ], "custom": [ { "name": "InternalAPI", "scripts": { "install": { "file": "ebmigrateScripts\\install_site_InternalAPI.ps1" }, "restart": { "file": "ebmigrateScripts\\restart_site_InternalAPI.ps1" }, "uninstall": { "file": "ebmigrateScripts\\uninstall_site_InternalAPI.ps1" } } }, { "name": "ReportingPortal", "scripts": { "install": { "file": "ebmigrateScripts\\install_site_ReportingPortal.ps1" }, "restart": { "file": "ebmigrateScripts\\restart_site_ReportingPortal.ps1" }, "uninstall": { "file": "ebmigrateScripts\\uninstall_site_ReportingPortal.ps1" } } } ] } }
迁移过程会创建以下 Application Load Balancer 侦听器规则,这些规则保留了您的原始路由逻辑:
-
端口 80 流量路由到默认网站
-
端口 8081 流量路由到 InternalAPI
-
8082 端口的流量路径通往 ReportingPortal
共享配置和依赖关系
当站点共享配置或依赖关系时,eb migrate应适当地处理这些关系。参考以下示例,其中多个站点共享一个通用配置:
<!-- Shared configuration in applicationHost.config --> <location path="Default Web Site"> <system.webServer> <asp enableSessionState="true" /> <caching enabled="true" enableKernelCache="true" /> </system.webServer> </location>
迁移过程完成了以下任务:
-
识别跨站点的共享配置
-
生成相应的 PowerShell 脚本来应用这些设置
-
维护配置层次结构和继承
最佳实践
我们建议您遵循迁移应用程序网络配置的最佳实践。以下分组提供了摘要指南。
- VPC 设计
-
-
遵循 Amazon VPC 设计最佳实践
-
为负载均衡器和实例使用单独的子网 EC2
-
实施正确的路由表和 NACLs
-
考虑使用 Amazon 服务的 VPC 终端节点
-
- 高可用性
-
-
跨多个可用区进行部署
-
至少使用两个子网作为负载均衡器
-
跨配置自动缩放 AZs
-
实施适当的健康检查
-
- 安全性
-
-
遵循安全最佳实践
-
使用安全组作为主要访问控制
-
实施网络访问控制列表 (ACLs) 以提高安全性
-
监控 VPC 流日志
-
故障排除
常见的网络配置问题包括以下方面。每个主题后面都是示例命令,用于获取有关您的环境的网络配置和运行状况的更多信息。
- 子网配置
-
# Verify subnet availability
PS C:\migrations_workspace>
aws ec2 describe-subnets --subnet-ids subnet-id
# Check available IP addresses
PS C:\migrations_workspace>
aws ec2 describe-subnets --subnet-ids subnet-id --query 'Subnets[].AvailableIpAddressCount'
- 安全组访问权限
-
# Verify security group rules
PS C:\migrations_workspace>
aws ec2 describe-security-groups --group-ids sg-id
# Test network connectivity
PS C:\migrations_workspace>
aws ec2 describe-network-interfaces --filters Name=group-id,Values=sg-id
- 负载均衡器运行状况
-
# Check load balancer health
PS C:\migrations_workspace>
aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:region:account-id:targetgroup/group-name/group-id