0Pricing
Terraform Infrastructure as Code · 课时

配置 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. AWS 提供商配置
  2. 配置 EC2 实例
  3. 管理 S3 存储桶与 IAM
  4. 配置 VPC 与网络
← 返回 Terraform Infrastructure as Code