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와 연결되어 있기 때문에 다른 인스턴스도 모두 업데이트 됨
'개발 공부 > AWS' 카테고리의 다른 글
[AWS] SAA 공부 (5)-1 ELB - ALB (Application Load Balancer) (0) | 2025.03.22 |
---|---|
[AWS] SAA 공부 (5) ELB (Elastic Load Balancer) (0) | 2025.03.22 |
[AWS] SAA 공부 (3)-6 EC2 - ENI (Elastic Network Interfaces) (0) | 2025.03.21 |
[AWS] SAA 공부 (3)-5 EC2 - 배치 그룹 (0) | 2025.03.20 |
[AWS] SAA 공부 (3)-4 EC2 - Elastic IP (0) | 2025.03.20 |