AWS 네트워크 인프라 정리(feat Terraform)

김장훈·2024년 6월 13일
0

간단 네트워크

용어정리

CIDR(사이더)

  • 클래스가 없는 도메인간 라우팅 기법
  • 이해하기 쉽고 효율적인 IP 할당 기법

표기방법

  • IP주소/비트
    • 10.0.0.0/24
    • 10.0.0 ~ 에서 8비트(32 - 24) 만큼의 IP 대역을 뜻함
    • 10.0.0.0 ~ 10.0.0.255
  • 계산방법

사용하는 이유

  • 인프라 관련 디버깅은 물리적 개념으로 접근해야하므로 문제 발생시 IP 기반으로 확인해야하는 경우가 있음
  • IP 대역대에 따라서 인프라 설계 등을 할 수 있음
    • 10.0.1.0/24 는 DB, 10.0.0.0/24 는 NODE 등

AZ(가용영역)

  • 물리적으로 존재하는 데이터 센터
  • 물리적으로 구분되어있으므로 서로 다른 AZ에 있는 경우 네트워크 비용이 발생한다.

VPC

  • Virtual Private Cloud
  • 논리적으로 격리된 가상 네트워크

Subnet

  • VPC 사용하는 IP 주소 범위
  • 논리적으로 구분되는 공간, 영역
  • public, private 으로 구분됨

Internet-gateway

  • VPC가 외부 인터넷과 통신할 수 있게 해주는 요소

Routing Table

  • 서브넷 혹은 네트워크 트래픽이 전송되는 위치를 결정하는 규칙이 저장된 테이블

Nat-gateway

  • private subnet 내부에 있는 요소들이 외부 서비스와 통신할 수 있도록 지원하는 네트워크 주소 변환 시스템

참고

IaC 소개

IaC 정의

  • Infrastructure as Code
  • 코드로서 인프라를 관리하겠다.

IaC 를 사용하는 이유?

  • 위에서 설명한 개념들은 모두 논리적, 추상적 개념들.
  • 즉 이를 하나하나 이해하고 적용하려면 휴먼 리소스가 매우매우 많이 듬(= 실수 가능성 높아짐)
  • 특히 클라우드의 등장으로 인해 사용하고 관리해야하는 인프라 소스가 매우 많아짐, 이를 사람이 일일히 관리하는것은 매우 힘든 사항 중 하나

vpc 를 만들고 subnet 을 만들어보자

using console

  • 위 콘솔창에서 차례 차례 메뉴를 찾아가며 클릭하고 옵션 보고 해야한다.
  • 이를 code 로 바꿔보면

using terraform

resource "aws_vpc" "this" {
  cidr_block = "10.0.0.0/16"
  tags = merge(local.tags, {
    Name = "main-vpc"
  })
}

resource "aws_subnet" "public_subnets" {
  count                   = length(var.availability_zones)
  vpc_id                  = aws_vpc.this.id
  map_public_ip_on_launch = true

  cidr_block        = cidrsubnet(aws_vpc.this.cidr_block, 8, count.index) // 10.0.x.0/24
  availability_zone = element(var.availability_zones, count.index)

  tags = merge(local.tags,
    { Name : "public-subnet-az-${element(var.availability_zones, count.index)}" }
  )
}
  • 이런식으로 하여 한눈에 알아볼 수 있다.

장점

  • 코드로 관리되는 모든 장점을 갖고 있다
    • 히스토리 파악, 컨텍스트 파악 등

단점

  • 사용하려는 IaC 의 syntax 등을 알아야한다
    • 러닝커브가 존재한다.
  • 코드로 관리되는 만큼 기타 안전장치 등이 필요로 하다.
    • 코드로 관리 된다 = 관리하기 쉽다 = 쉽게 삭제가 가능하다
    • 이를 관리하기 위한 별도의 rule 등 관리포인트가 증가

결론

  • 인프라 관련 작업은 가끔 하다보니 그때 당시의 컨텍스트 등을 잊어먹기 쉽다. 또한 만들고 지우고 하는 등의 관리하는 것도 콘솔에서 일일히 하는 것은 쉽지 않다.
  • 그렇기에 인프라를 코드로서, 한번에 관리 할 수 있다는 포인트는 개발자 입장에서 매우 매력적인 요소라고 생각한다.
  • 물론 코드이기에, 인프라를 다 날려버릴 수도 있지만 다르게 생각하면 한번에 만들어낼 수도 있다는 의미이기도 하다.
profile
읽기 좋은 code란 무엇인가 고민하는 백엔드 개발자 입니다.

1개의 댓글

comment-user-thumbnail
2024년 6월 28일

laC 위에 언급하신 대로 러닝 커브laC 위에 언급하신 대로 러닝 커브가 있지만 인프라 관리하기 편리한 기술인 것 같습니다. 잘 읽었습니다.가 있지만 인프라 관리하기 편리한 기술인 것 같습니다. 잘 읽었습니다.

답글 달기