Reusable VPC Module#
This example demonstrates how to use the official AWS VPC Terraform module from the Terraform Registry to create a production-grade VPC.
Files#
| File | Description |
|---|---|
main.tf |
Usage of the terraform-aws-modules/vpc module with public/private subnets, NAT Gateway, and VPC endpoints |
Code#
main.tf#
terraform {
required_version = ">= 1.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "5.5.0"
name = "example-vpc"
cidr = "10.0.0.0/16"
azs = ["us-east-1a", "us-east-1b", "us-east-1c"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
enable_nat_gateway = true
enable_vpn_gateway = false
enable_dns_hostnames = true
enable_dns_support = true
enable_s3_endpoint = true
enable_dynamodb_endpoint = true
public_subnet_tags = {
Name = "example-public"
Tier = "public"
}
private_subnet_tags = {
Name = "example-private"
Tier = "private"
}
tags = {
Environment = "example"
Terraform = "true"
}
}
output "vpc_id" {
description = "VPC ID"
value = module.vpc.vpc_id
}
output "public_subnet_ids" {
description = "List of public subnet IDs"
value = module.vpc.public_subnets
}
output "private_subnet_ids" {
description = "List of private subnet IDs"
value = module.vpc.private_subnets
}
output "nat_public_ips" {
description = "List of NAT Gateway public IPs"
value = module.vpc.nat_public_ips
}Features#
- Public subnets across 3 Availability Zones
- Private subnets across 3 Availability Zones
- NAT Gateway for private subnet internet access
- VPC Endpoints for S3 and DynamoDB
- DNS support enabled
Usage#
terraform init
terraform plan
terraform apply