aws EFS 구축

김진욱·2024년 3월 7일

시나리오

ec2 2대로 로드밸런싱을 하고 있던 운영 서버에서 파일 업로드가 제대로 안되고 있다고 확인 요청이 왔습니다.
확인 해본 결과 업로드 한 임시파일을 찾지 못해서 생기는 오류 였습니다.
현재 파일을 저장 하는 순서는 아래와 같습니다.
1. 파일 업로드 시 ec2 로컬 디렉토리에 meta data 파일을 임시저장
2. 저장 api 호출 시 meta data 조회 후 실제 db에 저장

was1 was2 가 있다고 가정해봅시다.
위 1번 작업을 was1 에서 진행 하고 저장 api 호출 할 때 로드밸런싱에서 was2로 밸런싱 하게 되면 1번에서 저장한 임시파일을 조회 할 수 없어서 파일을 저장할 수 없게 됩니다

여기서 고민을 했던 선택지는 2가지 였습니다

  • 로드밸런싱 옵션을 Sticky Session으로 변경한다.
    - Sticky Session 이란 특정 세션의 요청을 하나의 서버로만 전송하는 옵션입니다.
  • was1, was2 에서 공유 할 수 있는 nfs를 둔다.

aws EFS 채택!

로드밸런싱 옵션을 Sticky Session로 바꾸게 되면 과부하를 줄여주는 로드밸런싱의 사용 의미와 멀어지게 되는거라서 NFS를 채택했고, 그중 아마존에서 서비스 하는 EFS를 사용하기로 했습니다

EFS (Elastic File System)

AWS 클라우드 서비스와 온프레미스 리소스에서 사용할 수 있는 간단하고 확장 가능하며 탄력적인 파일 스토리지를 제공하는 서비스

EFS 구축 과정

1. 보안그룹 생성

마운트 할 ec2 에서 사용하는 vpc를 선택하고 인바운드 규칙으로 ec2에서 사용중인 보안그룹을 추가해줍니다.


2. EFS 생성

성능 및 옵션, 요금은 공식 홈페이지를 참조
https://aws.amazon.com/ko/efs/features/
https://aws.amazon.com/ko/efs/pricing/
여기서 자세히 볼 부분은 네트워크 입니다. 1번에서 생성한 보안그룹(EFS-TEST)을 마운트 할 ec2가 위치하는 가용영역 마다 추가해주시면 됩니다.


3. EC2 보안그룹 업데이트

마운트 할 EC2의 보안그룹에 1번에서 생성 한 보안그룹을 추가해줍니다.

4. 마운트

생성한 EFS 파일시스템 상세 -> 연결 버튼 클릭

DNS 탑재, IP 탑재 방식 중 선택

EFS의 탑재 헬퍼를 사용하려면 amazon-efs-utils 패키지를 설치 해야합니다.
설치 후 마운트 할 디렉토리 생성 후 위에서 확인 한 명령어로 마운트 시켜줍니다.

  • Centos 계열 설치
yum install -y amazon-efs-utils
  • Ubuntu 계열 설치
sudo apt install git
git clone https://github.com/aws/efs-utils
sudo apt install -y binutils
cd efs-utils
./build-deb.sh
sudo apt install ./build/amazon-efs-utils*deb
  • Ubuntu 14 이하

Ubuntu 14버전 이하는 종속성 문제로 설치가 되지 않는것으로 확인 됐습니다. 버전이 낮은 Ubuntu를 사용중이신 분은 EFS 헬퍼가 아닌 nfs-common 설치 후 마운트 진행하시면 됩니다

apt-get install nfs-common
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport {{ip}}:/ /{{mount-directory}}
profile
2021.12~ 공부의 기록

0개의 댓글