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"
}
}
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 시작하기 :
'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 |