AWS EFS(Elastic File System)

Siyun·2025년 2월 8일

AWS

목록 보기
7/37

EFS - Elastic File System

  • 관리형 NFS(네트워크 파일 시스템)
  • 많은 EC2 인스턴스(서로 다른 AZ더라도)에 마운트 될 수 있음
  • 가용성이 높고 확장성이 뛰어나고 비쌈(gp2 EBS볼륨의 약 3배)
  • 사용하는 데이터 GB에 따라 비용을 지불하므로 미리 용량을 프로비저닝 할 필요가 없음.
  • 사용사례: 콘텐츠 관리, 웹 서빙, 데이터 공유, Wordpress
  • 내부적으로 NFS 프로토콜 사용. EFS에 대한 엑세스를 제어하려면 보안그룹을 설정해야 함.
  • 다양한 성능 및 스토리지 클래스가 있음.
  • EFS 스케일은 동시 NFS 클라이언트 수천 개와 10GB이상의 처리량 확보가능
  • PB(Petabyte) 규모의 네트워크 파일 시스템으로 자동 확장 가능
  • 리눅스 기반 AMI와만 호환됨
  • KMS를 사용해 EFS드라이브에서 미사용 영역 암호화를 활성화 할 수 있음

NFS(Network File System)
: 네트워크를 통해 여러 서버와 클라이언트가 파일을 공유할 수 있도록 해주는 분산 파일 시스템. 주로 리눅스/유닉스 환경에서 사용되며, 원격 서버의 파일을 로컬 파일처럼 접근할 수 있도록 해준다.
KMS : Key Management System

EFS의 모드

Performance Mode (성능 모드)

  • General Purpose (기본값) : 지연 시간에 민감한 웹서버나 CMS등에서 사용

    CMS (Content Management System, 콘텐츠 관리 시스템)란?
    CMS는 웹사이트의 콘텐츠(텍스트, 이미지, 동영상 등)를 쉽게 생성, 수정, 관리할 수 있도록 도와주는 소프트웨어. 프로그래밍을 몰라도 웹사이트를 운영할 수 있도록 도와주는 도구. ex WordPress

  • Max I/O : 처리량을 최대화. 지연시간이 더 긴 네트워크 파일 시스템이지만 처리량, 병렬성이 높음. 빅데이터 애플리케이션이나 미디어 처리가 필요한 경우 유용함.

Throughput Mode (처리량 모드)

  • Bursting(1TB) : 50MB/s 에 100MB/s 버스트를 더한 것. 실제 사용 중인 스토리지 용량에 따라 처리량을 확장하여 조금 더 늘릴 수 있다.
  • Provisioned : 1TB의 스토리지에서 초당 1GB를 처리할 수 있다. 비용을 미리 지불함.(스토리지와 처리량을 분리함)
  • Elastic : 워크로드에 따라 처리량을 자동으로 조절할 수 있다. 사용한 만큼 비용 지불. 사용량을 예측할 수 없는 워크로드에 적합. (ex. 읽기 쓰기 작업 따로 설정)

EBS 스토리지 클래스

스토리지 계층을 설정할 수 있고 며칠 후 파일을 다른 계층으로 옮길 수 있는 기능

  • 표준 : 자주 엑세스 하는 파일을 위한 계층. 가용성, 내구성 측면에서 다중AZ를 사용할 경우 적합.
  • EFS-IA: 자주 엑세스하지 않는 용도. 파일을 검색할 경우 비용 발생하지만 저장할 경우 비용 감소. 하나의 AZ만 있고 백업은 기본적으로 활성화되도록 설정되어 있으며 엑세스 빈도가 낮은 스토리지 계층과 호환하고 싶다면 사용하는 것이 좋다.
  • 아카이브 : 거의 엑세스하지 않는 데이터용. 저장하는데 비용이 저렴함.
    스토리지 계층 간에 파일을 자동으로 이동하기 위해 수명 주기 정책을 구현해 며칠 후에 파일을 어느 계층으로 이동해야 하는지 정의할 수 있다.
    ✨올바른 EFS스토리지 클래스를 사용하면 최대 90%의 비용을 절감할 수 있다.

—-

EFS 실습

파일시스템 생성하기

1. EFS > Creat file system 선택

2. 이름(옵션)과 연결할 vpc선택(여기서는 기본으로 선택)하고 Customize 선택

여기서 마운트 위치 확인하고 나중에 연결된 ec2 인스턴스의 해당 지점으로 가면 파일 시스템 사용 가능

