AWS

AWS VPC 리소스

devfinger 2024. 10. 22. 19:43

VPC

  • 서브넷
  • 라우팅 테이블
  • 인터넷 게이트웨이
  • 송신 전용 인터넷 게이트웨이
  • 캐리어 게이트웨이
  • DHCP 옵션 세트
  • 탄력적 IP
  • 관리형 접두사 목록
  • 엔드포인트
  • 엔드포인트 서비스
  • NAT 게이트웨이
  • 피어링 연결

 

1. VPC (Virtual Private Cloud)

필수 항목:

  • cidr_block: VPC에 할당할 CIDR 블록 (필수)

선택 항목:

  • enable_dns_support: DNS 해석 기능 활성화 (옵션)
  • enable_dns_hostnames: DNS 호스트 이름 활성화 (옵션)
  • tags: 태그 추가 (옵션)

리소스 이름: aws_vpc

resource "aws_subnet" "public_subnet" {
  vpc_id            = aws_vpc.main_vpc.id  # 필수: 연결된 VPC ID
  cidr_block        = "10.0.1.0/24"  # 필수: 서브넷에 할당할 CIDR 블록
  availability_zone = "us-west-2a"  # 옵션: 가용 영역 설정
  map_public_ip_on_launch = true  # 옵션: 퍼블릭 IP 자동 할당

  tags = {
    Name = "PublicSubnet"
  }
}

 

 

2. 서브넷 (Subnet)

필수 항목:

  • vpc_id: VPC ID (필수)
  • cidr_block: 서브넷에 할당할 CIDR 블록 (필수)

선택 항목:

  • availability_zone: 서브넷이 위치할 가용 영역 (옵션)
  • map_public_ip_on_launch: 퍼블릭 IP 자동 할당 (옵션)

리소스 이름: aws_subnet

resource "aws_subnet" "public_subnet" {
  vpc_id            = aws_vpc.main_vpc.id  # 필수: 연결된 VPC ID
  cidr_block        = "10.0.1.0/24"  # 필수: 서브넷에 할당할 CIDR 블록
  availability_zone = "us-west-2a"  # 옵션: 가용 영역 설정
  map_public_ip_on_launch = true  # 옵션: 퍼블릭 IP 자동 할당

  tags = {
    Name = "PublicSubnet"
  }
}

 

3. 라우팅 테이블 (Route Table)

필수 항목:

  • vpc_id: VPC ID (필수)

선택 항목:

  • route: 라우트 설정 (옵션)
  • tags: 태그 추가 (옵션)

리소스 이름: aws_route_table

resource "aws_route_table" "public_rt" {
  vpc_id = aws_vpc.main_vpc.id  # 필수: 연결된 VPC ID

  # 옵션: 라우트 설정, 0.0.0.0/0 트래픽을 인터넷 게이트웨이로 전달
  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.igw.id
  }

  tags = {
    Name = "PublicRouteTable"
  }
}

 

4. 인터넷 게이트웨이 (Internet Gateway)

필수 항목:

  • vpc_id: VPC ID (필수)

리소스 이름: aws_internet_gateway

resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.main_vpc.id  # 필수: 연결된 VPC ID

  tags = {
    Name = "InternetGateway"
  }
}

 

5. 송신 전용 인터넷 게이트웨이 (Egress Only Internet Gateway)

필수 항목:

  • vpc_id: VPC ID (필수)

리소스 이름: aws_egress_only_internet_gateway

resource "aws_egress_only_internet_gateway" "egw" {
  vpc_id = aws_vpc.main_vpc.id  # 필수: 연결된 VPC ID

  tags = {
    Name = "EgressOnlyGateway"
  }
}

 

6. 캐리어 게이트웨이 (Carrier Gateway)

필수 항목:

  • vpc_id: VPC ID (필수)

리소스 이름: aws_ec2_carrier_gateway

resource "aws_ec2_carrier_gateway" "cgw" {
  vpc_id = aws_vpc.main_vpc.id  # 필수: 연결된 VPC ID

  tags = {
    Name = "CarrierGateway"
  }
}

 

