같은 리전 내 여러 AZ에 배치된 EC2/ECS/EKS/Lambda가 NFS(2049)로 동시에 마운트하는 공유 파일시스템 / 다른 리전에서 직접 마운트는 불가
EC2는 서로 다른 AZ에 흩어져 있어도 된다
EFS는 “같은 리전” 안이라면 그 여러 AZ의 EC2들이 하나의 EFS를 함께(동시에) 마운트해 쓸 수 있다
=> 즉, 리전(Region) = 서울/도쿄 같은 “큰 구역”, AZ = 그 안의 서로 떨어진 데이터센터 묶음
EFS는 “서울 리전”에 만들면 서울 리전의 AZ들(예: ap-northeast-2a, 2b, 2c) 어디에 있는 EC2든 같은 EFS 폴더를 공유할 수 있음

다른 AZ에 위치한 인스턴스들을 EFS를 통해 동일한 네트워크 파일 시스템에 동시에 연결 가능
EFS에 대한 액세스를 제어하려면 보안 그룹을 설정해야 함
💡 EFS는 윈도우가 아닌 Linux 기반 AMI와만 호환된다 ‼️
보안
EFS는 수천 개의 NFS 클라이언트가 동시에 붙을 수 있고, 처리량도 10 GiB/s를 넘길 수 있으며, 저장 용량은 자동으로 페타바이트(PB) 규모까지 확장
EFS 성능은 크게 두 축으로 스케일 됨
Performance mode (파일시스템 생성 시 결정)
Throughput mode (운영 중 변경 가능)
Bursting(기본(1TB)): 저장 용량에 비례해 기본 처리량 + 버스트 크레딧 제공.
Provisioned Throughput: 저장 용량과 무관하게 처리량을 고정 예약
Elastic Throughput: 워크로드 변동을 자동 추적해 처리량을 탄력 적용(운영 단순화, 사용량 기반 과금) => 워크로드를 예측하기 어려울 때 유용
결정법
1) 평균적/보통 패턴 → Bursting(저렴·간편)
2) 작은 데이터 + 상시 고부하 → Provisioned
3) 예측 불가한 변동 → Elastic
IOPS는 처리량에 종속
EFS는 블록 스토리지(EBS)처럼 “고정 IOPS”를 잡는 모델이 아님
작은 IO가 많으면 IOPS 수요가 커지고, 큰 IO는 처리량(Throughput) 한도에 더 민감
필요 시 Provisioned/Elastic로 처리량을 확보하고, 클라이언트 측 NFS 파라미터(rsize/wsize), 병렬성, 워커 수로 실효 IOPS를 끌어올림
? Storage tiers
=> 파일 접근 빈도에 따라 다른 등급(클래스)로 자동 이동시키는 기능을 말하고, 며칠(정책) 후 IA/Archive로 내리거나, 접근 시 다시 Standard로 올리는 것까지 설정
Standard (Regional):
One Zone:
Frequent Access: 자주 접근하는 데이터에 맞춘 등급(기본)
IA (Infrequent Access):
드물게 접근하는 파일용
요청/조회 비용(파일 검색) 비용이 발생하지만 저장하면 비용이 감소함
최소 보관 기간 요금(예: ~30일)이 적용될 수 있음
Archive:
거의 액세스하지 않는 데이터용(1년에 몇 번 정도) 50% 정도 저렴
전반적으로 올바른 EFS 스토리지 클래스를 사용하면 최대 90%의 비용 절감 가능


VPC는 default로 진행하되 Customize로 옵션을 살펴보겠다

Regional을 선택하면 다중 AZ가 지원된다

하지만 One Zone을 선택하면 AZ를 하나 특정해야 함

백업은 활성화된 채로 유지하는 것이 좋음

IA나 아카이브로 전환했다가 다시 스탠다드로 전환 가능
ex) 30일동안 파일에 액세스 하지 않으면 IA로 이동 / 90일동안 액세스하지 않으면 아카이브로 이동

