본문 바로가기
개발 공부/AWS

[AWS] SAA 공부 (4) EFS (Elastic File System)

by sngynhy 2025. 3. 21.

EFS (Elastic File System)

EC2, Lambda 등 여러 인스턴스에서 공유 가능한 파일 스토리지 서버

즉, 여러 서버가 같은 파일 시스템을 동시에 접근할 수 있도록 해주는 관리형 네트워크 파일 시스템(NFS, NFSv4 지원)

  • 완전 관리형
    • 스토리지 관리, 확장, 백업 등을 AWS가 자동으로 관리
  • 무제한 확장성
    • 스토리지 크기를 미리 정할 필요가 없음 > 사용량에 따라 비용 지불
    • 저장한 파일 크기에 따라 자동으로 확장/축소
  • 다중 접근 (Multi-AZ 지원)
    • 동시에 같은 파일 시스템에 접근
    • 다중 가용 영역(AZ)에 걸쳐 데이터를 복제 > 뛰어난 가용성과 내구성
  • 쓰기 후 읽기 일관성 > 한 인스턴스에서 데이터를 업데이트 하면 다른 인스턴스에서 바로 읽기가 가능하다는 의미
  • Linux에서만 사용 가능
  • 보안 그룹 및 NFS 접근 권한 설정 필요
  • Private Service > AWS 외부에서 접속 불가능
    • AWS 외부에서 접속하기 위해서는 VPN 혹은 Direct Connect 등 별도로 VPC와 연결 필요
    • 각 AZ에 Mount Target을 두고 각각의 AZ에서 해당 Mount Target으로 접근

EFS Performance Mode (퍼포먼스 모드)

  • General Purpose (default) : 범용 모드
    • 지연 시간에 민감한 경우 사용
    • ex) 웹 서버 등
  • Max I/O: 처리량 최대화
    • 매우 높은 IOPS가 필요한 경우 사용
    • ex) 빅데이터, 미디어 처리 등

EFS Throughput Mode (처리량 모드)

  • Bursting: 낮은 처리량일 때 크레딧을 모아서 높은 처리량일 때 사용
  • Provisioned: 미리 지정한 만큼의 처리량을 미리 확보해두고 사용
  • Elastic: 워크로드에 따라 처리량을 자동으로 조절

EFS Storage Classs

EFS 내에서 데이터를 접근 빈도에 따라 최적화된 비용으로 저장할 수 있는 옵션

스토리지 계층 설정, 파일을 다른 계층으로 옮길 수 있음

  • Standard: 자주 액세스하는 파일을 위한 계층
    • 3개 이상의 가용 영역에 보관
  • Standard-IA: 액세스 빈도가 낮을 때 사용 > 파일 검색 시 비용이 발생
    • 3개 이상의 가용 영역에 보관
  • Archive: 거의 액세스하지 않는 경우 사용
  • One Zone, One Zone-IA: 액세스 빈도가 낮은 스토리지 계층과 호환
    • 한 개의 가용 영역에 보관, 저렴한 비용
    • 저장된 가용 영역의 상황에 영향을 받음 > 중요하지 않는 데이터 저장

수명 주기 정책

스토리지 계층 간에 파일을 자동으로 이동하기 위해 수명 주기 정책을 구현

  • 설정한 기간 동안 데이터에 접근하지 않으면, 자동으로 IA 클래스로 전환 > 비용 최적화
  • 예를 들어, 스탠다드 계층에 있는 파일 중 60일 동안 액세스 하지 않은 파일이 있다면 IA 계층으로 옮기도록 정책 설정

가용성과 내구성 측면에서 볼 때, 다중 AZ 설정이 있는 경우 스탠다드 사용

 

📌 EBS와 EFS 차이점
EBS - 단일 인스턴스에 연결, 미리 크기 고정, 블록 스토리지
EFS - 다중 인스턴스에서 동시에 접근 가능, 자동 확장/축소, NFS

 

EFS 실습 (EFS를 활용한 스토리지 공유 웹서버 만들기)

3개의 EC2 인스턴스가 한 개의 EFS 안의 있는 소스코드 공유 > 소스코드 변경 시 연결되어 있는 모든 인스턴스에 적용됨

 

1. EFS를 위한 보안 그룹 생성

 

EFS 생성하면 아래와 같이 각 AZ에 마운트 타겟 생성 > 마운트 타겟으로 접근하여 EFS 사용

 

마운트 타겟 생성이 완료되면 미리 생성한 보안 그룹으로 설정해줌

EFS 사용 준비 완료

 

2. EC2 인스턴스 3개 프로비전

  • 유저 데이터 활용 > 유저 데이터에 아래 코드 삽입 (EFS_ID, AZ_CODE 삽입 주의)
  • 생성한 EFS 마운트
  • 웹 서버 생성 및 실행
    •  
#cloud-config
package_upgrade: true
packages:
  - nfs-utils
  - httpd
runcmd:
  - |
    TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
    echo "${TOKEN}"
  - |
    AZ=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" "http://169.254.169.254/latest/meta-data/placement/availability-zone")
    echo "$AZ.[EFS_ID].efs.[AZ_CODE].amazonaws.com:/ /var/www/html/efs-mount-point nfs4 defaults" >> /etc/fstab
  - mkdir /var/www/html/efs-mount-point
  - mount -a
  - touch /var/www/html/efs-mount-point/test.html
  - service httpd start
  - chkconfig httpd on
  - mkdir /var/www/html/efs-mount-point/sampledir
  - chown ec2-user /var/www/html/efs-mount-point/sampledir
  - chmod -R o+r /var/www/html/efs-mount-point/sampledir

 

인스턴스 생성 완료

 

 

3. 각 웹서버에서 스토리지 공유하는 것 확인

소스코드 수정

 

현재 생성한 3개의 인스턴스는 한 개의 EFS와 연결되어 있기 때문에 다른 인스턴스도 모두 업데이트 됨

 

  1.