网络配置和端口设置 - 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 服务将使用您账户中的默认 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>

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

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

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

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

最佳实践

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

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