网络配置和端口设置 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

网络配置和端口设置

本节介绍 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 服务将使用您 Amazon 账户中的默认 VPC。下方列表显示了命令和输出的示例:

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 的所有 DENY 规则(否则,默认情况下会允许端口 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 参数指定负载均衡器配置。以下示例对参数进行了演示。

方案选择

在公有负载均衡器和私有负载均衡器方案之间进行选择:

{ "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" } } } ] } }

迁移过程会创建以下应用程序负载均衡器侦听器规则,其中保留了原始路由逻辑:

  • 端口 80 流量路由到 Default Web Site

  • 端口 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>

迁移过程会完成以下任务:

  1. 识别跨站点的共享配置

  2. 生成要应用这些设置的相应 PowerShell 脚本

  3. 维护配置层次结构和继承

最佳实践

我们建议您遵循迁移应用程序网络配置的最佳实践。以下分组提供了摘要指南。

VPC 设计
  • 遵循 Amazon VPC 设计最佳实践

  • 为负载均衡器和 EC2 实例使用单独的子网

  • 实施正确的路由表和 NACL

  • 考虑 Amazon 服务的 VPC 端点

高可用性
  • 跨多个可用区进行部署

  • 针对负载均衡器使用至少两个子网

  • 配置跨可用区的自动扩缩

  • 实施适当的运行状况检查

安全性
  • 遵守安全最佳实践

  • 使用安全组作为主访问控制

  • 实施网络访问控制列表(ACL)以提高安全性

  • 监控 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