Terraform으로 AWS EC2 인스턴스 및 보안 그룹 생성 및 관리
Terraform을 사용하여 AWS 클라우드에 기본적인 EC2 인스턴스와 보안 그룹을 프로비저닝하고 관리하는 방법을 안내합니다. IaC(Infrastructure as Code)의 기초를 다지는 데 유용합니다.
Terraform으로 AWS EC2 인스턴스 및 보안 그룹 생성 및 관리
이 레시피는 Terraform을 사용하여 AWS에 EC2 인스턴스와 보안 그룹을 생성하고 관리하는 방법을 보여줍니다. 실습 환경을 빠르게 구축하고 IaC의 기본 개념을 익히는 데 활용할 수 있습니다.
1. Terraform 설정 및 AWS Provider 구성
main.tf 파일을 생성하고 다음 내용을 작성합니다.
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "ap-northeast-2" # 서울 리전
}
2. VPC, 서브넷, 보안 그룹 정의
기본적인 VPC, 퍼블릭 서브넷, 그리고 SSH 및 HTTP 트래픽을 허용하는 보안 그룹을 정의합니다.
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "my-terraform-vpc"
}
}
resource "aws_subnet" "public" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
availability_zone = "ap-northeast-2a"
map_public_ip_on_launch = true
tags = {
Name = "my-terraform-public-subnet"
}
}
resource "aws_security_group" "instance_sg" {
name = "allow_ssh_http"
description = "Allow SSH and HTTP inbound traffic"
vpc_id = aws_vpc.main.id
ingress {
description = "SSH from anywhere"
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
description = "HTTP from anywhere"
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "instance-security-group"
}
}
3. EC2 인스턴스 정의
Amazon Linux 2 AMI를 사용하여 EC2 인스턴스를 생성합니다. instance_type은 t2.micro로 설정합니다.
resource "aws_instance" "web_server" {
ami = "ami-0c94857c736823147" # 최신 Amazon Linux 2 AMI ID (ap-northeast-2 기준, 변경될 수 있음)
instance_type = "t2.micro"
subnet_id = aws_subnet.public.id
vpc_security_group_ids = [aws_security_group.instance_sg.id]
key_name = "my-aws-key" # 미리 생성된 EC2 키 페어 이름
tags = {
Name = "my-web-server"
}
}
참고: ami ID는 AWS 리전 및 시점에 따라 달라질 수 있습니다. AWS 콘솔에서 최신 AMI ID를 확인하여 업데이트하세요. key_name은 미리 생성해 둔 EC2 키 페어 이름으로 바꿔야 합니다.
4. Terraform 실행
터미널에서 다음 명령어를 순서대로 실행합니다.
- Terraform 초기화:
terraform init - 실행 계획 확인:
terraform plan - 인프라 프로비저닝:
terraform applyapply실행 시yes를 입력하여 생성을 확인합니다.
5. 프로비저닝된 리소스 확인 및 접속
AWS Management Console에서 EC2 대시보드로 이동하여 생성된 인스턴스와 보안 그룹을 확인할 수 있습니다. 인스턴스의 퍼블릭 IP 주소를 복사하여 SSH로 접속할 수 있습니다. (예: ssh -i my-aws-key.pem ec2-user@<인스턴스_퍼블릭_IP>).
6. 리소스 삭제
더 이상 필요하지 않은 리소스를 삭제하려면 다음 명령어를 실행합니다.
terraform destroy
destroy 실행 시 yes를 입력하여 삭제를 확인합니다.
추가 팁: Terraform 상태 파일(terraform.tfstate)을 원격 저장소(S3 등)에 저장하여 팀원 간의 협업을 강화하고 상태 관리를 효율적으로 할 수 있습니다.