EFS를 통한 네트워크 파일 시스템 구성

Chori·2024년 12월 31일
0
post-thumbnail

스스로 구축하는 AWS 클라우드 인프라 - 기본편을 수강하며 AWS 인프라를 Terraform으로 작성한 내용입니다.


Security group 생성

  • EC2 인스턴스와 EFS 사이에 트래픽이 이동할 수 있도록 Security group이 있어야 함
  • EC2 인스턴스와 EFS의 마운트 타겟이 파일 시스템과 관련된 프로토콜 및 포트에 대해 통신을 허용할 수 있도록 하는 규칙이 있어야 함
  • security_group.tf 파일에 아래 내용을 추가
# Security group for EFS
resource "aws_security_group" "efs_sg" {
  name = "efs-sg"
  description = "Security group for efs"
  vpc_id = aws_vpc.main.id

  tags = {
    Name = "efs-sg"
  }
}

# Inbound rule allowing NFS
resource "aws_vpc_security_group_ingress_rule" "allow_nfs" {
  security_group_id = aws_security_group.efs_sg.id
  # Fill in below value with security group whose instance will connect to EFS
  referenced_security_group_id = aws_security_group.public_ec2_sg.id
  from_port = 2049
  ip_protocol = "tcp"
  to_port = 2049
}

# Outbound rule allowing all traffic for EFS
resource "aws_vpc_security_group_egress_rule" "allow_all_outbound_traffic_for_nfs" {
  security_group_id = aws_security_group.efs_sg.id
  cidr_ipv4 = "0.0.0.0/0"
  ip_protocol = "-1"
}
  • 특정 보안 그룹에서 발생하는 트래픽을 허용하기 위해 referenced_security_group_id 지정
  • 트래픽 유형은 NFS2049 포트 사용
  • 종합하면 지정한 보안 그룹에서 나오는 NFS 트래픽을 EFS의 마운트 타겟이 허용하겠다는 의미

EFS 생성

  • efs.tf 파일을 만들고 아래와 같이 작성
# EFS
resource "aws_efs_file_system" "main" {
  performance_mode = "generalPurpose"
  throughput_mode = "bursting"

  lifecycle_policy {
    transition_to_ia = "AFTER_30_DAYS"
  }

  lifecycle_policy {
    transition_to_primary_storage_class = "AFTER_1_ACCESS"
  }

  tags = {
    Name = "vpc-efs-${var.vpc_name}"
  }
}

# EFS backup policy
resource "aws_efs_backup_policy" "efs_backup_policy" {
  file_system_id = aws_efs_file_system.main.id

  backup_policy {
    status = "DISABLED"
  }
}

# EFS mount target
resource "aws_efs_mount_target" "public_subnet" {
  count = length(var.cidr_numeral_public)
  file_system_id = aws_efs_file_system.main.id
  subnet_id = element(aws_subnet.public.*.id, count.index)
  security_groups = [ aws_security_group.efs_sg.id ]
}
  • EFS 파일 시스템이 마운트될 수 있도록 aws_efs_mount_target 리소스 사용

EFS를 하나의 EC2 인스턴스에 마운트

  • EC2 인스턴스에 접속해서 아래 명령어를 입력하면 파일 시스템의 디스크 공간을 확인할 수 있음
df -f

  • 아직 EFS가 마운트되지 않았음
  • EFS를 마운트하려면 NFS 클라이언트 또는 EFS 마운트 헬퍼를 사용
    • 본 예제에서는 EFS 마운트 헬퍼를 이용
  • 아래 명령어로 EFS 마운트 헬퍼 설치
sudo yum install amazon-efs-utils -y
  • /var/www/html/efs를 마운트 포인트로 설정
cd 	/var/www/html
mkdir efs
  • AWS 콘솔에서 EFS 리소스를 찾고 연결 클릭

  • EFS 마운트 헬퍼를 사용하기 위한 명령어를 복사

  • EC2 인스턴스에서 명령어를 붙여넣고 실행
sudo mount -t efs -o tls fs-071eafc94bc1e05df:/ efs
  • 다시 파일 시스템의 디스크 공간을 확인하면 마운트 포인트로 설정한 경로로 EFS가 마운트가 되어 있는 것을 확인할 수 있음

  • 이전 예제에서 S3 버켓의 정적 웹사이트 호스팅에 사용했던 파일을 EFS로 다운로드
cd efs
sudo wget https://s3-web-hosting-chori.s3.us-east-1.amazonaws.com/car.jpg

  • 웹 브라우저에서 ip 주소/efs/mycar.html로 접속하면 웹페이지가 표시됨


EFS를 또 다른 EC2 인스턴스에 마운트

  • EC2 인스턴스에 접속하여 파일 시스템의 디스크 공간을 확인

  • EFS 마운트 헬퍼 설치 후 마운트 포인트 설정
sudo yum install amazon-efs-utils -y
cd 	/var/www/html
mkdir efs
  • 마운트 헬퍼를 사용하기 위한 명령어 입력
sudo mount -t efs -o tls fs-071eafc94bc1e05df:/ efs
  • efs 디렉토리로 이동하면 다른 EC2 인스턴스에서 다운로드했던 파일을 확인할 수 있음
cd efs
ls -al

  • 마찬가지로 웹 브라우저에서 ip 주소/efs/mycar.html로 접속하면 웹페이지가 표시됨


EFS에 있는 파일 수정

  • 하나의 EC2 인스턴스에서 mycar.html 파일을 수정
sudo vi mycar.html

  • 웹 브라우저로 접속하면 웹페이지가 수정되어 있음

  • 또 다른 EC2 인스턴스의 ip 주소로 접속해도 수정된 웹페이지가 반영되어 있음

  • 즉, 네트워크 파일 시스템이 두 개의 EC2 인스턴스에 동시에 연결되어 있다는 것을 확인할 수 있음
profile
전부인 것처럼, 전부가 아닌 것처럼

0개의 댓글