...
EFS (Elastic File System)
Amazon EFS(Elastic File System)는 이름에서 볼수 있듯이, AWS 클라우드 서비스와 온프레미스 리소스에서 사용할 수 있는 간단하고 확장 가능하며 탄력적인 파일 스토리지를 제공하는 서비스 이다.
EFS는 리눅스 인스턴스를 위한 확장성, 공유성 높은 파일 스토리지로, EC2 Linux 인스턴스에 마운트된 Network File System(NFS)을 통해 VPC에서 필요한 파일에 접근하거나 AWS Direct Connect로 연결된 온프레미스 서버의 파일에 접근할 수 있다.
쉽게 생각해서 EFS는 회사의 온프레미스 환경의 NFS, NAS 폴더와 비슷한 서비스라고 이해하면 된다.
그래서 수천대의 EC2 인스턴스간 파일 시스템 공유 가능하며, 병렬 접근이 가능하도록 설계되어 있어, 두 개 이상의 EC2로부터 하나의 공유된 스토리지 공간이 필요할 때 EFS를 채택하면 된다.
EFS는 사용이 간편하며, 파일 시스템을 쉽고 빠르게 생성 및 구성할 수 있는 간단한 인터페이스를 제공한다.
EFS는 애플리케이션을 방해하지 않으면서 필요에 따라 탄력적으로 확장되도록 구축되어, 파일을 추가하고 제거함에 따라 자동으로 확장되고 축소되므로, 애플리케이션에서는 필요할 때 필요한 만큼 스토리지를 확보할 수 있다.
또한 리전별 서비스인 EFS는 여러 가용 영역에 걸쳐 데이터를 중복으로 저장하여 높은 가용성과 내구성을 제공하도록 설계되어있다.
정리하자면, EFS는 다수의 인스턴스에서 파일에 접근할 수 있는 전송 지연 문제가 적으며 안전하며 내구성이 높은 네트워크 파일 스토리지 서비스 라고 할수 있다.
EFS는 리눅스용 파일 서비스이다.
따라서 윈도우는 지원되지 않으며, 아마존 리눅스 AMI에 최적화 되어 있다.
우분투 역시 연결이 가능하지만 설정이 약간 복잡하다는 흠이 있다.
필요에 따라 리눅스 삼바와 연동하기도 한다.
EFS 특징
스케일링
- 수천 개의 EC2에서 동시에 액세스 가능하며, 탄력적으로 파일을 추가하고 삭제함에 따라 자동으로 Auto Scaling 가능, 즉 미리 크기를 프로비저닝할 필요가 없음
- 페타바이트단위 데이터까지로 확장 가능
- 최대 1천개의 파일 시스템 생성 가능
가용성
- VPC 내에서 생성되며, 파일 시스템 인터페이스를 통해 EC2에 액세스
- 여러 가용영역에서 액세스 가능
- 여러 가용영역에 중복 저장되기 때문에 하나의 가용영역이 파괴되더라도 다른 AZ에서 서비스 제공 가능하다.
- EFS는 EBS와 달리 multi AZ를 지원하고 network를 타기 때문에 security group으로 제어된다.
(EBS는 단일AZ에서만 동작하고 직접 연결되서 보안그룹이 없다)
스토리지 클래스
EFS는 S3와 같이 스토리지 클래스가 존재한다.
- Standard Class : 자주 액세스하는 파일을 저장하는데 사용하는 클래스
- Infrequent Access(IA) Class : 저장기간이 길지만 자주 액세스하지 않는 파일을 저장하기 위한 클래스
수명 주기 관리
- lifecycle을 통해 잘 접근하지 않는 파일은 자동으로 EFS IA(Infrequently accessed)로 옮겨 저렴하게 이용할 수 있다.
성능 모드 / 처리량 모드
- 처리량 모드에 있어서 대부분의 파일시스템에 Bursting Mode를 권장하지만,
처리량이 많을 경우 Provisioned Mode를 권장 된다. - 성능 모드에 있어서 액세스하는 EC2가 매우 많을 경우, MAX I/O mode를 사용하는 것이 바람직하며(지연시간이 약간 길어짐) 그 밖의 경우 General Mode를 사용하는 것이 권장 된다.
뒤에서 EFS 실전 구축 예제에서 자세히 다룬다
파일 마운트
- EFS DNS 이름으로 mount 해서 여러 인스턴스에서 동시에 사용할 수 있다.
- Block storage와 마찬가지로 File storage도 mount 하면 내 로컬의 파일 시스템처럼 사용할 수 있다.
- Amazon EFS를 사용하여 기존 파일 시스템에서 AWS DataSync로 파일을 전송할 수 있다.
파일 백업 옵션
- DataSync :
- DataSync는 온프레미스 스토리지와 Amazon EFS 파일 시스템 간의 상시 연결을 유지하여 둘 사이에서 데이터를 쉽게 이동하도록 도움.
- DataSync는 대량의 데이터를 정기적으로 가져오기 및 내보내기, 일회성 데이터 마이그레이션 또는 데이터 복제 및 복구에 사용할 수 있음.
- 리전간 전송에도 AWS DataSync를 사용할 수 있음
- AWS Tranfer Family :
- SFTP, FTPS, FTP를 지원하는 완전관리형 파일 전송 서비스.
- Amazon EFS 내부 및 외부 파일 전송을 가능하게 함.
- AWS Transfer Family 엔드포인트는 EFS 파일 시스템과 동일한 리전에 있어야 함 (리전 간 전송 불가)
- AWS Backup : Amazon EFS의 백업 정책 및 예약을 자동화하고 추적함
- EFS-to-EFS backup : EFS 파일의 증분 백업을 자동으로 생성
파일 시스템 정책
- EFS를 사용하는 모든 NFS 클라이언트들에게 적용되는 IAM 리소스 정책
- 전송 중 암호화, 루트 액세스 비활성화, 읽기 전용 액세스 등 설정 가능
EFS 실전 구축 세팅
- EFS 생성 시 VPC 내 가용영역의 서브넷에 Mount Target 생성
EFS 생성 준비과정
1. VPC DNS 설정
2. EFS 전용 보안그룹 생성
EFS는 파일시스템 전용 보안그룹이 필요하다.
따라서 EFS 전용 보안그룹을 따로 만들어주자.
EFS 만들기
EFS 생성 및 설정
1. 파일 시스템 생성
- 리전 - 가용영역(AZ)에 분산시켜 EFS 환경을 나눈다 - 여러곳에 똑같은 데이터가 저장된다
- ONE ZONE - 한곳에만 저장해서 가용성 떨어짐
2. 파일 시스템 사용자 지정
3. EFS 수명 주기 설정
Amazon EFS 수명 주기 관리는 파일 시스템에 대한 비용 효율적인 파일 스토리지를 자동으로 관리한다.
이 기능이 활성화되면 수명 주기 관리가 설정된 기간 동안 액세스하지 않은 파일을 Infrequent Access(IA) 스토리지 클래스로 마이그레이션한다.
수명 주기 관리가 파일을 IA 스토리지 클래스로 이동하면 해당 파일은 무기한 보존된다.
- 표준 – 표준 스토리지 클래스는 자주 액세스하는 파일을 저장하는 데 사용
- Infrequent Access – Infrequent Access(IA) 스토리지 클래스는 수명이 길고 자주 액세스하지 않는 파일을 비용 효율적으로 저장하기 위해 고안된 저비용 스토리지 클래스
4. 성능 모드 / 처리량 모드 설정
▶ 성능 모드
범용 성능 모드 | 최대 I/O 성능모드 |
지연시간에 민감한 사용 사례에 이상적. Default 설정임. |
높은 수준의 집계 처리량 및 초당 작업으로 확장. 다만 이로인해 지연시간이 늘어날수도 있다. (절충 필요) 빅데이터 분석, 미디어 처리, 고도의 병렬 처리를 요할 때 추천. |
* 파일 시스템은 성능 모드와 관계없이 동일하게 청구 및 측정이 됨. 즉 추가비용이 발생하지 않는다.
* 파일 시스템을 만든 후에는 EFS 파일 시스템의 성능 모드를 변경할 수 없다.
▶ 처리량 모드
버스팅 모드 | 프로비저닝 처리량 모드 |
표준 스토리지 클래스의 파일 시스템 크기가 커짐에 따라 처리량 자동 조정. 단기간에 처리량을 높이고 나머지 기간에는 처리량을 낮춤. |
저장된 데이터 양에 상관없이 파일시스템의 처리량을 즉시 프로비저닝 가능. (한마디로 하드 같이 미리 용량 확보) *1MB당 추가비용 발생 약 월 7천원 |
* 마지막 축소 후 24시간이 지나면 프로비저닝 모드에서 파일 시스템 처리량 축소 가능.
* 마지막 변경 후 24시간이 지나면 처리량 모드 변경 가능.
5. EFS 암호화 설정
EFS는 유휴시(저장된) 데이터 암호화와 전송시 데이터 암호화를 지원하고 있다.
사용자는 암호화 활성화 여부와 암호화에 사용할 KMS 키를 지정할 수 있다.
암호화 키는 기본적으로 AWS KMS에서 제공되는 서비스 키(aws/elasticfilesystem)를 사용하며, 사용자가 직접 KMS 키를 설정할 수도 있다.
6. VPC 전반적인 설정
마운트할 EC2 인스턴스가 위치하는 VPC, 가용 영역, 서브넷을 선택한다.
7. EFS 정책 설정
8. 검토 및 생성
EFS 보안 그룹 변경
만일 EFS 보안 그룹을 변경하고 싶다면, 파일 시스템 보안그룹 탭에서 변경이 가능하다.
EFS 마운트 하기 (EC2 연결하기)
EC2 생성할때 EFS 연결
EC2 인스턴스를 새로 생성할때 처음부터 EFS 마운트를 지정하는 방법이다.
따로 복잡한 마운트 절차없이 한방에 간단하게 설정할수 있다.
파일 시스템을 추가하면 /mnt/efs/fs1이라는 마운트 할 디렉토리가 추가된다.
위에서 따로 보안 그룹을 설정해줬기 때무에, 필요한 보안 그룹을 자동으로 생성 및 연결은 체크하지 않는다.
파일 시스템을 추가하면, 고급 세부 정보의 사용자 데이터에 파일 시스템을 마운트할 때 필요한 명령어들이 자동으로 포함되는걸 볼 수 있다.
이제 마저 설정한 뒤, EC2를 설정하고 CLI에 접속해보자.
그리고 df -h 명령어로 마운트 된 디스크 정보를 출력해보면, /mnt/efs/fs1 이 정상적으로 마운트(Avail : 8.0E)가 된걸 볼 수 있다.
이미 생성된 EC2에 EFS 연결
이번에는 이미 생성된 EC2 인스턴스에 EFS를 마운트 해보는 법을 알아보자.
위의 인스턴스는 파일 시스템 추가할 때 사용자 데이터에 알아서 명령을 넣어줬기 때문에 efs가 잘되었지만, 수동으로 이미 있는 EC2에 마운트하려고 할때는 직접 명령어를 이용해 연결해야 하는 번거로운 과정을 거치게 된다.
우선 EC2 인스턴스를 하나 더 생성하자.
이때는 위처럼 파일시스템을 연결 설정 하지 않고 그냥 생으로 만들어준다. 이미 생성된 EC2에 EFS를 연결하는 방법을 알아볼 것이기 때문이다.
그리고 EFS 메뉴에 가서, 파일 시스템에서 [세부 정보 보기]를 클릭하고 [연결] 버튼을 클릭한다.
그러면, 아래와 같이 Linux 인스턴스에 탑재하는 명령어가 나오게 된다.
인스턴스에 파일 시스템 탑재 방법으로는, DNS를 통해 탑재하거나 IP를 통해 탑재할 수 있다.
그 중, DNS를 통해 탑재하는 방법에도 2가지 방법이 있다.
- EFS 탑재 헬퍼 사용
- NFS 클라이언트 사용
위 두가지 명령어를 중에서, EFS 탑재 헬퍼를 사용해 마운트 해보자.
Amazon EFS 탑재 헬퍼는 파일 시스템 탑재를 간소화시켜준다.
탑재 헬퍼는 Linux의 표준 efs 명령과 완전히 호환되는 mount이라는 새로운 네트워크 파일 시스템 유형을 정의한다.
또한 탑재 헬퍼는 /etc/fstab 구성 파일의 항목을 사용해 자동으로 부팅 시 인스턴스에 EFS 파일 시스템을 탑재하는 것을 지원한다.
준비가 되었으면, 위에서 또 새로 만든 EC2-EFS-2 인스턴스에 접속해준다.
df -h 명령을 쳐보면 당연히 EFS 파일시스템에 마운트가 안되있을 것이다.
앞서 만든 EC2-EFS-1 인스턴스와 파일시스템 공유를 위해 /mnt/efs/fs1 디렉터리를 똑같이 생성해준다
$ sudo -s
$ mkdir -p /mnt/efs/fs1 # -p : 하위 디렉토리 경로대로 생성
이제 EFS의 탑재 헬퍼를 이용해 마운트할 예정인데, 우선적으로 탑재 헬퍼를 사용하려면 amazon-efs-utils 패키지를 설치 해야한다.
그리고 위의 EFS 탑재 핼퍼 명령어를 넣어준다. $ sudo mount -t efs -o tls fs-008ead77ff58efe51:/ <폴더경로>
TLS 옵션은 전송 중 데이터의 암호화를 활성화하는 옵션이다.
이 명령어로 mount하면 127.0.0.1로 표시가 되고, 암호화를 설정하지 않으려면 default 옵션을 이용하면 된다.
$ yum install -y amazon-efs-utils # 패키지 설치
$ sudo mount -t efs -o tls fs-008ead77ff58efe51:/ /mnt/efs/fs1 # EFS 탑재 helper
$ ll /mnt/efs/fs1 # 파일 공유가 되는지 확인하기위해 디렉토리 리스트 조회
정상적으로 EFS가 마운트 됨을 확인할 수 있다.
하지만 이 단순히 핼퍼 명령어를 사용해서 탑재하면, EC2를 재부팅하면 마운트가 다시 해제되는 현상이 있다. (EBS 마운트와 똑같다)
그렇기 때문에, 자동으로 /etc/fstab 을 이용해 자동 마운트 설정 해야한다.
fs-008ead77ff58efe51:/ /mnt/efs/fs1 efs _netdev,tls 0 0
_netdev 옵션은 네트워크에 연결 후 마운트하라는 옵션이다.
이렇게 해야 시스템 시작 시 문제 없이 해당 네트워크 경로로 자동 마운트 되기 때문이다.
_netdev이 빠진 경우 EC2 인스턴스가 응답을 중지하게 된다.
CentOS 와 Ubuntu 에서의 EFS 마운트
아마존 LINUX AMI가 아닌 CentOS나 Ubuntu 에서 EFS 파일시스템 마운트 하는 방법을 추가로 알아보자.
CentOS는 amazon-efs-utils가 아닌 nfs-utils를 대신 설치하고 똑같이 진행하면 된다.
그러나 우분투는 약간 번거롭게 해줘야 할 작업이 있다.
우분투에서 EFS 탑재 핼퍼 명령어를 넣어주기전에 다음과 같은 과정을 진행해줘야 한다.
$ mkdir efs # efs디렉토리에 마운트 할 예정
$ sudo apt install git
$ git clone https://github.com/aws/efs-utils # efs util 설치
$ sudo apt install -y make
$ sudo apt install -y binutils
$ cd efs-utils
$ ./build-deb.sh # efs util 쉘 스크립트 실행
$ sudo apt install ./build/amazon-efs-utils*deb
# cd ~
$ sudo mount -t efs -o tls fs-008ead77ff58efe51:/ efs # 파일시스템 마운트
EFS 프리티어
EFS의 무료 사용량에 대해선, 다음 정리된 포스팅을 참고 바란다.
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.