配置 VPC 与网络
使用 Terraform 配置 AWS 虚拟私有云、子网和安全组,为基础设施提供安全、隔离的网络基础。
配置 VPC 与网络 是 CoddyKit 上的免费 Terraform Infrastructure as Code 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Terraform Infrastructure as Code 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Terraform Infrastructure as Code 课程共包含 4 节课。
为什么要使用自定义 VPC
每个 AWS 账户都会附带一个默认 VPC,但生产基础设施应当使用您亲自设计的网络。VPC(虚拟私有云)是 AWS 云中一个隔离的区域,您可以在其中控制 IP 范围、子网、路由和防火墙。
借助 Terraform,您可以将整个网络描述为代码,从而在不同区域和账户之间实现可重复部署。
声明 VPC 资源
aws_vpc 资源是网络的根。CIDR 块定义私有 IP 范围。/16 块大约提供 65,000 个地址,可进一步划分为多个子网。
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "main-vpc"
}
}公有子网与私有子网
子网会将 VPC 范围划分为更小的网段,并与某个可用区关联。
- 公有子网——可路由到互联网网关,适用于负载均衡器和堡垒主机。
- 私有子网——没有直接的互联网路由,适用于数据库和应用服务器。
创建公有子网
每个子网都需要自己的 CIDR(VPC 范围中的一段)和一个可用区。将 map_public_ip_on_launch 设置为 true 后,在此启动的实例会自动分配公有 IP。
resource "aws_subnet" "public" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
availability_zone = "us-east-1a"
map_public_ip_on_launch = true
tags = {
Name = "public-subnet"
}
}互联网网关
互联网网关(IGW)允许公有子网中的资源访问互联网。您可以将其直接附加到 VPC。
resource "aws_internet_gateway" "gw" {
vpc_id = aws_vpc.main.id
tags = {
Name = "main-igw"
}
}路由表
只有当路由表将 0.0.0.0/0 流量发送到互联网网关时,子网才真正成为公有子网。路由表会将目标 CIDR 映射到目标位置。
resource "aws_route_table" "public" {
vpc_id = aws_vpc.main.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.gw.id
}
}将路由关联到子网
路由表在与子网关联之前不会执行任何操作。aws_route_table_association 资源会将二者连接起来。
resource "aws_route_table_association" "public" {
subnet_id = aws_subnet.public.id
route_table_id = aws_route_table.public.id
}将安全组用作防火墙
安全组是围绕实例的有状态虚拟防火墙。有状态意味着,对于已允许的入站请求,其返回流量会自动获准,因此通常只需指定您关心的入站规则。
定义 Web 安全组
下面的配置允许来自任何位置的入站 HTTP 流量,并允许所有出站流量。在实际部署中,请尽可能缩小源 CIDR 范围。
resource "aws_security_group" "web" {
name = "web-sg"
vpc_id = aws_vpc.main.id
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}将实例接入网络
通过 subnet_id 和 vpc_security_group_ids 将子网和安全组附加到 EC2 实例。这会将服务器置于您的自定义网络中。
resource "aws_instance" "app" {
ami = "ami-0abcd1234"
instance_type = "t3.micro"
subnet_id = aws_subnet.public.id
vpc_security_group_ids = [aws_security_group.web.id]
}输出网络 ID
将关键 ID 暴露为输出值,以便其他模块或团队成员在应用后引用它们。
output "vpc_id" {
value = aws_vpc.main.id
}
output "public_subnet_id" {
value = aws_subnet.public.id
}快速检查
测试您对 VPC 路由的理解。
回顾:您的网络基础
您已在 Terraform 中构建了完整的网络:
- 带有 CIDR 范围的 aws_vpc。
- 分布在多个可用区中的子网,可以是公有子网或私有子网。
- 用于实现公有访问的互联网网关和路由表。
- 充当有状态防火墙的安全组。
这个网络是其他所有 AWS 资源接入的骨干。
常见问题解答
「配置 VPC 与网络」课时是免费的吗?
是的 — 「配置 VPC 与网络」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Terraform Infrastructure as Code 课程的其余内容,请升级到 CoddyKit PRO。 Terraform Infrastructure as Code 课程共包含 4 节课。
「配置 VPC 与网络」这节课中我会学到什么?
使用 Terraform 配置 AWS 虚拟私有云、子网和安全组,为基础设施提供安全、隔离的网络基础。 你通过在浏览器中直接运行的动手代码来练习 Terraform Infrastructure as Code,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Terraform Infrastructure as Code 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Terraform Infrastructure as Code 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「配置 VPC 与网络」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Terraform Infrastructure as Code 课中编写并运行代码吗?
能。每节 Terraform Infrastructure as Code 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- AWS 提供商配置
- 配置 EC2 实例
- 管理 S3 存储桶与 IAM
- 配置 VPC 与网络