本文由Leonardo Solano高级混合云解决方案架构师和Robert Belson解决方案开发倡导者撰写。
在AWS WellArchitected框架中,规划网络拓扑是建立可靠性支柱的基本要求。REL02BP02描述了如何通过AWS Direct Connect和AWS SitetoSite VPN为云和本地环境的私有网络之间提供冗余连接。随着越来越多的客户结合使用本地环境、Local Zones和AWS区域,他们希望获得如何将AWS WellArchitected Framework的这一支柱扩展到Local Zones的指导。例如,如果您正在进行应用现代化,可能会存在依赖于持久的本地数据的Amazon EKS集群。
AWS Local Zones提供单毫秒级延迟,支持实时游戏、直播流、增强和虚拟现实AR/VR、虚拟工作站等应用程序。Local Zones还帮助您在医疗、金融服务和公共部门等受监管行业中满足数据主权要求。此外,企业可以利用混合架构,通过Local Zones无缝扩展本地环境至云中。在上述例子中,您可以将Amazon EKS集群扩展到Local Zone或多个Local Zones中的节点组,或使用AWS Outpost机架在本地环境中。
为了在Local Zones和本地环境之间提供连接,客户通常会考虑使用AWS Marketplace中的Direct Connect或软件VPN。本文提供了一种参考实施方案,旨在消除连接中的单点故障,同时使用Direct Connect和AWS Marketplace中的软件VPN提供自动网络故障检测和智能故障转移。此外,该解决方案还通过确保流量不需经过AWS区域而直接连接至Local Zone来最小化延迟。
在Local Zones中,基于AWS Direct Connect的所有架构模式都遵循与AWS区域相同的架构,并可以使用AWS Direct Connect Resiliency Toolkit进行部署。截止到本帖发布时,Local Zones不支持AWS管理的SitetoSite VPN查看最新的Local Zones功能。因此,对于仅有单个Direct Connect位置或需要超出单个连接冗余的客户,本文展示了一种使用AWS Direct Connect故障转移策略与软件VPN设备的解决方案。您可以在AWS Marketplace中找到一系列第三方软件VPN设备以及每个产品提供的每个VPN隧道的吞吐量。
开始之前,请确保您的账户已注册Local Zones,配置以下内容:
从区域扩展一个虚拟私有云VPC至Local Zone,至少有3个子网。参考开始使用AWS Local Zones。Local Zone中的公共子网publicsubnet1Local Zone中的私有子网privatesubnet1和privatesubnet2区域中的私有子网privatesubnet3修改您VPC中的DNS属性,包括“enableDnsSupport”和“enableDnsHostnames”;将互联网网关IGW附加到VPC;将虚拟私有网关VGW附加到VPC;创建一个附加到privatesubnet3的ec2 vpcendpoint;定义以下路由表RTB:Privatesubnet1 RTB:为VGW启用传播;Privatesubnet2 RTB:为VGW启用传播;Publicsubnet1 RTB:默认路由通过IGWID作为下一跳;从您的本地环境到Local Zones虚拟网关的Direct Connect Private Virtual InterfaceVIF进行配置。详细信息请参见此帖:AWS Direct Connect和AWS Local Zones互操作性模式;在Publicsubnet1上启动任何来自AWS Marketplace的软件VPN设备。在这篇博文中模拟SitetoSite VPN客户网关使用strongSwan,您可以找到提供在AWS区域中部署第三方软件VPN的步骤的示例;从环境中捕获以下参数:软件VPN弹性网络接口ENIIDPrivatesubnet1 RTB ID探测IP,必须是一个本地资源,能够响应互联网控制消息协议ICMP请求。该架构要求在一个私有子网privatesubnet2中具备一个实用工具Amazon Elastic Compute CloudAmazon EC2实例,通过Direct Connect连接发送ICMP探测请求。一旦该实用工具实例检测到来自Local Zone到本地网络的丢包情况,它便通过在生产私有子网privatesubnet1中添加一个静态路由目的地为本地CIDR范围,下一跳为VPN设备的ENIID启动故障转移,取代被传播的Direct Connect路由。一旦恢复健康,该实用工具将返回到默认路由至原Direct Connect连接。
为了在本地环境中增加冗余,可以使用两个路由器,并采用任何第一跳冗余协议FHRP,如热备份路由协议HSRP或虚拟路由冗余协议VRRP。与Direct Connect链路连接的路由器优先级最高,作为FHRP过程中主路由器,而VPN路由器则作为次要路由器。FHRP中的故障转移机制依赖于接口或协议状态如BGP,这将触发故障转移机制。
在本地创建ec2roletrustpolicyjson文件:
bashcat gt ec2roletrustpolicyjson ltltEOF{ Version 20121017 Statement [ { Effect Allow Principal { Service ec2amazonawscom } Action stsAssumeRole } ]}EOF
创建您的EC2 IAM角色,例如myec2role:
bashaws iam createrole rolename myec2role assumerolepolicydocument file//ec2roletrustpolicyjson
创建一个包含必要权限的文件以附加到EC2 IAM角色,命名为ec2roleiampolicyjson:
bashaws iam createpolicy policyname myec2policy policydocument file//ec2roleiampolicyjson
创建IAM策略并将其附加到您之前创建的IAM角色myec2role:
bashaws iam createpolicy policyname myec2policy policydocument file//ec2roleiampolicyjsonaws iam attachrolepolicy policyarn arnawsiamltaccountidgtpolicy/myec2policy rolename myec2role
创建实例配置文件并将IAM角色附加到其上:
bashaws iam createinstanceprofile instanceprofilename myec2instanceprofileaws iam addroletoinstanceprofile instanceprofilename myec2instanceprofile rolename myec2role
通过CLI捕获Amazon Linux 2 AMI ID:
bashaws ec2 describeimages filters Name=nameValues=amzn2amikernel510hvm20202304041x8664gp2 grep ImageId 示例输出: ImageId ami069aabeee6f53e7bf
为实用实例创建EC2密钥:
bashaws ec2 createkeypair keyname MyKeyPair query KeyMaterial output text gt MyKeyPairpem
在Local Zone中启动实用实例替换变量为您的账户和环境参数:
bashaws ec2 runinstances imageid ami069aabeee6f53e7bf keyname MyKeyPair count 1 instancetype t3medium subnetid ltprivatesubnet2idgt iaminstanceprofile Name=myec2instanceprofilelinux
在您的实用程序实例中创建以下Shell脚本替换健康检查变量为您的环境值:
bashcat gt vpnmonitoringsh ltltEOF// 版权所有 Amazoncom 及其子公司。保留所有权利。// SPDXLicenseIdentifier MIT0

