本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在不同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命名。
此模式通过提供跨账户、可扩展的解决方案来在子网中使用相同的可用区,从而有助于确保区域一致性。区域一致性可确保您的跨账户网络流量避免跨可用区网络路径,这有助于降低数据传输成本并降低工作负载之间的网络延迟。
这种模式是该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中创建时,会使用这些参数存储值。
图表显示了以下工作流:
此模式的解决方案已部署到所有需要区域一致性的VPC账户。
该解决方案为每个可用区 ID 创建 Parameter Store 值并存储新的可用区名称。
该AWS CloudFormation 模板使用存储在每个 Parameter Store 值中的可用区名称,这样可以确保区域一致性。
下图显示了VPC使用此模式的解决方案创建的工作流程。
图表显示了以下工作流:
将用于创建的模板提交VPC给AWS CloudFormation。
AWS CloudFormation 解析每个可用区的参数存储值,并返回每个可用区 ID 的可用区名称。
使用区域一致性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 多账户可用区映射
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
确定该区域所需可用区。 |
| 云架构师 |
部署 az-mapping.yaml 文件。 | 使用该 我们建议您使用AWS CloudFormation StackSets或 Cont AWSrol Tower 的自定义解决方案 | 云架构师 |
任务 | 描述 | 所需技能 |
---|---|---|
自定义AWS CloudFormation 模板。 | 使用创建子网时 AWS CloudFormation,请自定义模板以使用之前创建的参数存储值。 有关示例模板,请参阅 GitHub 多账户可用区映射 | 云架构师 |
部署VPCs。 | 将自定义AWS CloudFormation 模板部署到您的账户中。然后,该区域VPC中的每个区域在用于子网的可用区中都具有区域一致性 | 云架构师 |
相关资源
您的AWS资源的可用区(IDsR es AWS ource Access Manager 文档)
AWS::EC2: 子网(AWS CloudFormation 文档)