ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

devops-exercises 实战:在 AWS VPC 中跨可用区创建 Subnet(Console / Terraform / Pulumi 三种方案)

devops-exercises 实战:在 AWS VPC 中跨可用区创建 Subnet(Console / Terraform / Pulumi 三种方案) 文档教程DevOps运维【免费下载链接】devops-exercisesLinux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions项目地址https://gitcode.com/GitHub_Trending/de/devops-exercises点击查看免费下载本指南以 devops-exercises 仓库中的 Subnets 练习题 及其 官方解法 为骨架讲解如何在已创建的 VPC 中规划并创建 3 个子网使其分布在不同的可用区AZ并给出 AWS 管理控制台、Terraform 与 Pulumi 三种完整可执行的实现方案。读完本文你将掌握子网与 CIDR、可用区的核心概念能独立完成从 VPC 到多子网的多可用区网络规划并能用 IaC基础设施即代码将其沉淀为可复现的代码。前置条件一个可用的 VPC本练习的两个硬性前提是已存在一个新建的 VPC单 VPC当前区域拥有两个以上可用区。练习默认与 My First VPC 配套先创建名为exercise-vpc、CIDR 为10.0.0.0/16可容纳约 65,536 个 IP满足至少 6 万主机的要求的 VPC。对应的 Terraform 实现见 new_vpc/terraform/main.tfPulumi 实现见 new_vpc/pulumi/main.py。在 AWS 控制台创建的 VPC 可通过验证命令确认其存在aws ec2 describe-vpcs --filters Nametag:Name,Valuesexercise-vpc创建完成后记下其 VPC ID形如vpc-xxxxxxxx后续创建子网时需要选择该 VPC 作为归属。练习目标三个跨 AZ 的子网本练习要求在已建 VPC 内创建 3 个子网具体规格如下子网名称CIDR 网段可用区要求NewSubnet110.0.0.0/24第一个 AZNewSubnet210.0.1.0/24与 NewSubnet1 不同的 AZNewSubnet310.0.2.0/24与前面两个均不同的 AZ三个 CIDR 均采用/24前缀各提供 256 个 IP 地址其中可用主机地址为 251 个。三个网段按10.0.0.0/24、10.0.1.0/24、10.0.2.0/24连续切分互不重叠完全落在10.0.0.0/16的 VPC 网段内——这正是子网 CIDR 划分的基本规则子网必须完全包含在其所属 VPC 的 CIDR 范围内且同一 VPC 内的子网网段不能重叠。跨可用区部署的意义在于高可用当某个 AZ 发生故障时运行在其他 AZ 中的资源依然可用。这也是 AWS 推荐的多可用区架构基础。方案一AWS 管理控制台Console这是仓库 solution.md 中给出的可视化操作路径核心流程如下在 VPC 服务左侧菜单中点击Subnets子网通过左侧筛选器将视图限定为你新建的 VPC避免看到其他 VPC 的子网例如可勾选对应 VPC 名称或使用搜索框过滤点击Create subnet创建子网在 VPC ID 下拉框中选择你新建的 VPC设置子网名称Name tag为NewSubnet1选择一个可用区设置 IPv4 CIDR 为10.0.0.0/24点击Add new subnet添加新子网继续创建第二个子网将第二个子网命名为NewSubnet2选择与第一个子网不同的可用区设置 CIDR 为10.0.1.0/24再次点击Add new subnet将第三个子网命名为NewSubnet3选择与前面两者均不同的可用区设置 CIDR 为10.0.2.0/24完成创建。要点控制台支持在一个创建页面里通过 Add new subnet 连续添加多个子网名称通过 Name tag 标识AWS 不要求名称唯一但本练习要求显式命名以便管理。每个子网必须选择一个可用区且子网与 AZ 绑定——这也是后续在具体 AZ 中启动 EC2 实例的基础。创建完成后可在 Subnets 列表页看到 3 条记录分别位于 3 个不同 AZCIDR 为10.0.0.0/24、10.0.1.0/24、10.0.2.0/24。方案二Terraform仓库在 subnets/terraform/main.tf 中给出了完整的 Terraform 解法这也是推荐的生产级做法见 AWS README 中推荐使用 IaC 技术解题的说明。完整代码与逐行解析# Variables variable vpc_id { type string } # AWS Subnets resource aws_subnet NewSubnet1 { cidr_block 10.0.0.0/24 vpc_id var.vpc_id availability_zone data.aws_availability_zones.all.names[0] tags { Purpose: exercise Name: NewSubnet1 } } resource aws_subnet NewSubnet2 { cidr_block 10.0.1.0/24 vpc_id var.vpc_id availability_zone data.aws_availability_zones.all.names[1] tags { Purpose: exercise Name: NewSubnet2 } } resource aws_subnet NewSubnet3 { cidr_block 10.0.2.0/24 vpc_id var.vpc_id availability_zone data.aws_availability_zones.all.names[2] tags { Purpose: exercise Name: NewSubnet3 } } # Outputs output NewSubnet1-id { value aws_subnet.NewSubnet1.id } output NewSubnet2-id { value aws_subnet.NewSubnet2.id } output NewSubnet3-id { value aws_subnet.NewSubnet3.id }关键点解读variable vpc_id将 VPC ID 作为输入变量type string声明其类型。运行时通过-var或terraform.tfvars传入例如terraform apply -varvpc_idvpc-xxxxxxxx。也可以直接引用上一练习创建的aws_vpc.exercise-vpc.id见 new_vpc/terraform/main.tf 的output vpc-id。aws_subnet资源这是创建子网的核心资源块包含三个必填参数cidr_block子网网段必须落在 VPC 网段内且不与其他子网重叠vpc_id所属 VPCavailability_zone可用区每个子网只能绑定一个 AZ。data.aws_availability_zones.all.names[N]使用数据源data source动态获取当前区域所有可用区的名称列表names[0]、names[1]、names[2]分别取前三个 AZ。这一写法既保证了三个子网落入不同的可用区又避免了在配置里硬编码 AZ 名称——这正是本练习不同 AZ要求的 IaC 化表达。数据源的完整定义如下data aws_availability_zones all { state available }注意前提条件区域拥有两个以上 AZ在这里体现为names[2]必须存在否则apply会因索引越界而报错。tags标签中的Name对应控制台中的子网名称NewSubnet1/2/3另加Purpose: exercise便于标识练习资源、后续清理。output导出三个子网的 ID便于其他资源如 EC2、ALB引用。执行流程terraform init terraform plan -varvpc_idvpc-xxxxxxxx terraform apply -varvpc_idvpc-xxxxxxxxplan阶段可预览即将创建的资源与 CIDR/AZ 对应关系apply后即完成创建。方案三PulumiPython仓库在 subnets/pulumi/main.py 中提供了等价的 Pulumi Python 解法import pulumi_aws as aws availableZones aws.get_availability_zones(stateavailable) aws.ec2.Subnet(NewSubnet1, vpc_idaws.vpc[main][id], cidr_block10.0.0.0/24, availability_zoneavailableZones.names[0], tags{Name: NewSubnet1} ) aws.ec2.Subnet(NewSubnet2, vpc_idaws.vpc[main][id], cidr_block10.0.1.0/24, availability_zoneavailableZones.names[1], tags{Name: NewSubnet2} ) aws.ec2.Subnet(NewSubnet3, vpc_idaws.vpc[main][id], cidr_block10.0.2.0/24, availability_zoneavailableZones.names[2], tags{Name: NewSubnet3} ) # Run pulumi up与 Terraform 方案一一对应aws.get_availability_zones(stateavailable)获取当前区域的可用区列表availableZones.names[N]按索引取不同 AZaws.ec2.Subnet(...)的vpc_id、cidr_block、availability_zone、tags参数语义与 Terraform 的aws_subnet资源一致代码中aws.vpc[main][id]表示引用现有主VPC 的 ID。若与 new_vpc/pulumi/main.py 联用可直接引用其导出的vpc_id。执行方式在项目目录下运行pulumi upPulumi 会解析代码并完成资源编排。三种方案对比与验证维度控制台TerraformPulumi操作方式图形化点击HCL 声明式Python 编程式可复现性低手动重复高代码即配置高代码即配置AZ 选择人工选择数据源动态取SDK 动态取适用场景快速实验、理解概念团队基础设施管理需要编程逻辑的 IaC创建完成后可通过 AWS CLI 验证结果aws ec2 describe-subnets --filters Namevpc-id,Values你的VPC_ID --query Subnets[*].{CIDR:CidrBlock, AZ:AvailabilityZone, Name:Tags[?KeyName]|[0].Value}预期输出应包含 3 个子网CIDR 分别为10.0.0.0/24、10.0.1.0/24、10.0.2.0/24且各自归属不同的可用区。仓库中的配套学习资源练习题原文subnets/exercise.md官方解法控制台 链接到 IaC 代码subnets/solution.md前置练习创建 VPC 的 exercise.md 与 solution.md完整练习题索引AWS READMEVPC 章节其中 My First VPC 与 Subnets 连续编排建议按顺序完成其他 VPC 网络配套练习安全组 Security Groups、弹性 IP Elastic IP、ENI Elastic Network Interfaces建议完成本练习后结合安全组与路由表Route Table继续深入即可构建具备多可用区高可用能力的完整应用网络环境。赞分享文档教程DevOps运维【免费下载链接】devops-exercisesLinux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions项目地址https://gitcode.com/GitHub_Trending/de/devops-exercises点击查看免费下载相关推荐devops-exercises 实战AWS VPC 多可用区子网创建指南Console、Terraform 与 Pulumi 三方案devops exercises 实战AWS VPC 多可用区子网创建指南Console、Terraform 与 Pulumi 三方案 本篇指南以 dev文档教程DevOps运维devops-exercises 实战AWS S3 私有桶与公开桶的创建Console / Terraform / Pulumi 三方案详解devops exercises 实战AWS S3 私有桶与公开桶的创建Console / Terraform / Pulumi 三方案详解 本文基于 d文档教程DevOps运维devops-exercises 实战用 AWS S3 创建私有桶与公开桶Console Terraform Pulumidevops exercises 实战用 AWS S3 创建私有桶与公开桶Console Terraform Pulumi 本文基于 devops文档教程DevOps运维上一篇Docker cagent vs 传统AI框架为什么多Agent架构更适合复杂任务下一篇Faraday 项目常见问题解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表