반응형
테라폼의 핵심 개념
테라폼을 공부하면서 가장 중요하다고 느낀 개념들을 정리해보았다:
1. 기본 용어
- 프로비저닝(Provisioning): 인프라를 생성하고 설정하는 과정
- 프로바이더(Provider): AWS, GCP 등 인프라를 제공하는 서비스
- 리소스(Resource): 실제로 생성되는 인프라 구성 요소 (EC2, RDS 등)
- HCL(Hashicorp Configuration Language): 테라폼의 설정 언어
2. 테라폼의 핵심 작동 방식
테라폼이 작동하는 방식을 이해하는 데 시간이 좀 걸렸다. 가장 중요한 점은:
graph LR
A[정의된 상태 .tf] --> B[Plan 단계
B --> C[실제 상태 확인]
C --> D[Apply 단계]
D --> E[최종 상태]
- Plan: 이상적 상태와 실제 상태의 차이를 확인
- Apply: 실제로 인프라를 변경하는 단계
- State: terraform.tfstate 파일에 현재 상태 저장
실제 구현에서 배운 점
1. 프로젝트 구조
web_infra/
├── provider.tf # AWS 프로바이더 설정
└── web_infra.tf # 실제 인프라 정의
2. 리소스 정의 패턴
리소스를 정의할 때 중요한 패턴을 발견했다:
resource "aws_instance" "web" {
ami = "ami-xxxxx"
instance_type = "t2.micro"
key_name = aws_key_pair.web_admin.key_name # 다른 리소스 참조
}
- 리소스 타입은 항상 프로바이더_리소스종류 형태
- 리소스 간 참조는 자동으로 의존성 그래프 생성
- 속성값 중 일부는 생성 후에만 알 수 있음 (known after apply)
3. 의존성 관리
테라폼의 가장 인상적인 부분은 의존성 관리다:
- 리소스 간 참조를 통한 자동 의존성 파악
- 그래프 기반 리소스 생성 순서 결정
- 명시적인 의존성 선언 가능
장단점 분석
장점
- 인프라의 상태를 코드로 명확하게 관리
- 버전 관리 시스템 활용 가능
- 재사용과 자동화가 용이
- 팀 협업이 용이 (코드 리뷰 등)
단점
- 학습 곡선이 있음
- 웹 콘솔보다 초기 설정이 복잡
- 레퍼런스 문서를 자주 확인해야 함
앞으로 더 학습할 부분
- 모듈화: 재사용 가능한 인프라 컴포넌트 작성 방법
- 상태 관리: 원격 상태 관리와 팀 협업 방식
- CI/CD 통합: 테라폼을 파이프라인에 통합하는 방법
마치며
테라폼은 처음에는 복잡해 보였지만, 코드로 인프라를 관리하는 것의 이점을 확실히 느낄 수 있었다. 특히 많은 리소스를 관리해야 할 때 그 진가가 발휘될 것 같다. 앞으로는 모듈화와 CI/CD 통합에 대해 더 깊이 공부해보고 싶다.
resource "aws_key_pair" "web_admin" {
key_name = "web_admin"
public_key = file("${pathexpand("~/.ssh/web_admin.pub")}")
}
resource "aws_security_group" "ssh" {
name = "allow_ssh_from_all"
description = "Allow SSH port from all"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
data "aws_security_group" "default" {
name = "default"
}
resource "aws_instance" "web" {
ami = "ami-0a93a08544874b3b7" # amzn2-ami-hvm-2.0.20200207.1-x86_64-gp2
instance_type = "t2.micro"
key_name = aws_key_pair.web_admin.key_name
vpc_security_group_ids = [
aws_security_group.ssh.id,
data.aws_security_group.default.id
]
}
resource "aws_db_instance" "web_db" {
allocated_storage = 20
engine = "mysql"
engine_version = "8.0.34"
instance_class = "db.t3.micro"
username = "admin"
password = "00000000"
skip_final_snapshot = true
}
최종 provider제외 web_infra.tf파일 코드(윈도우 기준으로 작성)
반응형
'AWS' 카테고리의 다른 글
| AWS EBS & EFS (0) | 2025.02.18 |
|---|---|
| EBS & EC2 인스턴스 스토어 정리 (0) | 2025.02.18 |
| #7 ENI, EIP, Hibernate AWS solution (1) | 2024.12.31 |
| #6 EC2 비용 및 spot instance, AWS solution (0) | 2024.12.24 |
| #5 EC2 firewall, AWS solution (0) | 2024.12.24 |