Enhanced => elastic과 Provisioned을 그룹화하는 카테고리에 불과함
Elastic: 트래픽에 맞춰 자동으로 처리량을 확장/과금(스파이크/예측 어려운 워크로드에 적합)
Provisioned: 용량과 무관하게 처리량을 고정 예약(지속 고처리량, 예측 가능한 워크로드)
Bursting: 파일시스템 크기와 버스트 크레딧에 비례해 처리량 제공(기본값, 단 단발성 피크 중심)
Bursting 처리량 모드에서만 쓰이는 토큰 같은 개념이야.
파일시스템마다 용량(저장한 데이터 양)에 비례한 기본 처리량(베이스라인)이 있음
네 I/O가 이 베이스라인보다 낮게 쓰일 때는 크레딧이 쌓이고,
베이스라인보다 높게 쓰고 싶을 때는 크레딧을 소모해서 일시적으로 더 빠르게 달릴 수 있어.
흐름 요약
한가할 때(트래픽↓) → 베이스라인 이하 사용 → 크레딧 적립
바쁠 때(트래픽↑) → 베이스라인 초과 사용 → 크레딧 사용해 고처리량 버스트
크레딧 소진 → 다시 베이스라인 속도로 제한(성능이 확 느려진 느낌)
포인트: 저장 용량이 작을수록 베이스라인이 낮아 크레딧을 빨리 다 써버릴 수 있음
반대로 용량이 클수록(몇 TiB 이상) 베이스라인 자체가 높아 버스트 없이도 꽤 오래 빠르게 버틸 수 있음

us-ease-? 존에 대한 EFS 네트워크 설정
EFS를 위한 SG(Security Group) 만들어주기


그 다음 단계들은 선택 사항이라서 건너뛰고 Create File system 클릭

잘 생성된 것 확인 가능
EC2 인스턴스에 EFS를 연결해볼건데 Instance 생성시

우측 하단 부 "Edit" 버튼 클릭


네트워크 설정에서 Subnet을 설정해줘야 EFS 연동 가능

Instance A로 이름을 지어서 us-east-1a를 선택했다

Add shared file system 클릭


Automatically mount shared file system by attaching required user data script
=> EC2를 띄울 때 “유저 데이터(User data) 스크립트”를 자동으로 붙여서 EFS를 부팅 시점에 알아서 마운트해 주는 옵션
유저 데이터 스크립트가 EC2 첫 부팅 때 자동 실행되어 아래 작업 실시
필요 패키지 설치
amazon-efs-utils(또는 NFS 클라이언트) 설치
마운트 지점 준비
예: mkdir -p /mnt/efs
마운트 수행(보통 TLS 포함)
예: mount -t efs -o tls fs-XXXX:/ /mnt/efs
Access Point를 쓰면 fs-XXXX:AP-YYYY:/ 형태로 마운트
/etc/fstab 등록(부팅 시 자동 마운트)
재부팅해도 자동으로 붙도록 엔트리를 추가
예: fs-XXXX:/ /mnt/efs efs _netdev,tls 0 0
즉, 인스턴스를 만들자마자 사람이 SSH로 들어가서 설치/마운트 설정을 하지 않아도 되도록 자동화해 주는 “부팅 초기화 스크립트”

EFS를 붙여서 확실히 인스턴스 생성하는데 시간이 걸린다
같은 방식으로 Instance B를 만들어 같은 EFS를 연결
EFS의 네트워크 탭으로 가면

각 가용 영역에 여러 보안 그룹이 존재하는 것 확인 가능
=> 우리가 연결한 efs-demo 말고도 EC2 콘솔이 대신 생성해 EFS 파일 시스템에 연결
EFS에서 “보안(시큐리티) 자동 설정” 체크 + 여러 AZ 선택 ⇒ 선택한 각 AZ의 서브넷마다 “마운트 타깃(ENI)”을 만들고, 그 ENI에 지정한 SG가 붙음
EC2 인스턴스를 us-east-1a/1b에만 띄웠더라도, EFS를 us-east-1의 다른 AZ(1c/1d …)까지 선택했다면 그 AZ들에도 마운트 타깃이 생성되고 동일/지정 SG들이 붙어 보이는 게 정상

efs-sg-2 SG 그룹 상세 > Inbout rules를 확인하면 NFS 프로토콜 유형과 2049 포트 허용하는 것 확인 가능

Instance A Connect & Instance B Connect
Instance A로 Connect된 터미널 창에 다음과 같은 명령어 입력

EC2 인스턴스로부터 EFS 파일 시스템에 파일 생성 & 가용 영역 us-east-1a
Instance B로 이동해서 아래와 같은 명령어를 입력하면 Instance A에서 생성한 파일을 찾을 수 있다

두 EC2 인스턴스 모두 EFS 파일 시스템이 네트워크 드라이브로 마운트 된 것