Amazon Elastic File System(EFS)
Amazon EFS는 AWS 클라우드 서비스와 온프레미스 리소스에서 사용할 수 있는, 간단하고 확장 가능하며 탄력적인 완전관리형 NFS 파일 시스템을 제공합니다. 이 제품은 애플리케이션을 중단하지 않고 온디맨드 방식으로 페타바이트 규모까지 확장하도록 구축되어, 파일을 추가하고 제거할 때 자동으로 확장하고 축소하며 확장 규모에 맞게 용량을 프로비저닝 및 관리할 필요가 없습니다.
보통 EBS와 EC2가 1:1 매칭되는 것과 달리, 여러 EC2가 공용으로 사용하는 스토리지로서, 세션 / 소스코드 등을 공유해야 할 때 사용한다.
Amazon EFS
- NFS 기반 공유 스토리지 서비스 (NFSv4)
- 따로 용량을 지정할 필요 없이 사용한 만큼 용량이 증가 ↔ EBS는 미리 크기를 지정해야 함
- 페타바이트 단위까지 확장 가능
- 몇 천개의 동시 접속 유지 가능
- 데이터는 여러 AZ에 나누어 분산 저장
- 쓰기 후 읽기(Read After Write) 일관성
- Private Service: AWS 외부에서 접속 불가능
- AWS외부에서 접속하기 위해서는 VPN 혹은 Direct Connect 등으로 별도로 VPC와 연결 필요
- 각 가용영역에 Mount Target을 두고 각각의 가용영역에서 해당 Mount Target으로 접근
- Linux Only
Amazon EFS 퍼포먼스 모드
- General Purpose: 가장 보편적인 모드. 거의 대부분의 경우 사용 권장
- Max IO: 매우 높은 IOPS가 필요한 경우
- 빅데이터, 미디어 처리 등
Amazon EFS Throughtput 모드
- Bursting Throughput: 낮은 Throughput일 때 크레딧을 모아서 높은 Throughput일 때 사용
- EC2 T타입과 비슷한 개념
- Provisioned Throughput: 미리 저장한 만큼의 Throughput을 미리 확보해두고 사용
Amazon EFS 스토리지 클래스
- EFS Standard: 3개 이상의 가용영역에 보관
- EFS Standard-IA: 3개 이상의 가용영역에 보관, 조금 저렴한 비용 대신 데이터를 가져올 때 비용 발생
- EFS One Zone: 하나의 가용영역에 보관 → 저장된 가용영역의 상황에 영향을 받을 수 있음
- EFS One Zone-IA: 저장된 가용영역의 상황에 영향을 받을 수 있음. 데이터를 가져올 때 비용 발생(가장 저렴)
Amazon FSx
- FSx for Windows File Server
- EFS의 윈도우즈 버전
- SMB 프로토콜 활용
- Microsoft Active Directory와 통합 등의 관리 기능 사용 가능
- Linux, MacOS등의 다른 OS에서도 활용 가능
- FSx for Lustre
- 리눅스를 위한 고성능 병렬 스토리지 시스템
- 주로 머신러닝, 빅데이터등의 고성능 컴퓨팅(High Performance Computing)에 사용
- AWS 밖의 온프레미스에서 액세스 가능
실습
- EFS를 활용한 스토리지 공유 웹서버 만들기
- Amazon EFS를 위한 보안 그룹 생성
- Amazon EFS 생성
- EC2 인스턴스 3개 프로비전
- 유저 데이터
- 생성한 EFS를 마운트
- 웹 서버 생성/실행
- 각 웹서버에서 스토리지를 공유하는 것을 확인
- 리소스 정리
- EC2 > 보안 그룹 > 보안 그룹 생성 클릭
- 위와 같이 설정 후 생성하기
- EFS > 파일 시스템 생성 > 위와 같이 설정
- 생성한 EFS > 네트워크 탭에서 보이는 것들이 바로 Mount Target들.
- 보안 그룹은 default로 설정되어있는 것을 볼 수 있음
- 관리를 누른 후 default 보안 그룹을 방금 생성한 SG로 변경해준다.
- EC2 생성
- 이름: Demo-EC2-EFS
- 인스턴스 개수: 3개
- 키페어: 키 페어 없이 계속 진행
- 네트워크 설정: 기존 보안 그룹 선택, Demo-EFS-SG로 선택
- 고급 세부 정보 > 사용자 데이터에 아래 붙여넣기
#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.ap-northeast-2.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
- 아무 EC2 인스턴스 하나를 연결하고, 아래와 같은 프롬프트를 작성하자.
- /var/www/html/efs-mount-point/sampledir 위치에서 index.html을 하나 만들자
sudo -s cd /var/www/html/efs-mount-point/sampledir # 우리가 바라보고 있는 EFS 폴더
- publicIP/efs-mount-point/sampledir/index.html 로 접근하게 되면, 만든 html 파일을 볼 수 있다.
- 모든 EC2가 동일한 html 파일을 보여주고 있다.