[IaC] Terraform을 사용한 AWS 인프라 배포 자동화

2025. 1. 22. 17:10·Cloud

AWS에서 인프라를 구축하고 관리하는 것은 복잡할 수 있다.

Terraform을 사용하면 이러한 작업을 코드로 정의하고 자동화할 수 있어 효율적인 인프라 관리가 가능하다.

 

이 예제에서는 VPC, 서브넷, 인터넷 게이트웨이, 라우팅 테이블, 보안 그룹, EC2 인스턴스를 포함하는 인프라를 정의한다.

 


1. Terraform 설정

먼저, main.tf, output.tf, variable.tf 파일을 준비한다.

 

main.tf

main.tf 파일은 AWS 리소스를 정의하는 파일이다.

VPC, 서브넷, 인터넷 게이트웨이, 보안 그룹, EC2 인스턴스 등을 이 파일에 정의한다.

 

1.1 AWS Provider 설정

provider "aws" {
  region = "ap-northeast-2"
}
 

위 코드는 AWS 클라우드에 리소스를 배포할 리전을 ap-northeast-2로 설정한다.

 

1.2 VPC 생성

resource "aws_vpc" "main" {
  cidr_block = "192.169.0.0/16"

  tags = {
    Name = "main-vpc"
  }
}
 

이 코드는 192.169.0.0/16 CIDR 블록을 가진 VPC를 생성한다.

 

1.3 서브넷 생성

resource "aws_subnet" "main" {
  vpc_id                  = aws_vpc.main.id
  cidr_block              = "192.169.1.0/24"
  availability_zone       = "ap-northeast-2a"
  map_public_ip_on_launch = true

  tags = {
    Name = "main-subnet"
  }
}

 

서브넷은 VPC 내에서 IP 주소 범위를 정의한다.

map_public_ip_on_launch는 EC2 인스턴스가 생성될 때 자동으로 퍼블릭 IP를 할당하도록 설정한다.

 

1.4 인터넷 게이트웨이 생성

resource "aws_internet_gateway" "main" {
  vpc_id = aws_vpc.main.id

  tags = {
    Name = "main-igw"
  }
}​
 

인터넷 게이트웨이는 VPC와 인터넷을 연결하는 역할을 한다.

 

1.5 라우팅 테이블 생성

resource "aws_route_table" "main" {
  vpc_id = aws_vpc.main.id

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.main.id
  }

  tags = {
    Name = "main-route-table"
  }
}

라우팅 테이블은 VPC 내에서 트래픽을 어디로 보낼지를 정의한다.

0.0.0.0/0은 모든 트래픽을 인터넷 게이트웨이로 라우팅한다.

 

1.6 EC2 인스턴스 생성

resource "aws_instance" "web_medium" {
  ami           = "var.ami_id"
  instance_type = "var.instance_type"
  key_name      = "var.key_name"
  subnet_id     = aws_subnet.main.id
  vpc_security_group_ids = [aws_security_group.main.id]

  tags = {
    Name = "server"
  }
}
EC2 인스턴스를 생성하는 부분으로, ami_id, instance_type, key_name 등의 변수를 참조하여 인스턴스를 생성한다. 

output.tf

output.tf 파일은 Terraform으로 생성된 리소스의 출력을 정의한다.

이 파일에서는 EC2 인스턴스의 퍼블릭 IP를 출력한다.

output "instance_public_ip" {
  description = "Public IP of the EC2 instance"
  value       = aws_instance.web_medium.public_ip
}

variable.tf

variable.tf 파일은 Terraform에서 사용할 변수를 정의한다.

AWS 리전, EC2의 AMI ID, 인스턴스 유형, EC2 키 이름 등을 변수로 설정하여 배포 환경에 맞게 동적으로 리소스를 생성할 수 있다.

variable "aws_region" {
  description = "AWS region to deploy resources"
  default     = "ap-northeast-2"
}

variable "ami_id" {
  description = "AMI ID for the EC2 instance"
  default     = "ami-id"
}

variable "instance_type" {
  description = "Instance type for the EC2 instance"
  default     = "t2.medium"
}

variable "key_name" {
  description = "Key pair name for EC2 access"
  default     = "key_name"
}

2. Terraform 명령어 실행

 

리소스를 정의한 후에는 Terraform 명령어를 실행하여 AWS에 배포할 수 있다.

 

2.1 Terraform 초기화

먼저 Terraform을 초기화한다.

terraform init

 

2.2 계획 실행

Terraform이 실제로 리소스를 생성하기 전에 계획을 실행하여 변경 사항을 확인한다.

terraform plan

 

2.3 리소스 배포

계획이 이상 없다면 실제로 리소스를 배포한다.

terraform apply

terraform 시작하기 :

https://developer.hashicorp.com/terraform/tutorials/aws-get-started?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS

반응형

'Cloud' 카테고리의 다른 글

Terraform 개념  (0) 2025.12.08
코드형 인프라 (IaC)란?  (0) 2025.05.28
[Docker] Docker란 ?  (0) 2025.01.09
[k8s] EKS에서 Karpenter 사용하기 (2)  (1) 2025.01.05
[k8s] EKS에서 Karpenter 사용하기 (1)  (0) 2025.01.05
'Cloud' 카테고리의 다른 글
  • Terraform 개념
  • 코드형 인프라 (IaC)란?
  • [Docker] Docker란 ?
  • [k8s] EKS에서 Karpenter 사용하기 (2)
ssu_dev
ssu_dev
  • ssu_dev
    ssu
    ssu_dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (98)
      • Cloud (10)
      • HCI (2)
      • Algorithm (54)
      • Programming (13)
      • Computer Science (5)
      • System (6)
      • Trouble Shooting (6)
      • Work (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 인기 글

  • 태그

    K8s
    투포인터
    docker
    Deque
    sort
    EKS
    플로이드 워셜
    node scaling
    bfs
    Pod Scheduling
    priorityqueue
    Stack
    cs
    OS
    BOJ
    Java
    구현
    자료구조
    dfs
    Karpenter
  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
ssu_dev
[IaC] Terraform을 사용한 AWS 인프라 배포 자동화
상단으로

티스토리툴바