WaitBetweenPings=2RTBID=PROBEIP=remotecidr=GWENIID=Activepath=DX
echo date 启动VPN监控
while [ ] do # 检查主VPN设备到远程探测IP的健康状况 pingresult=ping c 3 W 1 PROBEIP grep time= wc l # 检查是否有成功的健康检查 if [pingresult == 0] then if [Activepath == DX] then echo date Direct Connect失败。切换到VPN aws ec2 createroute routetableid RTBID destinationcidrblock remotecidr networkinterfaceid GWENIID region useast1 Activepath=VPN DXtries=10 echo probeip unreachable activepath vpn else echo probeip unreachable activepath vpn fi else if [Activepath == VPN] then let DXtries=DXtries1 if [DXtries == 0] then echo date 切换回Direct Connect aws ec2 deleteroute routetableid RTBID destinationcidrblock remotecidr region useast1 Activepath=DX echo probeip reachable activepath Direct Connect else echo probeip reachable activepath vpn fi else echo probeip reachable activepath Direct Connect fi fi done EOF
越南节点的加速器修改Shell脚本文件的权限:
bashchmod x vpnmonitoringsh
启动Shell脚本:
bash/vpnmonitoringsh
模拟Direct Connect链路的故障,切断Local Zone与本地环境之间的可用路径。您可以使用Direct Connect控制台中的故障测试功能模拟故障。
在实用程序实例中,您将看到以下日志:
Thu Sep 21 143934 UTC 2023 Direct Connect失败。切换到VPN
脚本利用ICMP探测请求检测到本地探测IP处的封包丢失,从而触发故障转移过程。因此,它会向AWS发出API调用aws ec2 createroute。
该脚本将在privatesubnet1RTB中创建到本地CIDR的静态路由,下一跳为VPN弹性网络ID。
FHRP机制检测到Direct Connect链路的故障,并降低该路径的FHRP优先级,从而触发通过VPN路径切换为次级链路的过程。
一旦您取消测试或测试结束,故障恢复过程将使privatesubnet1路由表恢复到初始状态,结果在实用程序实例中会发出以下日志:
Thu Sep 21 144234 UTC 2023 切换回Direct Connect
要清理您的AWS资源,请运行以下AWS CLI命令:
bashaws ec2 terminateinstances instanceids ltyourutilityinstanceidgtaws iam deleteinstanceprofile instanceprofilename myec2instanceprofileaws iam deleterole myec2role
本文展示了如何为Local Zones创建故障转移策略,利用在AWS区域中已有的冗余机制。通过结合使用Direct Connect和软件VPN,您可以在因地理限制而被限于单个Direct Connect位置的情况下实现高可用性。在本文所示的架构模式中,故障转移策略依赖于一个具有最小权限的实用实例。该实用实例识别网络障碍,并动态修改您的生产路由表,以保持从Local Zone到本地位置的连接。该机制还能够在软件VPN确认Direct Connect路径足够可靠以避免网络跳变后,自动切换回Direct Connect。如需了解有关Local Zones的更多信息,您可以访问AWS Local Zones用户指南。
使用 Amazon Neptune、Amazon Neptune Machine Learning
使用 Amazon Neptune 和其他服务进行电影推荐系统设计主要重点在本文中,我们探讨了一种高效的电影推荐系统,利用了 Amazon Neptune、Amazon OpenSearch Service 以及 Amazon SageMaker。设计了一个可搜寻的电影内容图数据库,通过文本、语义及...
如果你错过了:推动成本效率,了解Salesforce如何创新和节省成本,优化成本节约 云财务管理
驱动成本效率:Salesforce 如何创新与节省开支关键要点通过持续的成本优化,企业可以最大化云服务的价值。本文提供了三大资源,帮助企业识别及执行云成本优化的机会,确保在提高效率的同时,推动创新和业务价值的提升。通过不断进行成本优化,您能够最大化云计算给企业带来的价值。您可以构建现代且可扩展的应用...