网络配置和端口设置 - AWS Elastic Beanstalk

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

网络配置和端口设置

本节介绍了 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 实例子网分配

  • 安全组关联

  • 负载均衡器子网分配

本地或非AWS 云主机

在本地服务器或非AWS 云主机上eb migrate运行时,Elastic Beanstalk 服务将使用您账户中的默认 VPC。 AWS 下表显示了一个示例命令和输出:

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本地环境或非AWS 云环境),请提供与以下示例类似的 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>

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

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

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

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

最佳实践

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

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

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

  • 实施正确的路由表和 NACLs

  • 考虑使用 AWS 服务的 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