在不同AWS账户中VPCs使用一致的可用区 - AWS Prescriptive Guidance

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

在不同AWS账户中VPCs使用一致的可用区

由亚当·斯派塞创作 () AWS

摘要

在 Amazon Web Services (AWS) 云上,可用区的名称可能因您的AWS账户和标识其位置的可用区 ID (AZ ID) 而异。如果您使用AWS CloudFormation 创建虚拟私有云 (VPCs),则在创建子网时必须指定可用区的名称或 ID。如果您VPCs在多个账户中创建,则可用区名称是随机分配的,这意味着子网在每个账户中使用不同的可用区。 

要在您的账户中使用相同的可用区,您必须将每个账户中的可用区名称映射至相同的可用区 ID。例如,下图显示use1-az6可用区 ID 在AWS账户 A 和账户 Z us-east-1a us-east-1c 中AWS命名。

use1-az6 AZ ID 在账户 A 中命名为 us-east-1a,AWS账户 Z 中命名为 us-east-1c。AWS

此模式通过提供跨账户、可扩展的解决方案来在子网中使用相同的可用区,从而有助于确保区域一致性。区域一致性可确保您的跨账户网络流量避免跨可用区网络路径,这有助于降低数据传输成本并降低工作负载之间的网络延迟。

这种模式是该AWS CloudFormation AvailabilityZoneId 属性的另一种方法。

先决条件和限制

先决条件

  • 同一AWS地区至少有两个活跃AWS账户。

  • 评估需要多少可用区来满足您在该地区的VPC需求。

  • 识别并记录您需要支持的每个可用区的可用区 ID。有关这方面的更多信息,请参阅 Resourc e Access Manager 文档中的AWSAWS资源可用区IDs。 

  • 以逗号分隔的按顺序排列的可用区列表。IDs例如,列表中的第一个可用区映射为 az1,第二个可用区映射为 az2,此映射结构将一直持续到以逗号分隔的列表完全映射为止。可以映射的可用区IDs数量没有上限。 

  • GitHub 多账户可用区映射存储库中的az-mapping.yaml文件已复制到您的本地计算机

架构

下图显示了在账户中部署并创建 S AWS ystems Manager 参数存储值的架构。当您在账户VPC中创建时,会使用这些参数存储值。

为每个可用区 ID 创建 Systems Manager 参数存储值和存储可用区名称的工作流程。

图表显示了以下工作流:

  1. 此模式的解决方案已部署到所有需要区域一致性的VPC账户。 

  2. 该解决方案为每个可用区 ID 创建 Parameter Store 值并存储新的可用区名称。 

  3. 该AWS CloudFormation 模板使用存储在每个 Parameter Store 值中的可用区名称,这样可以确保区域一致性。

下图显示了VPC使用此模式的解决方案创建的工作流程。

工作流提交 CloudFormation 模板以创建VPC具有正确可用区的模板IDs。

图表显示了以下工作流:

  1. 将用于创建的模板提交VPC给AWS CloudFormation。

  2. AWS CloudFormation 解析每个可用区的参数存储值,并返回每个可用区 ID 的可用区名称。

  3. 使用区域一致性IDs所需的正确可用区创建 A VPC。

部署此模式的解决方案后,您可创建引用参数存储值的子网。如果您使用 AWS CloudFormation,则可以引用以下YAML格式的示例代码中的可用区映射参数值:

Resources: PrivateSubnet1AZ1: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC CidrBlock: !Ref PrivateSubnetAZ1CIDR AvailabilityZone: !Join - '' - - '{{resolve:ssm:/az-mapping/az1:1}}'

此示例代码包含在 GitHub 多账户可用区映射存储库vpc-example.yaml 的文件中。它向您展示了如何创建VPC与参数存储值对齐的和子网,以实现区域一致性。

技术堆栈

  • AWS CloudFormation

  • AWS Lambda

  • AWS Systems Manager Parameter Store

自动化和扩缩

您可以使用AWS CloudFormation StackSets 或 Cont AWS rol Tower 的自定义解决方案将此模式部署到您的所有AWS账户。有关更多信息,请参阅 AWS Cloudformation 文档AWS CloudFormation StackSets中的使用和AWS解决方案库中的 Cont AWSrol Tower 自定义。 

部署AWS CloudFormation 模板后,您可以将其更新为使用 Parameter Store 值,并在管道VPCs中或根据您的要求进行部署。 

工具

AWS 服务

  • AWS CloudFormation帮助您对资源进行建模和设置,快速一致地配置AWS资源,并在资源的整个生命周期中对其进行管理。您可以使用模板来描述资源及其依赖关系,然后将它们作为堆栈一起启动和配置,而不必单独管理资源。您可以跨多个AWS账户和AWS地区管理和配置堆栈。

  • AWSLambda 是一项计算服务,支持在不预置或管理服务器的情况下运行代码。只有在需要时 Lambda 才运行您的代码,并且能自动扩缩,从每天几个请求扩展到每秒数千个请求。您只需为消耗的计算时间付费 - 代码未运行时不产生费用。

  • AWSSystems Manager 参数存储是 S AWS ystems Manager 的一项功能。它可提供安全的分层存储,用于配置数据管理和密钥管理。

代码

此模式的代码在 GitHub 多账户可用区映射存储库中提供。

操作说明

任务描述所需技能

确定该区域所需可用区。

  1. 确定您所在地区IDs必须持续使用的可用区。 

  2. 将这些 AZ 记录IDs在逗号分隔的列表中,并按照您想要的应用顺序进行记录。例如,列表中的第一个可用区映射为 az1,第二个可用区映射为 az2。可以映射的可用区IDs数量没有上限。

云架构师

部署 az-mapping.yaml 文件。

使用该az-mapping.yaml文件在所有必需的AWS账户中创建AWS CloudFormation 堆栈。在 AZIds 参数中,使用您之前创建的以逗号分隔的列表。 

我们建议您使用AWS CloudFormation StackSets或 Cont AWSrol Tower 的自定义解决方案

云架构师
任务描述所需技能

自定义AWS CloudFormation 模板。

使用创建子网时 AWS CloudFormation,请自定义模板以使用之前创建的参数存储值。

有关示例模板,请参阅 GitHub 多账户可用区映射存储库中的vpc-example.yaml文件。

云架构师

部署VPCs。

将自定义AWS CloudFormation 模板部署到您的账户中。然后,该区域VPC中的每个区域在用于子网的可用区中都具有区域一致性

云架构师

相关资源