Terraform이란?
HashiCorp사에서 만든 코드형 인프라(IaC, Infrastructure as Code) 도구로, 수동으로 버튼을 클릭하는 대신 설정 파일을 작성하여 인프라를 자동 생성, 관리, 업데이트할 수 있게 해줌
기초 명령어
terraform fmt : 코드의 들여쓰기와 형식을 깔끔하게 자동 정렬
terraform validate : 코드에 문법적 오류가 없는지 검사
terraform plan : 생성·수정·삭제될 인프라 변경 사항을 미리 확인
terraform apply -auto-approve : 승인 절차 없이 즉시 인프라를 생성/반영
terraform destroy : 생성했던 모든 인프라 리소스를 삭제
실습 코드
https://registry.terraform.io/ 에서 Docs 확인 가능
예) AWS - https://registry.terraform.io/providers/hashicorp/aws/latest/docs
vpc.tf -> vpc 생성
vm.tf -> 인스턴스 생성
sg.tf -> 보안그룹 생성
keypair.tf -> 키페어 생성
provider.tf -> 프로바이더(aws) 지정
vpc.tf
resource "aws_vpc" "myvpc" {
cidr_block = "10.0.0.0/16"
}
resource "aws_internet_gateway" "myigw" {
vpc_id = aws_vpc.myvpc.id
}
resource "aws_subnet" "public_a" {
vpc_id = aws_vpc.myvpc.id
cidr_block = "10.0.0.0/24"
availability_zone = "ap-northeast-2a"
}
resource "aws_route_table" "public_rt" {
vpc_id = aws_vpc.myvpc.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.myigw.id
}
route {
cidr_block = "10.0.0.0/16"
gateway_id = "local"
}
}
resource "aws_route_table_association" "public_association" {
subnet_id = aws_subnet.public_a.id
route_table_id = aws_route_table.public_rt.id
}
vm.tf
resource "aws_instance" "my_instance" {
ami = "ami-0130d8d35bcd2d433"
instance_type = "t2.micro"
key_name = aws_key_pair.mykey.key_name
subnet_id = aws_subnet.public_a.id
vpc_security_group_ids = [aws_security_group.my_sg.id]
associate_public_ip_address = true
tags = {
Name = "instance-yji"
}
}
sg.tf
resource "aws_security_group" "my_sg" {
name = "my_sg"
vpc_id = aws_vpc.myvpc.id
}
resource "aws_vpc_security_group_ingress_rule" "allow_ssh" {
security_group_id = aws_security_group.my_sg.id
cidr_ipv4 = "0.0.0.0/0"
from_port = 22
ip_protocol = "tcp"
to_port = 22
}
resource "aws_vpc_security_group_egress_rule" "allow_all_traffic_ipv4" {
security_group_id = aws_security_group.my_sg.id
cidr_ipv4 = "0.0.0.0/0"
ip_protocol = "-1" # semantically equivalent to all ports
}
keypair.tf
resource "aws_key_pair" "mykey" {
key_name = "mykey-yji"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCfhgwGm0Mk4Ip0+ielnJzBDPsOknw1i3UqvbkVAaLnhzcr9jjKt0TtpYIsZ+ONMVhJB7zo7H7BY/42H1oNPd/DXbgSVrdlY9wIYZ78OWyDjiYEhGVh4nVdGasmXE3iQ17tCgDOfGxac7GujbPs6Su6Ww21n3aDMH8vRRHxFynkgElAMXvTiRe4NsEYMwb4+daljm6qBpOR8IoyAtcb/EjV1egStF6VjObve+3j8BwrYh/KdMmmTCQnPN5j2+4UO6JuulpPNeH8ugaWBLYU0rI/m3qRef0oAYl2cfHRNPYeTWui2h/IHwMRyzZwng0G4bIsFQICMItQlM5sdCzW12K9txxP+KyvpFsGEIafD/wXFae3Nmk8YLVDUOMV2S11WTjBf1RKBJVKNXxxoJYxFt5D1OiwGB+/abbi3TWcWRRFUIhHvkETiHjvtpJwnE6Hy+ic1x+IAEYJsYahUQA7tg+PuRn+C0N8Jpo5BISauqsVio2LigrKTixjc2EhaUUlGd0= vagrant@localhost.localdomain"
}
provider.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "6.31.0"
}
}
}
provider "aws" {
# Configuration options
}
왜 사용하는지 잘 알겠는데 문법이 어렵고 Docs를 봐도 필요한 모듈을 사용하는게 어려운 것 같다.
잘 습득하면 편하게 인프라를 구성할 수 있을 것 같다.
'SeSac) DevOps' 카테고리의 다른 글
| [3주차 - 리눅스 기초 및 관리] 1/8 실습문제 풀이 (0) | 2026.01.08 |
|---|