7. DHCP 옵션 세트 (DHCP Option Set)

필수 항목:

  • domain_name_servers: DNS 서버 목록 (필수)

선택 항목:

  • domain_name: 도메인 이름 설정 (옵션)

리소스 이름: aws_vpc_dhcp_options

resource "aws_vpc_dhcp_options" "dhcp_options" {
  domain_name_servers = ["8.8.8.8", "8.8.4.4"]  # 필수: DNS 서버 목록

  # 옵션: 도메인 이름 설정
  domain_name = "example.com"

  tags = {
    Name = "DHCPOptionsSet"
  }
}

 

8. 탄력적 IP (Elastic IP)

필수 항목:

  • 없음 (탄력적 IP는 필수 항목이 없음)

리소스 이름: aws_eip

resource "aws_eip" "elastic_ip" {
  vpc = true  # VPC에 연결된 탄력적 IP

  tags = {
    Name = "ElasticIP"
  }
}

 

9. 관리형 접두사 목록 (Managed Prefix List)

필수 항목:

  • address_family: IPv4 또는 IPv6 (필수)
  • max_entries: 최대 엔트리 수 (필수)

리소스 이름: aws_ec2_managed_prefix_list

resource "aws_ec2_managed_prefix_list" "prefix_list" {
  address_family = "IPv4"  # 필수: 주소 패밀리 (IPv4 또는 IPv6)
  max_entries    = 5  # 필수: 최대 엔트리 수

  entry {
    cidr        = "10.0.0.0/16"
    description = "Main VPC range"
  }

  tags = {
    Name = "ManagedPrefixList"
  }
}

 

10. VPC 엔드포인트 (VPC Endpoint)

필수 항목:

  • vpc_id: VPC ID (필수)
  • service_name: AWS 서비스 이름 (필수)

리소스 이름: aws_vpc_endpoint

resource "aws_vpc_endpoint" "s3_endpoint" {
  vpc_id       = aws_vpc.main_vpc.id  # 필수: 연결된 VPC ID
  service_name = "com.amazonaws.us-west-2.s3"  # 필수: AWS 서비스 이름 (S3)

  route_table_ids = [aws_route_table.public_rt.id]  # 라우팅 테이블 설정

  tags = {
    Name = "S3Endpoint"
  }
}

 

11. 엔드포인트 서비스 (VPC Endpoint Service)

필수 항목:

  • acceptance_required: 수락 필요 여부 (필수)
  • network_load_balancer_arns: NLB ARN 목록 (필수)

리소스 이름: aws_vpc_endpoint_service

resource "aws_vpc_endpoint_service" "endpoint_service" {
  acceptance_required = true  # 필수: 수락 필요 여부
  network_load_balancer_arns = [aws_lb.nlb.arn]  # 필수: NLB ARN 목록

  tags = {
    Name = "EndpointService"
  }
}

 

12. NAT 게이트웨이 (NAT Gateway)

필수 항목:

  • allocation_id: 탄력적 IP ID (필수)
  • subnet_id: 서브넷 ID (필수)

리소스 이름: aws_nat_gateway

resource "aws_nat_gateway" "nat_gw" {
  allocation_id = aws_eip.elastic_ip.id  # 필수: 연결된 탄력적 IP ID
  subnet_id     = aws_subnet.public_subnet.id  # 필수: 연결된 서브넷 ID

  tags = {
    Name = "NatGateway"
  }
}

 

13. 피어링 연결 (VPC Peering Connection)

필수 항목:

  • vpc_id: 요청자의 VPC ID (필수)
  • peer_vpc_id: 상대방의 VPC ID (필수)

리소스 이름: aws_vpc_peering_connection

resource "aws_vpc_peering_connection" "peer_connection" {
  vpc_id       = aws_vpc.main_vpc.id  # 필수: 요청자의 VPC ID
  peer_vpc_id  = "vpc-12345678"  # 필수: 상대방의 VPC ID
  peer_region  = "us-west-2"  # 피어링할 VPC의 리전 (선택적)

  tags = {
    Name