3. 파일시스템 유형 설정하기


파일시스템 유형을 Regional( 여러 AZ에 걸쳐 한 지역 내에 파일 시스템을 제공. 데이터의 가용성과 내구성을 매우 높게 유지. 프로덕션 환경에서 선택), One Zone(특정 AZ 하나만 선택. 비용절감) 중에 선택한다.
자동백업은 활성화된 상태로 유지하는 것이 좋다.

4. 수명주기 관리하기


수명주기 관리는 여러 스토리지 계층으로 데이터를 이동하여 비용을 절감할 수 있다.
예를 들어 30일 동안 접근하지 않은 파일은 IA로 이동시킬 수 있다.
암호화는 활성화 상태로 둔다.

5. 성능 설정하기


처리량 모드에서 선택하기

6. 네트워크 설정하기


EFS를 위한 특정 보안 그룹을 생성하여 적용한다.
이때 인스턴스들이 EFS로 접근할 수 있도록 설정한다.
타입: NFS, 소스: EC2 인스턴스가 속한 보안 그룹 ID
나머지 설정은 건너뛰고 생성한다.

7. EC2 인스턴스에 마운트하기

EC2 인스턴스 생성 시
네트워크 설정에서 서브넷(AZ)을 선택한다.
스토리지 설정 > File system > EFS > add shared file system를 선택하면 바로 연결된다.
연결된 내역은 EFS콘솔에서 확인 가능하다.

  • AWS 콘솔에서 EC2를 만들 때, "스토리지 > EFS 파일 시스템 추가" 옵션을 설정했다면:
    인스턴스가 부팅될 때 자동으로 EFS가 지정된 디렉터리에 마운트되도록 /etc/fstab 설정도 같이 잡아줌.(부팅 시 자동 마운트)
    이 경우에는 efs-utils가 AMI에 이미 설치돼 있다면 추가 설정 없이 잘 작동함.
    예: Amazon Linux 2, Ubuntu 20.04 (최신) 등에서는 이미 설치되어 있음.

    단, 다음에 해당되면 수동 설치 필요:
    EFS 마운트 지점 연결 실패 에러 발생 시
    직접 만든 커스텀 AMI거나, efs-utils 미설치된 베이스 이미지인 경우
    수동으로 마운트 지점(디렉터리) 변경이 필요한 경우

  • 이미 생성된 인스턴스에 EFS에 연결하려한다면: EC2에 접속해서 직접 마운트 설정하기
    - efs-utils 깃허브: Amazon EFS Utils 도구의 소스 코드와 빌드 방법 안내
    - EFS 클라이언트 수동 설치
    - EFS 탑재 도우미를 사용하여 EC2 Linux 인스턴스에 탑재

sudo -s
        
# 마운트 확인
df -h
        
# 파일 시스템 탑재 지점으로 사용할 디렉터리 efs를 생성
mkdir efs 
        
sudo apt install git
        
# amazon-efs-utils 패키지를 설치
sudo apt-get update
sudo apt-get -y install git binutils rustc cargo pkg-config libssl-dev gettext
git clone https://github.com/aws/efs-utils
cd efs-utils
./build-deb.sh
sudo apt-get -y install ./build/amazon-efs-utils*deb
        
# 전송 중 데이터 암호화를 사용하려면 다음 명령을 사용하여 파일 시스템을 탑재
# fs-~~값은 EFS 파일 시스템 ID값으로 변경 필요함.(콘솔에서 확인)
sudo mount -t efs -o tls fs-032wfd723xf523421:/ efs 
    

여러 인스턴스가 같은 EFS를 마운트 할 때 주의할 점

항목설명
✅ 보안 그룹모든 인스턴스가 EFS의 보안 그룹 설정에서 접근을 허용한 인스턴스들의 보안그룹을 사용해야 함 (NFS TCP 2049 포트)
✅ 마운트 대상마운트 명령에서 fs-XXXX:/ 부분이 같다면 동일한 EFS
✅ 경로 충돌로컬 경로는 인스턴스마다 다르게 해도 무관하지만, 없거나 쓰면 안 되는 디렉토리에 마운트하면 에러 발생
✅ 영속 마운트부팅 시 자동 마운트를 원하면 /etc/fstab 설정 필요 (위에서 인스턴스 생성시 EFS연결했다면 AMI 조건에 따라 이미 되어있음)
profile
공부 기록

0개의 댓글